mysql 添加外键值_mysql添加外键时总是报错

展开全部

我观察到你的   emp  表的  username  列,  已经是   有  UNI   的  KEY 了

也就是那个  emp  表的  username  是唯一的了e68a8462616964757a686964616f31333332616463。

因此, 理论上

foreign key(username) references emp(username),

这个应该没有问题。

但是那个

foreign key (name) references emp (name)

由于   emp  表的  name  列,   是允许有重复行的。

因此你无法创建外键。

下面就是一个   失败的例子代码, 你可以参考一下-- 创建测试主表.  无主键.

CREATE TABLE test_main2 (

id      INT   NOT  NULL,

value   VARCHAR(10)

);

-- 创建测试子表.

CREATE TABLE test_sub2 (

id      INT   NOT  NULL,

main_id INT,

value   VARCHAR(10),

PRIMARY KEY(id)

);

-- 插入测试主表数据.

INSERT INTO test_main2(id, value) VALUES (1, 'ONE');

INSERT INTO test_main2(id, value) VALUES (2, 'TWO');

-- 插入测试子表数据.

INSERT INTO test_sub2(id, main_id, value) VALUES (1, 1, 'ONEONE');

INSERT INTO test_sub2(id, main_id, value) VALUES (2, 2, 'TWOTWO');

mysql> ALTER TABLE test_sub2

->    ADD CONSTRAINT main_id_cons2

->    FOREIGN KEY (main_id)

->    REFERENCES  test_main2(id);

ERROR 1005 (HY000): Can't create table 'test.#sql-608_1' (errno: 150)

默认情况下,无法创建外键

需要创建 unique 约束

mysql> ALTER TABLE test_main2

->   CHANGE COLUMN id id INT UNIQUE;

Query OK, 2 rows affected (0.17 sec)

Records: 2  Duplicates: 0  Warnings: 0

unique 约束创建完毕后,外键创建成功。

mysql> ALTER TABLE test_sub2

->    ADD CONSTRAINT main_id_cons2

->    FOREIGN KEY (main_id)

->    REFERENCES  test_main2(id);

Query OK, 2 rows affected (0.14 sec)

Records: 2  Duplicates: 0  Warnings: 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值