首頁 > 軟體

mysql資料庫表增添欄位,刪除欄位,修改欄位的排列等操作

2022-07-26 14:00:03

修改表指的是修改資料庫之後中已經存在的資料表的結構。​​mysql​​​使用​​alter table​​語句修改表。常用的修改表的操作有修改表名、修改欄位資料型別或者欄位名、增加和刪除欄位、修改欄位的排列位置、更改表的儲存引擎、刪除表的外來鍵約束等。

一、mysql修改表名

語法:

ALTER TABLE <舊錶名> RENAME [to] <新表名>

上面語句中的​​to​​為可選,存在與否不影響執行結果。

舉個栗子:

將​​test_user_2​​​這個資料表,改名為​​test_user_two​​;

首先我們檢視下原來的內容;

mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| test_dept |
| test_user |
| test_user_2 |
| test_user_3 |
| test_user_4 |
| test_user_5 |
| test_user_6 |
| test_user_7 |
| test_user_8 |
| test_user_9 |
+-------------------+
10 rows in set (0.00 sec)

mysql>

然後我們執行語句:

mysql> alter table test_user_2 rename test_user_two;
Query OK, 0 rows affected (0.03 sec)

mysql>

然後再看下是否修改完畢了;

mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| test_dept |
| test_user |
| test_user_3 |
| test_user_4 |
| test_user_5 |
| test_user_6 |
| test_user_7 |
| test_user_8 |
| test_user_9 |
| test_user_two |
+-------------------+
10 rows in set (0.00 sec)

mysql>

注意:修改的只是資料表名,實際上欄位和資料內容都沒有發生變化。

二、mysql修改資料的欄位型別

修改欄位的資料型別,就是把欄位的資料型別轉換成另一種資料型別。

語法:

alter table <表名> modify <欄位名> <資料型別>

舉個栗子:

修改​​test_user_two​​​這個表中的​​money​​​欄位的資料型別,由​​float​​​改為​​int​​型別。

首先看下這個表中的資料結構;

mysql> desc test_user_two;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptid | int | YES | | NULL | |
| money | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql>

然後執行如下語句進行修改;

mysql> alter table test_user_two modify money int;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql>

修改完畢之後我們再看下​​test_user_db​​這個表中的資料結構是否發生變化了。

mysql> desc test_user_two;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptid | int | YES | | NULL | |
| money | int | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql>

三、mysql修改欄位名

語法:

alter table <表名> change <舊欄位名> <新欄位名> <新資料型別>;

舉個栗子:

將​​test_user_two​​​表中的​​money​​​欄位改成​​howmoney​​​,資料型別為​​int​​;

執行語句:

mysql> alter table test_user_two change money howmoney int;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql>

然後我們再看下此時這個​​test_user_two​​資料庫的資料結構是什麼;

mysql> desc test_user_two;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptid | int | YES | | NULL | |
| howmoney | int | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql>

可以看到,已經將欄位修改完畢了。

四、mysql新增欄位

語法:

alter table <表名> add <新欄位名> <資料型別> [約束條件] [first | after 已存在欄位名]

新欄位名為需要新增的欄位的名稱;​​first​​​為可選引數,其作用是將新新增的欄位設定為表的第一個欄位;​​after​​為可選引數,其作用是將新新增的欄位新增到指定的“已存在欄位名” 的後面。

​first​​​或​​after 已存在欄位名​​​用於指定新增欄位在表中的位置,如果​​SQL​​語句中沒有這兩個引數,則預設將新新增的欄位設定為資料表的最後一列。

舉幾個栗子:

1、新增沒有約束性的欄位

在資料表​​test_user_two​​​中新增一個沒有完整性約束的​​int​​​型別的欄位​​year​​(入職幾年);

執行​​sql​​如下:

mysql> alter table test_user_two add year int;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql>

然後我們檢視下修改之後的表結構;

mysql> desc test_user_two;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptid | int | YES | | NULL | |
| howmoney | int | YES | | NULL | |
| year | int | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql>

2、新增一個有約束性的欄位

在​​test_user_two​​​表中新增一個名為​​year1​​​,資料型別是​​int​​,且不可為空的欄位;

執行相關​​sql​​語句;

mysql> alter table test_user_two add year1 int not null;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql>

看下錶結構;

mysql> desc test_user_two;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptid | int | YES | | NULL | |
| howmoney | int | YES | | NULL | |
| year | int | YES | | NULL | |
| year1 | int | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql>

3、在表的第一列新增一個欄位

在​​test_user_two​​​資料表第一列新增一個名字​​year2​​​,資料型別是​​int​​的欄位。

執行相關​​sql​​語句;

mysql> alter table test_user_two add year2 int first;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql>

看下修改之後的表結構是什麼;

mysql> desc test_user_two;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| year2 | int | YES | | NULL | |
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptid | int | YES | | NULL | |
| howmoney | int | YES | | NULL | |
| year | int | YES | | NULL | |
| year1 | int | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql>

4、在資料表中指定列之後新增一個欄位

在​​test_user_two​​​這個資料庫中​​name​​​欄位之後,新增一個名為​​name2​​​,資料型別是​​varchar(50)​​的欄位;

執行​​sql​​語句;

mysql> alter table test_user_two add name2 varchar(50) after name;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql>

可以再次看下錶結構;

mysql> desc test_user_two;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| year2 | int | YES | | NULL | |
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| name2 | varchar(50) | YES | | NULL | |
| deptid | int | YES | | NULL | |
| howmoney | int | YES | | NULL | |
| year | int | YES | | NULL | |
| year1 | int | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

mysql>

可以看到,每次我們都會對這個表結構進行相關的修改。

五、mysql刪除欄位

語法:

alter table <表名> drop <欄位名>;

舉個栗子;

比如我們想將​​test_user_two​​​資料庫中剛新增的​​year2​​欄位刪除;

執行​​sql​​語句為:

看下錶結構;

mysql> desc test_user_two;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| name2 | varchar(50) | YES | | NULL | |
| deptid | int | YES | | NULL | |
| howmoney | int | YES | | NULL | |
| year | int | YES | | NULL | |
| year1 | int | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql>

可以看到已經將名為​​year2​​的欄位進行刪除了。

六、mysql修改欄位的排列位置

有時候我們會面臨修改資料表中某些欄位的排列位置,比如說將某一個欄位排到第一個,或者是將某個欄位後移,看下如何操作。

語法:

alter table <表名> modify <欄位1> <資料型別> first | after <欄位2>;

“欄位1” 指要修改位置的欄位;“資料型別” 指 “欄位1” 的資料型別;“​​First​​​” 為可選引數,指將 “欄位1” 修改為表的第一個欄位;“​​after​​ 欄位2” 指將 “欄位1” 插入到 “欄位2” 後面。

舉兩個栗子;

1、修改欄位為表的第一個欄位

比如我們將​​test_user_two​​​這個資料表中名為​​name2​​的欄位,修改成這個對應資料表中第一個欄位;

執行​​sql​​語句;

mysql> alter table test_user_two modify name2 varchar(50) first;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql>

檢視下表結構;

mysql> desc test_user_two;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| name2 | varchar(50) | YES | | NULL | |
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptid | int | YES | | NULL | |
| howmoney | int | YES | | NULL | |
| year | int | YES | | NULL | |
| year1 | int | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql>

可以看到我們已經成功將​​name2​​這個欄位修改成第一個欄位了;

2、修改欄位為指定列後面

比如我們將​​test_user_two​​​這個表中的​​name2​​​欄位,讓他移動到​​year​​這個欄位後面;

執行​​sql​​語句;

mysql> alter table test_user_two modify name2 varchar(50) after year;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql>

看下錶結構;

mysql> desc test_user_two;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptid | int | YES | | NULL | |
| howmoney | int | YES | | NULL | |
| year | int | YES | | NULL | |
| name2 | varchar(50) | YES | | NULL | |
| year1 | int | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql>

可以發現,已經將​​test_user_two​​​這個資料庫中的​​name2​​​欄位,移動到了​​year​​欄位之後。

七、mysql更改表的儲存引擎

儲存引擎是​​mysql​​​中的資料儲存在檔案或者記憶體中時採用的不用技術實現。可以根據自己所需,選擇不同的引擎,也可以為每一張表選擇不用的儲存引擎。可以使用​​show engines;​​語句來檢視系統支援的儲存引擎。

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

mysql>

更改表的儲存引擎的語法:

alter table <表名> engine=<更改後的儲存引擎名>

到此這篇關於mysql資料庫表增添欄位,刪除欄位,修改欄位的排列等操作的文章就介紹到這了,更多相關mysql欄位操作內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com