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 
时间: 2024-11-08 17:53:14

MySql -- UNIQUE唯一约束的相关文章

数据库中创建unique唯一约束

最近项目中的需求,确定唯一一条数据,原来貌似碰到过,忘记了,现在记录一下.实现唯一约束还可以不是主键的unique. oracle中的unique约束是用来保证表中的某一类,或者表中的某一类组合起来不重复的一种手段.我们在可以在创建表时或者创建好后通过修改表的方式来创建oracle中的unique约束. 下面是一些创建unique约束的例子: create table unique_test (id number, fname varchar2(20), lname varchar2(20),

MYSQL中唯一约束和唯一索引的区别

1.唯一约束和唯一索引,都可以实现列数据的唯一,列值可以有null.2.创建唯一约束,会自动创建一个同名的唯一索引,该索引不能单独删除,删除约束会自动删除索引.唯一约束是通过唯一索引来实现数据的唯一.3.创建一个唯一索引,这个索引就是独立,可以单独删除.4.如果一个列上想有约束和索引,且两者可以单独的删除.可以先建唯一索引,再建同名的唯一约束.5.如果表的一个字段,要作为另外一个表的外键,这个字段必须有唯一约束(或是主键),如果只是有唯一索引,就会报错. 约束是业务检查,比方说非空约束,chec

unique 唯一约束

CREATE UNIQUE INDEX product_template_default_code_uniq ON  product_template (default_code); CREATE UNIQUE INDEX product_product_default_code_uniq ON  product_template (default_code); 原文地址:https://www.cnblogs.com/tank-/p/9154883.html

谈谈唯一约束和唯一索引

约束 全称完整性约束,它是关系数据库中的对象,用来存放插入到一个表中一列数据的规则,用来确保数据的准确性和一致性. 索引 数据库中用的最频繁的操作是数据查询,索引就是为了加速表中数据行的检索而创建的一种分散的数据结构.可以把索引类比成书的目录,有目录的肯定比没有目录的书,更方便查找. 唯一约束 保证在一个字段或者一组字段里的数据都与表中其它行的对应数据不同.和主键约束不同,唯一约束允许为 NULL,只是只能有一行. 唯一索引 不允许具有索引值相同的行,从而禁止重复的索引或键值. 唯一约束和唯一索

MySQL中的约束,添加约束,删除约束,以及其他修饰

一.NOT NULL(非空约束)添加非空约束 1)建表时直接添加 CREATE TABLE t_user(user_id INT(10) NOT NULL); 2)通过ALTER 语句 ALTER TABLE t_user MODIFY user_id INT(10) NOT NULL; ALTER TABLE t_user CHANGE user_id user_id INT(10) NOT NULL; 删除非空约束 1)ALTER TABLE t_user MODIFY user_id IN

[MySQL Tips]:如何删除unique key约束

[场景]: 假设最初创建了一个表bank,在street属性上添加了unique约束. create table branch( branch_name char(30) not null primary key, city varchar(20), street varchar(20) unique ); 表结构如下: [问题] 后来发现在同一个street上可以出现多个支行,也就是说street不应该是unique的.此时怎样删除unique约束呢? [方法] alter table bra

NULL和唯一约束UNIQUE的对应关系

NULL和唯一约束UNIQUE的对应关系 在数据库中,NULL表示列值为空.唯一约束UNIQUE规定指定列的值必须是唯一的,值和值之间都不能相同.这个时候,就出现一个问题,NULL和NULL算是相同,还是不同.由于SQL语法没有明确规定,所以各个数据库厂商的处理方式不同. (1)PostgreSQL和Oracle认为NULL表示没有指定数据,所以数据有多种可能,所以UNIQUE约束列中允许存在任意个NULL. (2)Informix和SQL Server认为NULL就表示空,是一种唯一的状态.所

mysql 唯一约束

ALTER TABLE user ADD UNIQUE (username,userid) 对表user增加username和userid的唯一约束 ALTER TABLE tablename  ADD UNIQUE (列名,列名) 约束需要消耗一定的性能,慎用,建议更多的约束逻辑在程序中控制,避免数据库性能瓶颈.自己平衡性能和完整性的取舍.

判断唯一约束是否是唯一的Unique

//检查 唯一约束Name //检查 唯一约束Name int count = new BLL.Funcs().GetRecordCount(string.Format("Name={0}", model.Name)); if (!CheckUniqueFieldByCount(EditID, count, preName, model.Name)) { FineUI.Alert.Show(Resources.WebResource.SaveFailed); return; } //新