`

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”显示了最近的一次外键约束出错的详细信息
------


分享到:
评论

相关推荐

    Mysql表创建外键报错解决方案

    数据库表A: CREATE TABLE task_desc_tab ( id INT(11) PRIMARY KEY NOT NULL COMMENT '自增主键' AUTO_INCREMENT, <strong>taskname</strong> VARCHAR(200) NOT NULL COMMENT '任务名字', sqlname VARCHAR(20) ...

    解析在MySQL里创建外键时ERROR 1005的解决办法

    总之,解决MySQL创建外键时的ERROR 1005需要细致的错误分析和SQL语句审查。通过使用`SHOW ENGINE INNODB STATUS;`命令获取详细的错误信息,然后根据这些信息调整外键定义,通常可以成功创建外键并确保数据库结构的...

    mysql处理添加外键时提示error 150 问题的解决方法

    MySQL 处理添加外键时提示 Error 150 问题的解决方法 MySQL 中添加外键时,可能会遇到 Error 150 的问题,这个问题是 MySQL 本身的 bug,已经被报告到 MySQL 开发者列表中很多年了。然而,导致这个错误的原因却并...

    MySQL外键创建失败1005原因汇总

    8. **权限问题**:如果没有足够的权限来创建外键,也会遇到1005错误。确保当前用户有足够的权限(如`CREATE TABLESPACE`,`ALTER TABLE`等)来执行外键创建。 9. **表结构冲突**:可能已存在一个与新外键冲突的约束...

    MySQL无法创建外键的原因及解决方法

    MySQL无法创建外键的情况通常与数据表的字符集(Charset)和校对规则(Collate)设置不一致有关。在创建外键时,涉及到的两张表的字符集和校对规则需要保持一致,否则会导致外键约束无法正确建立。解决这个问题的...

    MySQL删除外键问题小结

    以下是对MySQL删除外键问题的详细分析和解决方案。 首先,错误`Error on rename of ... (errno: 152)`通常意味着在尝试更改表结构(如删除外键)时遇到了问题。这个错误不是由于MySQL的bug,而是因为操作的不当。在...

    解析MySQL创建外键关联错误 - errno:150

    在MySQL中,创建外键关联时遇到"errno:150"错误,通常是由于数据类型不匹配、缺少索引或不正确的约束设置等原因导致的。以下是对这些常见问题的详细解释: 1. **数据类型不匹配**:外键字段与主键字段的数据类型...

    MySQL外键详解

    - **创建外键时**: - 定义外键名时,不要使用引号包围外键名。 - **查看外键**: - 使用`SHOW CREATE TABLE table_name;`命令查看表结构,可以看到外键的定义。 - **删除外键**: - 如果定义了外键名,则可以...

    MySQL删除表的时候忽略外键约束的简单实现

    为了解决这个问题,我们可以利用MySQL中的一个系统变量`FOREIGN_KEY_CHECKS`来临时禁用外键约束检查。 首先,你可以通过以下SQL查询生成所有表的DROP语句,只需将`MyDatabaseName`替换为你的实际数据库名: ```sql...

    MySQL添加外键时报错:1215 Cannot add the foreign key constraint的解决方法

    这篇文章主要涉及到在数据创建表时,遇到ERROR 1215 (HY000): Cannot add foreign key constraint 问题方面的内容,对于在数据创建表时,遇到同样问题感兴趣的同学可以参考一下。 一、问题的提出 创建两个表:  ...

    mysql一个表有三个外键,其中该表的两个字段的应对的外键的表都是同一张表,解决如何将其查询出来

    需求是这样的,一个资源表有分类r_class_id(分类表id对应的外键) 创建者r_up_creator(用户表id对应的外键) 审核者r_ver_id (用户表id对应的外键),这时候该怎么将其都查询出来呢? 首先用左连接: select ...

    MySQL外键使用详解

    4. **创建外键的SQL语法**: ```sql CREATE TABLE child_table ( ... child_key_column datatype, FOREIGN KEY (child_key_column) REFERENCES parent_table(parent_key_column) ON DELETE {RESTRICT | ...

    MySQL常见错误及解决方案

    ### MySQL常见错误及解决方案 #### 问题1:使用MySQL CommandLine Client,出现闪一下然后窗口就消失的情况,如何解决? 在初次使用MySQL CommandLine Client时,可能会遇到一个常见的问题:客户端窗口短暂显示后...

    MYSQL建立外键失败几种情况记录Can't create table不能创建表

    在MySQL中创建外键时,可能会遇到“Can't create table”这样的错误,这通常是由于多种原因造成的。以下是一些常见的导致外键创建失败的原因及其解决方法: 1. 字段类型和大小不匹配:确保主键和外键字段的类型完全...

Global site tag (gtag.js) - Google Analytics