添加表约束
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列
原因:
设置的外键和对应的另一个表的主键值不匹配。
解决方法:
找出不匹配的值修改,或清空表数据再执行。
添加外键约束成功后,更新数据不符合约束则会报错。
show create table table_name;
或使用数据库自带的信息数据库查看约束:
use information_schema;
select * from KEY_COLUMN_USAGE; #每个表字段信息
select * from TABLE_CONSTRAINTS; #所有约束信息
删除表约束
alter table TableName
drop
constraint 约束名,
constraint 约束名;