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