zoukankan      html  css  js  c++  java
  • [MySQL]表创建外键失败:ERROR 1005 (HY000): Can't create table (errno: 150)

      在数据库中建立一个新表(表引擎为InnoDB)时, 需要用到外键, 所以就在建表的时候加了一句foreign key (column) references table_name但是执行时出现

        ERROR 1005 (HY000): Can't create table   (errno: 150) 

      通过查找得知, 这是由于添加外键约束引起的错误, 利用show engine innodb status指令查看数据库的状态信息, 查看最近外键信息部分 

           ------------------------
        LATEST FOREIGN KEY ERROR
        ------------------------
        131008 11:28:15 Error in foreign key constraint of table www/shares:
        foreign key(user_id) references profile):
        Syntax error close to:
        )
        ------------

      查询mysql参考手册http://dev.mysql.com/doc/refman/5.1/zh/tutorial.html#example-foreign-keys, 发现还可以通过在属性后面需要添加外键约束

      preferences  table(column)

      eg: user_id varchar(12) not null references profile(user_id),

       用此方法添加外键约束时, 虽然不会再提示语法错误,成功建立表, 但是按照这种方式使用, references子句不会显示在show create tabledescribe的输出中, 该子句没有实际的效果,只作为  备忘录或注释来提醒,你目前正定义的列指向另一个表中的一个列

      innodb表外键的建立, 详情请看http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#innodb-foreign-key-constraints

      两个表建立外键, 一定要使得两个表的除了属性不一样以外, 其他所有的东西都要一样。

      尝试了仨小时, 我最终才发现,  我之所以无法建立外键约束, 是因为profile在最初建立时在建表的语句后面加了一句default charset=utf8, 使得profile表里所有类型是字符的, 编码都是utf8, 当  我新建表时, 没有再设置default charset, 所以致使两个表在字符编码上存在很大的区别, 从而无法建立外键约束。

      如果你也无法建立外键约束, 而有找不出错误, 那就尝试一下, 将两个表删掉,以相同的方式重新建立两个新的表。

  • 相关阅读:
    关于返回上一页功能
    Mybatis Update statement Date null
    SQLite reset password
    Bootstrap Validator使用特性,动态(Dynamic)添加的input的验证问题
    Eclipse使用Maven2的一次环境清理记录
    Server Tomcat v7.0 Server at localhost failed to start
    PowerShell一例
    Server Tomcat v7.0 Server at libra failed to start
    商标注册英语
    A glance for agile method
  • 原文地址:https://www.cnblogs.com/KarryWang/p/3356860.html
Copyright © 2011-2022 走看看