MySQL Key值(PRI, UNI, MUL)怎样设置?

MySQL Key值(PRI, UNI, MUL)怎样设置?,第1张

PRI primary key 表示主键,唯一写法: id bigint(20) unsigned primary key not null ,uni UNIQUE 表示唯一 写法 id bigint(20) unsigned UNIQUE default NULL mul 添加了索引 写法: alter table test add index suoyin (col_name1)如果有同时存在,显示顺序 PRI>UNI>MUL

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

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

因此, 理论上

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

4.4.7添加约束

语句格式:ALTER TABLE 表名ADD  CONSTRAINT  约束名 约束类型(字段名)

上面语句格式中,“表名”指定要添加约束的是哪个表,“ADD CONSTRAINT”表示要在表中增加约束,其后的“约束名”是拟增加约束的名字,“约束类型”是拟增加约束的类型,其后括号里的“字段名”是指约束是在哪一个字段上建立起来的。

下面截图中的“ALTER TABLE”语句在t_dept表中新增加了一个约束名为unidept的约束,它是在对字段deptno进行的唯一性约束。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8332706.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存