修改表結構ALTER TABLE常用方法


修改表結構

  修改表結構大致有如下基本語法

 
 1 -- 1. 修改表名
 2     ALTER TABLE 表名 
 3         RENAME 新表名;
 4         
 5 -- 2. 增加字段
 6     ALTER TABLE 表名
 7         ADD 字段名  數據類型 [完整性約束條件…],
 8         ADD 字段名  數據類型 [完整性約束條件…];
 9                                     
10 -- 3. 刪除字段
11     ALTER TABLE 表名 
12         DROP 字段名;
13         
14 -- 4. 修改字段
15     ALTER TABLE 表名 
16         MODIFY  字段名 數據類型 [完整性約束條件…];
17     ALTER TABLE 表名 
18         CHANGE 舊字段名 新字段名 舊數據類型 [完整性約束條件…];
19     ALTER TABLE 表名 
20         CHANGE 舊字段名 新字段名 新數據類型 [完整性約束條件…];
21         
22 -- 5.修改字段排列順序/在增加的時候指定字段位置
23     ALTER TABLE 表名
24         ADD 字段名  數據類型 [完整性約束條件…]  FIRST;
25     ALTER TABLE 表名
26         ADD 字段名  數據類型 [完整性約束條件…]  AFTER 字段名;
27     ALTER TABLE 表名
28         CHANGE 字段名  舊字段名 新字段名 新數據類型 [完整性約束條件…]  FIRST;
29     ALTER TABLE 表名
30         MODIFY 字段名  數據類型 [完整性約束條件…]  AFTER 字段名;
31                     
ALTER TABLE的語法

示例

 1.利用ALTER TABLE處理NULL和UNIQUE約束

 
 1 CREATE TABLE t(
 2     id INT UNIQUE, 
 3     name CHAR(10) NOT NULL
 4 );
 5 
 6 -- 去掉NULL約束
 7 ALTER TABLE t 
 8 MODIFY name CHAR(10) NULL;
 9 
10 -- 添加NULL約束
11 ALTER TABLE t 
12 MODIFY name CHAR(10) NOT NUll;
13     
14 -- 去掉UNIQUE約束
15 ALTER TABLE t 
16 DROP INDEX id;
17 
18 -- 添加UNIQUE約束
19 ALTER TABLE t 
20 MODIFY id INT UNIQUE;
利用ALTER TABLE處理NULL和UNIQUE約束

 2.利用ALTER TABLE處理主鍵

 
 1 CREATE TABLE t(
 2     id INT UNIQUE, 
 3     name CHAR(10) NOT NULL
 4 );
 5 
 6 -- 去掉NULL約束
 7 ALTER TABLE t 
 8 MODIFY name CHAR(10) NULL;
 9 
10 -- 添加NULL約束
11 ALTER TABLE t 
12 MODIFY name CHAR(10) NOT NUll;
13 
14 -- 去掉UNIQUE約束
15 ALTER TABLE t 
16 DROP INDEX id;
17 
18 -- 添加UNIQUE約束
19 ALTER TABLE t 
20 MODIFY id INT UNIQUE;
利用ALTER TABLE處理主鍵

 3.利用ALTER TABLE為表添加外鍵

 
 1 CREATE TABLE press(
 2     id INT(11) NOT NULL,
 3     name CHAR(10) DEFAULT NULL,
 4     PRIMARY KEY (id)
 5 );
 6 
 7 CREATE TABLE book(
 8     id INT(11) DEFAULT NULL,
 9     bk_name CHAR(12) DEFAULT NULL,
10     press_id INT(11) NOT NULL,
11 );
12 
13 -- 為book表添加外鍵
14 ALTER TABLE book 
15 ADD CONSTRAINT [foreign key name] FOREIGN KEY(press_id) REFERENCES press(id);
16 
17 -- 刪除外鍵
18 ALTER TABLE book 
19 DROP FOREIGN KEY [foreign key name];
20 
21 -- 注: [內容] 為可選填內容, 除保留字外, 符合語法規范均可
利用ALTER TABLE為表添加外鍵

其他示例

 1.表重命名

 
 1 DESC old_name;
 2 +-------+-----------------------+------+-----+---------+-------+
 3 | Field | Type                  | Null | Key | Default | Extra |
 4 +-------+-----------------------+------+-----+---------+-------+
 5 | id    | int(11)               | YES  |     | NULL    |       |
 6 | name  | varchar(50)           | YES  |     | NULL    |       |
 7 | age   | int(3)                | YES  |     | NULL    |       |
 8 | sex   | enum('male','female') | YES  |     | NULL    |       |
 9 | phone | bigint(11)            | YES  |     | NULL    |       |
10 | job   | varchar(11)           | YES  |     | NULL    |       |
11 +-------+-----------------------+------+-----+---------+-------+
12 rows in set (0.00 sec)
13 
14 -- 表重命名
15 ALTER TABLE old_name RENAME new_name;
16 Query OK, 0 rows affected (0.00 sec)
17 
18 DESC new_name;
19 +-------+-----------------------+------+-----+---------+-------+
20 | Field | Type                  | Null | Key | Default | Extra |
21 +-------+-----------------------+------+-----+---------+-------+
22 | id    | int(11)               | YES  |     | NULL    |       |
23 | name  | varchar(50)           | YES  |     | NULL    |       |
24 | age   | int(3)                | YES  |     | NULL    |       |
25 | sex   | enum('male','female') | YES  |     | NULL    |       |
26 | phone | bigint(11)            | YES  |     | NULL    |       |
27 | job   | varchar(11)           | YES  |     | NULL    |       |
28 +-------+-----------------------+------+-----+---------+-------+
29 rows in set (0.00 sec)
表重命名

 2.刪除或添加某列

 
 1 -- 刪除sex列
 2 ALTER TABLE staff DROP sex;
 3 Query OK, 0 rows affected (0.02 sec)
 4 Records: 0  Duplicates: 0  Warnings: 0
 5 
 6 DESC staff;
 7 +-------+-------------+------+-----+---------+-------+
 8 | Field | Type        | Null | Key | Default | Extra |
 9 +-------+-------------+------+-----+---------+-------+
10 | id    | int(11)     | YES  |     | NULL    |       |
11 | name  | varchar(50) | YES  |     | NULL    |       |
12 | age   | int(3)      | YES  |     | NULL    |       |
13 | phone | bigint(11)  | YES  |     | NULL    |       |
14 | job   | varchar(11) | YES  |     | NULL    |       |
15 +-------+-------------+------+-----+---------+-------+
16 rows in set (0.01 sec)
17 
18 -- 添加列
19 ALTER TABLE staff ADD sex ENUM('male','female');
20 Query OK, 0 rows affected (0.03 sec)
21 Records: 0  Duplicates: 0  Warnings: 0
刪除或添加某列

 3.修改字段屬性1

 
 1 -- 修改id的寬度
 2 ALTER TABLE staff MODIFY id INT(4);
 3 Query OK, 0 rows affected (0.02 sec)
 4 Records: 0  Duplicates: 0  Warnings: 0
 5 
 6 DESC staff;
 7 +-------+-----------------------+------+-----+---------+-------+
 8 | Field | Type                  | Null | Key | Default | Extra |
 9 +-------+-----------------------+------+-----+---------+-------+
10 | id    | int(4)                | YES  |     | NULL    |       |
11 | name  | varchar(50)           | YES  |     | NULL    |       |
12 | age   | int(3)                | YES  |     | NULL    |       |
13 | phone | bigint(11)            | YES  |     | NULL    |       |
14 | job   | varchar(11)           | YES  |     | NULL    |       |
15 | sex   | enum('male','female') | YES  |     | NULL    |       |
16 +-------+-----------------------+------+-----+---------+-------+
17 rows in set (0.01 sec)
修改字段屬性1

 4.修改字段屬性2

 
 1 -- 修改name列的字段名
 2 ALTER TABLE staff CHANGE name sname VARCHAR(20);
 3 Query OK, 4 rows affected (0.03 sec)
 4 Records: 4  Duplicates: 0  Warnings: 0
 5 
 6 DESC staff;
 7 +-------+-----------------------+------+-----+---------+-------+
 8 | Field | Type                  | Null | Key | Default | Extra |
 9 +-------+-----------------------+------+-----+---------+-------+
10 | id    | int(4)                | YES  |     | NULL    |       |
11 | sname | varchar(20)           | YES  |     | NULL    |       |
12 | age   | int(3)                | YES  |     | NULL    |       |
13 | phone | bigint(11)            | YES  |     | NULL    |       |
14 | job   | varchar(11)           | YES  |     | NULL    |       |
15 | sex   | enum('male','female') | YES  |     | NULL    |       |
16 +-------+-----------------------+------+-----+---------+-------+
17 rows in set (0.00 sec)
修改字段屬性2

 5.修改字段屬性3

 
 1 -- 修改sex列的位置
 2 ALTER TABLE staff MODIFY sex ENUM('male','female') AFTER sname;
 3 Query OK, 0 rows affected (0.02 sec)
 4 Records: 0  Duplicates: 0  Warnings: 0
 5 
 6 DESC staff;
 7 +-------+-----------------------+------+-----+---------+-------+
 8 | Field | Type                  | Null | Key | Default | Extra |
 9 +-------+-----------------------+------+-----+---------+-------+
10 | id    | int(4)                | YES  |     | NULL    |       |
11 | sname | varchar(20)           | YES  |     | NULL    |       |
12 | sex   | enum('male','female') | YES  |     | NULL    |       |
13 | age   | int(3)                | YES  |     | NULL    |       |
14 | phone | bigint(11)            | YES  |     | NULL    |       |
15 | job   | varchar(11)           | YES  |     | NULL    |       |
16 +-------+-----------------------+------+-----+---------+-------+
17 rows in set (0.00 sec)
修改字段屬性3

 6.創建自增id主鍵

 
 1 -- 創建自增id主鍵
 2 ALTER TABLE staff MODIFY id INT(4) PRIMARY KEY AUTO_INCREMENT;
 3 Query OK, 4 rows affected (0.02 sec)
 4 Records: 4  Duplicates: 0  Warnings: 0
 5 
 6 DESC staff;
 7 +-------+-----------------------+------+-----+---------+----------------+
 8 | Field | Type                  | Null | Key | Default | Extra          |
 9 +-------+-----------------------+------+-----+---------+----------------+
10 | id    | int(4)                | NO   | PRI | NULL    | auto_increment |
11 | sname | varchar(20)           | YES  |     | NULL    |                |
12 | sex   | enum('male','female') | YES  |     | NULL    |                |
13 | age   | int(3)                | YES  |     | NULL    |                |
14 | phone | bigint(11)            | YES  |     | NULL    |                |
15 | job   | varchar(11)           | YES  |     | NULL    |                |
16 +-------+-----------------------+------+-----+---------+----------------+
17 rows in set (0.00 sec)
創建自增id主鍵

 7.刪除主鍵

 
 1 -- 刪除主鍵,可以看到刪除一個自增主鍵會報錯
 2 ALTER TABLE staff DROP PRIMARY KEY;
 3 ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
 4 
 5 -- 需要先去掉主鍵的自增約束,然后再刪除主鍵約束
 6 ALTER TABLE staff MODIFY id INT(11);
 7 Query OK, 4 rows affected (0.02 sec)
 8 Records: 4  Duplicates: 0  Warnings: 0
 9 
10 DESC staff;
11 +-------+-----------------------+------+-----+---------+-------+
12 | Field | Type                  | Null | Key | Default | Extra |
13 +-------+-----------------------+------+-----+---------+-------+
14 | id    | int(11)               | NO   | PRI | 0       |       |
15 | sname | varchar(20)           | YES  |     | NULL    |       |
16 | sex   | enum('male','female') | YES  |     | NULL    |       |
17 | age   | int(3)                | YES  |     | NULL    |       |
18 | phone | bigint(11)            | YES  |     | NULL    |       |
19 | job   | varchar(11)           | YES  |     | NULL    |       |
20 +-------+-----------------------+------+-----+---------+-------+
21 rows in set (0.01 sec)
22 
23 ALTER TABLE staff DROP PRIMARY KEY;
24 Query OK, 4 rows affected (0.06 sec)
25 Records: 4  Duplicates: 0  Warnings: 0
刪除主鍵

 其他有關主鍵操作

 
 1 -- 添加聯合主鍵
 2 ALTER TABLE staff ADD PRIMARY KEY(sname, age);
 3 Query OK, 0 rows affected (0.02 sec)
 4 Records: 0  Duplicates: 0  Warnings: 0
 5 
 6 -- 刪除主鍵
 7 ALTER TABLE staff DROP PRIMARY KEY;
 8 Query OK, 4 rows affected (0.02 sec)
 9 Records: 4  Duplicates: 0  Warnings: 0
10 
11 -- 設置id為主鍵
12 ALTER TABLE staff ADD PRIMARY KEY(id);
13 Query OK, 0 rows affected (0.02 sec)
14 Records: 0  Duplicates: 0  Warnings: 0
15 
16 DESC staff;
17 +-------+-----------------------+------+-----+---------+-------+
18 | Field | Type                  | Null | Key | Default | Extra |
19 +-------+-----------------------+------+-----+---------+-------+
20 | id    | int(11)               | NO   | PRI | 0       |       |
21 | sname | varchar(20)           | NO   |     |         |       |
22 | sex   | enum('male','female') | YES  |     | NULL    |       |
23 | age   | int(3)                | NO   |     | 0       |       |
24 | phone | bigint(11)            | YES  |     | NULL    |       |
25 | job   | varchar(11)           | YES  |     | NULL    |       |
26 +-------+-----------------------+------+-----+---------+-------+
27 rows in set (0.00 sec)
28 
29 -- 為主鍵添加自增屬性
30 ALTER TABLE staff MODIFY id INT(4) AUTO_INCREMENT;
31 Query OK, 4 rows affected (0.02 sec)
32 Records: 4  Duplicates: 0  Warnings: 0
33 
34 DESC staff;
35 +-------+-----------------------+------+-----+---------+----------------+
36 | Field | Type                  | Null | Key | Default | Extra          |
37 +-------+-----------------------+------+-----+---------+----------------+
38 | id    | int(4)                | NO   | PRI | NULL    | auto_increment |
39 | sname | varchar(20)           | NO   |     |         |                |
40 | sex   | enum('male','female') | YES  |     | NULL    |                |
41 | age   | int(3)                | NO   |     | 0       |                |
42 | phone | bigint(11)            | YES  |     | NULL    |                |
43 | job   | varchar(11)           | YES  |     | NULL    |                |
44 +-------+-----------------------+------+-----+---------+----------------+
45 rows in set (0.00 sec)
其他有關主鍵操作

 

以上


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM