MySQL表的约束及外键的添加

添加表约束

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 约束名;
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值