微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

唯一表约束

如何解决唯一表约束

我有一张桌子,如下:

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 b1b1b2一样,第一个字段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

需要的答案:

  1. 为什么将此唯一约束仅应用于一个字段(首先提到的字段)?
  2. 唯一表约束的结构是这样的吗?
  3. 非常需要参考链接的任何附件

预先感谢

解决方法

在您的情况下,cookie: null 仅用UNIQUE KEY命名。由于您在create table语句中没有提供约束名称,因此它由第一列名称(b1)隐式命名。它检查b1b1对的唯一性 对于创建命名密钥,您可以使用下一条语句:

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;

明白吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。