MySQL表的约束及外键的添加

来源:互联网 发布:网络用语ps是什么意思 编辑:程序博客网 时间:2024/05/29 13:31

添加表约束

addconstraint  约束名  约束类型与条件,constraint  约束名 约束类型与条件;

添加表外键约束

在MySQL中,InnoDB表支持外键约束的检查。在连接两个表的时候并不需要外键约束。
查看系统支持的存储引擎

show engines;

查看表使用的存储引擎:

show table status from db_name where name='table_name';#orshow create table table_name;

修改表存储引擎:

alter table table_name engine=innodb;

不支持InnoDB,可以将相应列设置为外键:

create table shirt(owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),...,);

上述语句并没有实际外键作用,如更新数据不符合外键只给出提醒。
此时,用SHOW CREATE TABLE 或 DESCRIBE 均看不到REFERENCES子句。

对于InnoDB表,则能添加外键约束:

alter table shirt add constraint sht_fk foreign key(owner) REFERENCES person(id);#给表shirt的owner列添加外键约束,指向表person的id列


遇到错误 Cannot add or update a child row:a foreign key constraint fails

原因:
设置的外键和对应的另一个表的主键值不匹配。
解决方法:
找出不匹配的值修改,或清空表数据再执行。

添加外键约束成功后,更新数据不符合约束则会报错。
用查看建表语句可看到约束:

show create table table_name; 

或使用数据库自带的信息数据库查看约束:

use information_schema;select * from KEY_COLUMN_USAGE;#每个表字段信息select * from TABLE_CONSTRAINTS;#所有约束信息

删除表约束

alter table TableNamedrop constraint 约束名,constraint 约束名;