MySQL(三) —— 约束以及修改数据表
2016-04-24 15:20
656 查看
约束:
1. 约束保证数据的完整性和一致性;
2. 约束分为表级约束和列级约束;
3. 约束类型包括:NOT NULL, PRIMARY KEY, UNIQUE KEY, DEFAULT, FOREIGN KEY
外键约束
父表和子表必须使用相同的存储引擎,而且禁止使用临时表;
数据库的存储引擎只能为InnoDB;
外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同;
外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。
外键约束的参照操作
CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行;
SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL;
RESTRICT:拒绝对父表的删除或更新操作;
NO ACTION:标准的SQL关键字。
View Code
列级约束
对一个数据列建立的约束
列级约束可以在列定义时声明,也可以在列定义后声明;
NOT NULL, DEFAULT只存在列级约束;
表级约束
对多个数据列建立的约束;
表级约束只能在列定义后声明;
4. 修改数据表
添加单列
添加多列
删除一列
添加主键约束
删除主键约束
修改列定义和更改表名称
1. 约束保证数据的完整性和一致性;
2. 约束分为表级约束和列级约束;
3. 约束类型包括:NOT NULL, PRIMARY KEY, UNIQUE KEY, DEFAULT, FOREIGN KEY
外键约束
父表和子表必须使用相同的存储引擎,而且禁止使用临时表;
数据库的存储引擎只能为InnoDB;
外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同;
外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。
外键约束的参照操作
CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行;
SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL;
RESTRICT:拒绝对父表的删除或更新操作;
NO ACTION:标准的SQL关键字。
CREATE TABLE USERS ( id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREAMENT, username VARCHAR(10) NOT NULL, pid SMALLINT UNSIGNED, FOREIGN KEY(pid) REFERENCES provinces (id) ON DELETE CASCADE );
View Code
列级约束
对一个数据列建立的约束
列级约束可以在列定义时声明,也可以在列定义后声明;
NOT NULL, DEFAULT只存在列级约束;
表级约束
对多个数据列建立的约束;
表级约束只能在列定义后声明;
4. 修改数据表
添加单列
ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]
ALTER TABLE users ADD age SMALLINT UNSIGNED DEFAULT 10 AFTER username;
添加多列
ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition, ...)
删除一列
ALTER TABLE tbl_name DROP [COLUMN] col_name
添加主键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name, ...)
删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY;
//删除唯一约束 ALTER TABLE tbl_name DROP {INDEX | KEY} index_name //删除外键约束 ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol (通过SHOW CREATE TABLE tbl_name查看fk_symbol)
修改列定义和更改表名称
//修改列定义 ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name] //修改列名称 ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name] //修改数据表的名称 //法一: ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name //法二: RENAME TABLE tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2]...
相关文章推荐
- mysql中profile的使用
- MySQLdb模块中的常用方法
- MySQL数据库介绍及基本操作
- mysql 执行reset master 风险
- commandline (命令行)登录mysql
- mysql总结
- Mysql——分组排序加序列号
- [笔记]在Mac下进行mysql操作细节
- Mysql批量删除和修改某个前缀的表
- MySQL排错工具perror
- MySQL排错工具perror
- MySQL datetime数据类型设置当前时间为默认值
- HIVE+mysql环境搭建及简单应用
- mysql 时间
- 查看修改mysql编码方式
- mysql死锁,等待资源,事务锁,Lock wait timeout exceeded; try restarting transaction解决
- 绿色版mysql
- mysql处理海量数据时的一些优化查询速度方法
- MySQL已有column值为NULL,修改列属性为NOT NULL报1138错误
- MySQL常用函数