这两个声明有什么区别?
CREATE TABLE `t1` (`col1` INT, `col2` INT, UNIQUE(`col1`,`col2`));
或
CREATE TABLE `t2` (`col1` INT UNIQUE, `col2` INT UNIQUE);
答案 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
您知道吗?