MySQL UNIQUE声明

时间:2019-02-04 15:30:18

标签: mysql

这两个声明有什么区别?

CREATE TABLE `t1` (`col1` INT, `col2` INT, UNIQUE(`col1`,`col2`));

CREATE TABLE `t2` (`col1` INT UNIQUE, `col2` INT UNIQUE);

2 个答案:

答案 0 :(得分:3)

您使用了两种不同的方式来指定键,但实际上您的键是不同的。

  • 第一个条件要求for (i in planItems.indices) { planItems[i].addToRootView(rl_plan_items, i) } col1的组合必须唯一。因此,您不能拥有col2,但可以拥有(1,2)(1,2)(1,2)

  • 第二个要求每个列必须唯一,独立;在这种情况下,即使后面的示例也是无效的。

这是第一个语句,具有相同的句法方法,但经过重写以匹配第二个语句的语义:

(1,2)(1,3)(2,3)

您可以在the documentation中了解有关表模式语法的更多信息。

答案 1 :(得分:3)

如果您写:

`CREATE TABLE `t1` (`col1` INT, `col2` INT, UNIQUE(`col1`,`col2`));`

这意味着您不能拥有col1 + col2的二重奏,所以:

col1 | col2
1    | 1
1    | 2
2    | 1
2    | 2

可以,但是:

col1 | col2
1    | 1
1    | 2
2    | 1
2    | 2
1    | 1  // NOT OK, duplicate of first row
2    | 2  // NOT OK, duplicate of row number 4

现在,如果您写:

CREATE TABLE `t2` (`col1` INT UNIQUE, `col2` INT UNIQUE);

这意味着col1不能有两个相同的值,col2不能有两个相同的值。所以:

col1 | col2
1    | 1   // OK
1    | 2   // NOT OK, you already have value 1 for col1 in row 1
3    | 1   // NOT OK, you already have value 1 for col2 in row 1
4    | 3   // OK

您知道吗?