MySql -- unique唯一约束

3、UNIQUE 约束

  约束唯一标识数据库表中的每条记录。

创建一张测试表

CREATE TABLE `test`.`info`(  
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `idCard` VARCHAR(18) UNIQUE NOT NULL, -- 直接在字段上添加唯一约束
  `mobile` VARCHAR(11),
  PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_estonian_ci;

添加唯一约束UNIQUE

/*
除了上面的添加唯一约束的方法以外,
如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,写法如下:
uc_idCard约束由mobile和idCard组合成唯一约束。
*/
CREATE TABLE `test`.`info`(  
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `idCard` VARCHAR(18) UNIQUE,
  `mobile` VARCHAR(11),
  PRIMARY KEY (`id`),
  CONSTRAINT `uc_idCard` UNIQUE (`mobile`,`idCard`) 
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_estonian_ci;


如果在存在表的情况下,添加唯一约束
-- 无名字的约束 ALTER TABLE `info` ADD UNIQUE (`idCard`);
-- uc_idCard约束由mobile和idCard组合成唯一约束 ALTER TABLE `info` ADD CONSTRAINT `uc_idCard` UNIQUE (`mobile`,`idCard`);

撤销 UNIQUE 约束

-- 移除指定字段的约束
ALTER TABLE `info` DROP INDEX `idCard`; 

-- 移除有名字的约束
ALTER TABLE `info` DROP INDEX `uc_idCard`; 

向 UNIQUE 约束添加数据

-- 添加一条基础数据
INSERT INTO `info`(`idCard`,`mobile`) VALUES('99999','1111');

-- 添加一条idCard重复的记录
INSERT INTO `info`(`idCard`,`mobile`) VALUES('99999','2222');

结果:
错误代码: 1062
DUPLICATE entry '99999' FOR KEY 'idCard';

-- 在唯一约束中添加 NULL
INSERT INTO `info`(`idCard`,`mobile`) VALUES(NULL,'1111');
-- 再次添加NULL
INSERT INTO `info`(`idCard`,`mobile`) VALUES(NULL,'2222');

结果:
    id  idCard  mobile  
-------------------------
     6  (NULL)  1111    
     7  (NULL)  2222
原因:因为 NULL != NULL
原创内容,如果你觉得文章还可以的话,不妨点个赞支持一下!转载请注明出处。
原文地址:https://www.cnblogs.com/lixingwu/p/7206658.html