三、修改数据表
修改表名
语法:
ALTER TABLE <旧表名> RENAME [TO] <新表名>;
例:
查看所有表,修改test1表改名为file1。
1. mysql> show tables; 2. +---------------+ 3. | Tables_in_bbs | 4. +---------------+ 5. | test1 | 6. +---------------+ 7. 1 row in set (0.01 sec) 8. 9. mysql> alter table test1 rename file1; 10. Query OK, 0 rows affected (0.03 sec) 11. 12. mysql> show tables; 13. +---------------+ 14. | Tables_in_bbs | 15. +---------------+ 16. | file1 | 17. +---------------+ 18. 1 row in set (0.00 sec)
修改字段数据类型
语法:
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
例:
查看file1表结构,修改name列数据类型为varchar(50)。
1. mysql> desc file1; 2. +--------+-------------+------+-----+---------+-------+ 3. | Field | Type | Null | Key | Default | Extra | 4. +--------+-------------+------+-----+---------+-------+ 5. | id | int(11) | NO | PRI | NULL | | 6. | name | varchar(20) | NO | | NULL | | 7. | deptid | int(11) | YES | | NULL | | 8. | salary | float | YES | | NULL | | 9. +--------+-------------+------+-----+---------+-------+ 10. 4 rows in set (0.09 sec) 11. 12. mysql> alter table file1 modify name varchar(50); 13. Query OK, 0 rows affected (0.04 sec) 14. Records: 0 Duplicates: 0 Warnings: 0 15. 16. mysql> desc file1; 17. +--------+-------------+------+-----+---------+-------+ 18. | Field | Type | Null | Key | Default | Extra | 19. +--------+-------------+------+-----+---------+-------+ 20. | id | int(11) | NO | PRI | NULL | | 21. | name | varchar(50) | YES | | NULL | | 22. | deptid | int(11) | YES | | NULL | | 23. | salary | float | YES | | NULL | | 24. +--------+-------------+------+-----+---------+-------+ 25. 4 rows in set (0.00 sec)
修改字段名
语法:
ALTER TABLE <表名> CHANGE<旧字段名><新字段名> <新数据类型>
例:
修改file1表name列名为new_name,数据类型为varchar(20);
1. mysql> alter table file1 change name new_name varchar(20); 2. Query OK, 0 rows affected (0.04 sec) 3. Records: 0 Duplicates: 0 Warnings: 0 4. 5. mysql> desc file1; 6. +----------+-------------+------+-----+---------+-------+ 7. | Field | Type | Null | Key | Default | Extra | 8. +----------+-------------+------+-----+---------+-------+ 9. | id | int(11) | NO | PRI | NULL | | 10. | new_name | varchar(20) | YES | | NULL | | 11. | deptid | int(11) | YES | | NULL | | 12. | salary | float | YES | | NULL | | 13. +----------+-------------+------+-----+---------+-------+ 14. 4 rows in set (0.00 sec)
添加字段
语法:
ALTER TABLE <表名> ADD <新字段名><数据类型> [约束条件] [FIRST|AFTER 已存在字段名]
例:
在file1表末尾添加location列。
1. mysql> desc file1; 2. +----------+-------------+------+-----+---------+-------+ 3. | Field | Type | Null | Key | Default | Extra | 4. +----------+-------------+------+-----+---------+-------+ 5. | id | int(11) | NO | PRI | NULL | | 6. | new_name | varchar(20) | YES | | NULL | | 7. | deptid | int(11) | YES | | NULL | | 8. | salary | float | YES | | NULL | | 9. +----------+-------------+------+-----+---------+-------+ 10. 4 rows in set (0.00 sec) 11. 12. mysql> alter table file1 add location varchar(50); 13. Query OK, 0 rows affected (0.02 sec) 14. Records: 0 Duplicates: 0 Warnings: 0 15. 16. mysql> desc file1; 17. +----------+-------------+------+-----+---------+-------+ 18. | Field | Type | Null | Key | Default | Extra | 19. +----------+-------------+------+-----+---------+-------+ 20. | id | int(11) | NO | PRI | NULL | | 21. | new_name | varchar(20) | YES | | NULL | | 22. | deptid | int(11) | YES | | NULL | | 23. | salary | float | YES | | NULL | | 24. | location | varchar(50) | YES | | NULL | | 25. +----------+-------------+------+-----+---------+-------+ 26. 5 rows in set (0.00 sec)
在file1表首行添加mail列。
1. mysql> alter table file1 add mail float first; 2. Query OK, 0 rows affected (0.01 sec) 3. Records: 0 Duplicates: 0 Warnings: 0 4. 5. mysql> desc file1; 6. +----------+-------------+------+-----+---------+-------+ 7. | Field | Type | Null | Key | Default | Extra | 8. +----------+-------------+------+-----+---------+-------+ 9. | mail | float | YES | | NULL | | 10. | id | int(11) | NO | PRI | NULL | | 11. | new_name | varchar(20) | YES | | NULL | | 12. | deptid | int(11) | YES | | NULL | | 13. | salary | float | YES | | NULL | | 14. | location | varchar(50) | YES | | NULL | | 15. | email | float | YES | | NULL | | 16. +----------+-------------+------+-----+---------+-------+ 17. 7 rows in set (0.00 sec)
删除字段
语法:
ALTER TABLE <表名> DROP <字段名>
例:
1. mysql> alter table file1 drop mail; 2. Query OK, 0 rows affected (0.02 sec) 3. Records: 0 Duplicates: 0 Warnings: 0 4. 5. mysql> desc file1; 6. +----------+-------------+------+-----+---------+-------+ 7. | Field | Type | Null | Key | Default | Extra | 8. +----------+-------------+------+-----+---------+-------+ 9. | id | int(11) | NO | PRI | NULL | | 10. | new_name | varchar(20) | YES | | NULL | | 11. | deptid | int(11) | YES | | NULL | | 12. | salary | float | YES | | NULL | | 13. | location | varchar(50) | YES | | NULL | | 14. +----------+-------------+------+-----+---------+-------+ 15. 5 rows in set (0.00 sec)
修改排列位置
语法:
ALTER TABLE <表名> MODIFY <字段名> <数据类型> FIRST | AFTER <字段2>
例:
修改location列到首行。
1. mysql> alter table file1 modify location varchar(50) first; 2. Query OK, 0 rows affected (0.01 sec) 3. Records: 0 Duplicates: 0 Warnings: 0 4. 5. mysql> desc file1; 6. +----------+-------------+------+-----+---------+-------+ 7. | Field | Type | Null | Key | Default | Extra | 8. +----------+-------------+------+-----+---------+-------+ 9. | location | varchar(50) | YES | | NULL | | 10. | id | int(11) | NO | PRI | NULL | | 11. | new_name | varchar(20) | YES | | NULL | | 12. | deptid | int(11) | YES | | NULL | | 13. | salary | float | YES | | NULL | | 14. +----------+-------------+------+-----+---------+-------+ 15. 5 rows in set (0.00 sec)
修改location列到new_name列下。
1. mysql> alter table file1 modify location varchar(20) after new_name; 2. Query OK, 0 rows affected (0.03 sec) 3. Records: 0 Duplicates: 0 Warnings: 0 4. 5. mysql> desc file1; 6. +----------+-------------+------+-----+---------+-------+ 7. | Field | Type | Null | Key | Default | Extra | 8. +----------+-------------+------+-----+---------+-------+ 9. | id | int(11) | NO | PRI | NULL | | 10. | new_name | varchar(20) | YES | | NULL | | 11. | location | varchar(20) | YES | | NULL | | 12. | deptid | int(11) | YES | | NULL | | 13. | salary | float | YES | | NULL | | 14. +----------+-------------+------+-----+---------+-------+ 15. 5 rows in set (0.00 sec)
修改存储引擎
语法:
ALTER TABLE <表名> ENGINE=<更改后的存储引擎>
例:
查看表结构,引擎为ENGINE=InnoDB,修改表引擎后为ENGINE=MyISAM。
1. mysql> show create table file1; 2. #省略部分内容 3. | file1 | CREATE TABLE `file1` ( 4. `id` int(11) NOT NULL, 5. `new_name` varchar(20) DEFAULT NULL, 6. `location` varchar(20) DEFAULT NULL, 7. `deptid` int(11) DEFAULT NULL, 8. `salary` float DEFAULT NULL, 9. PRIMARY KEY (`id`) 10. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 11. #省略部分内容 12. 1 row in set (0.01 sec) 13. mysql> alter table file1 engine=myisam; 14. Query OK, 0 rows affected (0.02 sec) 15. Records: 0 Duplicates: 0 Warnings: 0 16. 17. mysql> show create table file1; 18. #省略部分内容 19. | file1 | CREATE TABLE `file1` ( 20. `id` int(11) NOT NULL, 21. `new_name` varchar(20) DEFAULT NULL, 22. `location` varchar(20) DEFAULT NULL, 23. `deptid` int(11) DEFAULT NULL, 24. `salary` float DEFAULT NULL, 25. PRIMARY KEY (`id`) 26. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 | 27. #省略部分内容 28. 1 row in set (0.01 sec) 29. ###如无其他需求则改回innodb,才可以进行下面的操作 30. mysql> alter table file1 engine innodb; 31. Query OK, 0 rows affected (0.02 sec) 32. Records: 0 Duplicates: 0 Warnings: 0
删除表外键约束
语法:
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>
例:
没有外键需要先创建,如果修改过储存引擎需要修改回”innodb“才可以创建外键。查看file2表结构,表明file2表中的deptid列外键约束于file1表中的id列;删除操作后,查看到没有外键约束了。
1. mysql> create table file2( 2. -> id int primary key, 3. -> name varchar(20), 4. -> deptid int, 5. -> constraint file_key foreign key (deptid) references file1(id)); 6. Query OK, 0 rows affected (0.01 sec) 7. mysql> show create table file2; 8. #省略部分内容 9. | file2 | CREATE TABLE `file2` ( 10. `id` int(11) NOT NULL, 11. `name` varchar(20) DEFAULT NULL, 12. `deptid` int(11) DEFAULT NULL, 13. PRIMARY KEY (`id`), 14. KEY `file_key` (`deptid`), 15. CONSTRAINT `file_key` FOREIGN KEY (`deptid`) REFERENCES `file1` (`id`) 16. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 17. #省略部分内容 18. 1 row in set (0.02 sec) 19. mysql> alter table file2 drop foreign key file_key; 20. Query OK, 0 rows affected (0.02 sec) 21. Records: 0 Duplicates: 0 Warnings: 0 22. 23. mysql> show create table file2; 24. #省略部分内容 25. | file2 | CREATE TABLE `file2` ( 26. `id` int(11) NOT NULL, 27. `name` varchar(20) DEFAULT NULL, 28. `deptid` int(11) DEFAULT NULL, 29. PRIMARY KEY (`id`), 30. KEY `file_key` (`deptid`) 31. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 32. #省略部分内容 33. 1 row in set (0.00 sec)
删除唯一约束
alter table 表名 drop index 约束名称;
或
drop index 约束名称 on 表名;
四、删除数据表
删除没有被关联的表
语法:
DROP TABLE [IF EXISTS]表1,表2...
例:
参考上面命令创建test1表、test2表,查看所有表并删除test1表、test2表。
1. mysql> show tables; 2. +---------------+ 3. | Tables_in_bbs | 4. +---------------+ 5. | file1 | 6. | file2 | 7. | test1 | 8. | test2 | 9. +---------------+ 10. 4 rows in set (0.00 sec) 11. mysql> drop table if exists test1,test2; 12. Query OK, 0 rows affected (0.02 sec) 13. 14. mysql> show tables; 15. +---------------+ 16. | Tables_in_bbs | 17. +---------------+ 18. | file1 | 19. | file2 | 20. +---------------+ 21. 2 rows in set (0.01 sec)
删除被关联的主表
还是创建两个test表,test2表的deptid列指定test1表的id列。
1. mysql> create table test1( 2. -> id int primary key, 3. -> name varchar(20), 4. -> location varchar(50)); 5. Query OK, 0 rows affected (0.01 sec) 6. 7. mysql> create table test2( 8. -> id int primary key, 9. -> name varchar(20), 10. -> deptid int, 11. -> salary float, 12. -> constraint test_key foreign key(deptid) references test1(id)); 13. Query OK, 0 rows affected (0.01 sec)
这时候删除主表test1发现删除失败。
1. mysql> drop table test1; 2. ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
此时需要先解除子表test2的约束,然后删除主表test1就可以删除了。
1. mysql> alter table test2 drop foreign key test_key; 2. Query OK, 0 rows affected (0.00 sec) 3. Records: 0 Duplicates: 0 Warnings: 0 4. 5. mysql> drop table test1; 6. Query OK, 0 rows affected (0.00 sec)
总结
#创建表
create table 表名(字段名1 字段类型1 [约束条件1],字段名2 字段类型2 [约束条件2]);
约束条件 |
|
主键约束 |
PRIMARY KEY |
外键约束 |
CONSTRAINT [外键名] FOREIGN KEY [字段名] REFERENCES [主表名] 主键列1 |
非空约束 |
NOT NULL |
唯一约束 |
[CONSTRATIN <约束名>] UNIQUE (<字段名>) |
默认约束 |
DEFAULT 默认值 |
自动增加值 |
AUTO_INCREMENT |
#表结构
查看表结构 |
|
基本结构 |
DESCRIBE 表名; |
基本结构 |
DESC 表名; |
详细结构 |
SHOW CREATE TABLE 表名; |
#修改表
ALTER TABLE <旧表名> RENAME [TO] <新表名>;
修改数据表 |
|
修改表名 |
RENAME [TO] |
修改字段数据类型 |
MODIFY |
修改字段名 |
CHANGE |
添加字段 |
ADD [FIRST|AFTER 已存在字段名] |
删除字段 |
DROP |
修改排列位置 |
MODIFY |
修改存储引擎 |
ENGINE |
删除表外键约束 |
DROP FOREIGN KEY |