约束,修改表结构,添加删除约束

一、约束概述
1、约束保证数据的【完整性和一致性】
2、约束分为表级约束(针对多列)和列级约束(针对一列)
3、按功能分类包括:
· NOT NULL非空约束
· PRIMARY KEY主键约束
· UNIQUE KEY唯一约束
· DEFAULT默认约束
· FOREIGN KEY外键约束
二、FOREIGN KEY

0    保证数据一致性,和完整性。
1、参照表为子表,被参照表为父表
2、【语法】子表中单起一列:FOREIGN KEY 子表(外键列) REFERENCES 父表(参照列)
2、实现一对一或一对多关系
3、要求如图:
· 表:相同引擎InnoDB,不能临时表
· 列:【相同数据类型】,数字等长\同符号,字符长度可不同
· 列:必须创建索引,系统自动为外键列创建



 

 

 

 

子表中的外键会参照父表中的主键,新系统会自动创建索引。

外键约束参数操作
一、删除或更新父表数据,控制参数
1、语法:FOREIGN KEY 子表(外键列)REFERENCES 父表(参考列)【ON DELETE】 参数
2、参数
当父表删除和更新操作时:
· CASCADE:子表也删除和更新
· SET NULL:子表设置为NULL,但子表外键列不能设置为NOT NULL(矛盾)
· RESTRICT:拒绝对父表的删除或者更新操作。
· NO ACTION:标准SQL关键字,MYSQL中与RESTRICT相同

更新父表时候子表要进行的操作

表级约束与列级约束
1、对一个列创建的约束为列级约束
2、对多个列创建的约束为表级约束
3、列级约束既可以在列定义时声明,也可以在列定义后声明
4、表级约束只能在列定义后声明
5、并不是所有的约束都有表级约束,如NOT NULL、DEFAULT…



 

(三)约束以及修改数据表——修改列
1、添加单列:ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]。若不添加具体位置,则默认添加到最后。
2、添加多列:ALTER TABLE tbl_name ADD [COLUMN] (col_name1 column_definition1,...)只能添加到末尾
3、删除列:ALTER TABLE tbl_name DROP [COLUMN] col_name1,...
4、多个操作:ALTER TABLE tbl_name DROP col_name1,ADD col_name2...

 

 

 

 约束以及修改数据表——修改约束
1、添加主键约束:
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] PRIMARY KEY[index_type] (col_name);
2、添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] UNIQUE KEY[index_type] (col_name1,col_name2...);
3、添加爱外键约束
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] FOREIGN KEY [index_type](外键列) REFERENCES 父类(参考列);
4、添加/删除默认DEFAULT约束
ALTER TABLE tbl_name ALTER col_name SET DEFAULT literal / DROP DEFAULT;



 constraint 是给起一个名字



 

 添加和删除默认约束

约束以及修改数据表——删除约束
1、删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY;
2、删除唯一约束
ALTER TABLE tbl_name DROP {INDEX|KEY} index_name(引索通过SHOW INDEXES tbl_name查看);
3、删除外键约束
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol(约束名字:通过SHOW CREATE TABLE tbl_name查看);

删除主键约束

 

 删除唯一约束,唯一约束有名字,可以从表结构中查看

 删除外键约束

约束以及修改数据表——修改列定义和名称
***不要随意更改列名和表名:引用问题 
1、修改列定义 (位置)
ALTER TABLE tbl_name 【MODIFY】 [COLUMN] col_name colum_definition [FIRST | AFTER col_name]
2、修改列名称(属性位置)CHANGE > MODIFY
ALTER TABLE tbl_name 【CHANGE】 [COLUMN] old_col_name new_col_name column_definition [FIRST | AFTER col_name]
3、数据表更名
· 方法1:ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
· 方法2:RENAME TABLE tbl_name TO new_tbl_name[,tbl_name2 TO new_tbl_name2...]



 

 

 

 

猜你喜欢

转载自gaomysion.iteye.com/blog/2175526