MySQL创建外键,及问题解决

今天被外键约束搞深刻了,弄了一个上午,终于找到原因,特此记录,以后便于查阅。

我的sql:
CREATE TABLE `report_` (
  `id_` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name_` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`id_`)
);

CREATE TABLE `report_user_` (
  `id_` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `report_id_` int(11) NOT NULL ,
  PRIMARY KEY (`id_`)
);

alter table report_user_ add constraint fk_rport_use foreign key (report_id_) 
references report_(id_) ON UPDATE CASCADE ON DELETE CASCADE;

如上便是我简化的sql语句,执行报错。
原因如下:  从表字段 ‘report_id_’ 类型为int(11),
需要关联的主表字段`id_`类型为int(11) unsigned    ,,
T.N..D,就是因为这个‘unsigned’导致类型不一致,unsigned指非负整数。

-------
总结:
  mysql创建外键要求比较严格,严格到有时候你找不到到底哪里错了。
  如果碰到ERROR 1005: Can’t create table ‘./test/testt1.frm’ (errno: 150)这个错误的时候。
       1.检查你的表是不是都是INNodb类型的,只有这种类型才可以创建外键。
       2.检查字段名是不是有错误。
       3.检查字段类型,最好一样。
       4.比较隐蔽,检查字符集,为了迁移和使用的方便,尽量使用UTF8
查看信息日志:
show innodb status;
或者:
show engine innodb status;
      其中有一项“LATEST FOREIGN KEY ERROR”显示了最近的一次外键约束出错的详细信息
------


你可能感兴趣的:(sql,mysql)