此学习笔记根据慕课网课程“与MYSQL的零距离接触”学习总结
3.约束以及修改数据表
☞3-1 外键约束的要求解析
外键约束:保证数据一致性、完整性,实现一对一或一对多关系。
FOREIGN KEY (外键列名称) REFERENCES 父表(参照列名称);
外键约束的要求:
- 父表和子表必须使用相同的存储引擎,而且禁止使用临时表
- 数据表的存储引擎只能为InnoDB。
- 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
- 外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。
显示索引:SHOW INDEXES FROM 表名;
或者:SHOW INDEXES FROM 表名\G;(以网格的形式来呈现)
删除索引:ALEER TABLE tbl_name DROP INDEX 索引名称;
☞3-2 外键约束的参照操作
1.CASCADE 从父表删除或更新且自动删除或更新子表中匹配的行
2.SET NULL
从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子列表没有指定NOT NULL
3.RESTRICT 拒绝对父表的删除或更新操作
4.NO ACTION 标准SQL的关键字,在MySQL中与RESTRICT相同。
语法结构:FOREIGN KEY (外键列名称) REFERENCES 父表(参照列名称) ON DELETE CASCADE;
mysql> CREATE TABLE users1(
-> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> username VARCHAR(10) NOT NULL,
-> pid SMALLINT UNSIGNED,
-> FOREIGN KEY (pid) REFERENCES provinces (id) ON DELETE CASCADE
-> );
Query OK, 0 rows affected (0.53 sec)
☞3-3 表级约束与列级约束
对一个数据列建立的约束,称为列级约束。
对多个数据列建立的约束,称为表级约束。
列级约束既可以在列定义时声明,也可以在定义后声明。
表级约束只能在列定义后声明。
☞3-4 添加/删除列
添加单列:
ALTER TABLE tbl_name ADD col_name column_definition FIRST | AFTER col_name;
ALTER TABLE 表名称 ADD 列名称 列定义 FIRST | AFTER 列名称;
FIRST将新添加的这一列置于所有列最前面
AFTER col_name 将新添加的列置于你指定列的后方
如果省略FIRST | AFTER col_name,则置于所有列之后
添加多列:
ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition,
……
);
添加多列时不能指定位置关系,只能在原来数据列的下方。
删除单列:
ALTER TABLE tbl_name DROP col_name;
删除多列:
ALTER TABLE tbl_name DROP col_name1,DROP col_name2;
☞3-5 添加/删除约束 (注:col_name:列名称)
添加/删除主键约束:
ALTER TABLE tbl_name ADD PRIMARY KEY (col_name);
ALTER TABLE tbl_name DROP PRIMARY KEY;
添加/删除唯一约束:
ALTER TABLE tbl_name ADD UNIQUE (col_name);
ALEER TABLE tbl_name DROP INDEX 索引名称; (也可以用于删除其他索引)
添加/删除外键约束:
ALTER TABLE tbl_name ADD FOREIGN KEY (外键列名称) REFERENCES 父表(参照列名称);
ALTER TABLE tbl_name DROP FOREIGN KEY 约束名称; (外键约束名称通过SHOW CREATE TABLE tbl_name 查看)
例如:| users2 | CREATE TABLE `users2` (
`username` varchar(10) NOT NULL,
`pid` smallint(5) unsigned DEFAULT NULL,
`id` smallint(5) unsigned NOT NULL,
`age` tinyint(3) unsigned NOT NULL,
KEY `pid` (`pid`),
CONSTRAINT `users2_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `provinces` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
mysql> ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1;
添加/删除默认约束:
ALTER TABLE tbl_name ALTER col_name SET DEFAULT 默认值;
ALTER TABLE tbl_name ALTER col_name DROP DEFAULT;
☞3-6 修改列定义和更名数据表
修改列定义:
ALTER TABLE tbl_name MODIFY col_name column_definition FIEST | AFTER col_name;
ALTER TABLE 表名称 MODIFY列名称 列定义 FIRST | AFTER 列名称;
修改列名称:(除了修改列定义还可以修改列名称)
ALTER TABLE tbl_name CHANGE old_col_name new_col_name column_definition FIRST | AFTER col_name;
ALTER TABLE tbl_name CHANGE 旧的列名称 新的类名称 列定义 FIRST | AFTER col_name;
数据表更名:
方法1:
ALTER TABLE tbl_name RENAME new_tbl_name;
方法2:
RENAME TABLE tbl_name TO new_tbl_name;
☞总结
约束:
按功能划为 | NOT NULL(非空约束) |
PRIMARY KEY(主键约束) | |
UNIQUE KEY(唯一约束) | |
DEFAULT(默认约束) | |
FOREIGN KEY(外键约束) |
按数据列的数目划为 | 表级约束 |
列级约束 |
修改数据表:
针对字段的操作:添加/删除字段、修改列定义、修改列名称等
针对约束的操作:添加/删除各种约束
针对数据表的操作:数据表更名(两种方式)
未完待续。。。