MySQL表的约束及外键的添加

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/brahmsjiang/article/details/78872500

添加表约束

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

添加表外键约束

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

show engines;

查看表使用的存储引擎:

show table status from db_name where name='table_name';
#or
show 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 TableName
drop 
constraint 约束名,
constraint 约束名;
展开阅读全文

没有更多推荐了,返回首页