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, 所以致使两个表在字符编码上存在很大的区别, 从而无法建立外键约束。

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

  • 相关阅读:
    c-指针
    iOS 多线程
    iOS 必备技术点
    网络请求
    objective-c基础教程——学习小结
    id类型
    排序算法
    iOS网络
    iOS 绘图
    Python——字符串2.0(实验)(python programming)
  • 原文地址:https://www.cnblogs.com/KarryWang/p/3356860.html
Copyright © 2011-2022 走看看