问题描述
我有一张桌子,如下:
CREATE TABLE `b` (
`b1` int(11) DEFAULT NULL,`b2` int(11) DEFAULT NULL,UNIQUE KEY `b1` (`b1`,`b2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
在此,为2个字段指定了唯一表约束。但是,在show create table查询中,它就像 UNIQUE KEY b1
(b1
,b2
)一样,第一个字段b1
的作用是结合了b2
的唯一键。
我可以放弃约束b1
,但不能约束b2
:
MysqL> alter table b drop index b2;
ERROR 1091 (42000): Can't DROP 'b2'; check that column/key exists
MysqL> alter table b drop index b1;
Query OK,0 rows affected (0.41 sec)
Records: 0 Duplicates: 0 Warnings: 0
需要的答案:
预先感谢
解决方法
在您的情况下,cookie: null
仅用UNIQUE KEY命名。由于您在create table语句中没有提供约束名称,因此它由第一列名称(b1
)隐式命名。它检查b1
和b1
对的唯一性
对于创建命名密钥,您可以使用下一条语句:
b2
此处创建了名为create table b (
b1 int,b2 int,unique key b1b2_uk (b1,b2)
);
的{{1}}
查看示例here
如果要删除约束,则应使用其名称,例如:
unique key
对于变更约束,您需要删除存在并创建新的约束,例如:
b1b2_uk
在SQLize.online上拨弄小玩意
,如果表看起来像这样,也许会更容易理解:
CREATE TABLE `b` (
`b1` int(11) DEFAULT NULL,`b2` int(11) DEFAULT NULL,UNIQUE KEY `my_unique_index` (`b1`,`b2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
alter table b drop index my_unique_index;
明白吗?