Mysql中unique与primary约束的区别分析(转)
定义了UNIQUE约束的字段中不能包含重复值,可以为一个或多个字段定义UNIQUE约束,因此,UNIQUE即可以在字段级也可以在表级定义,在UNIQUE约束的字段上可以包含空值. ORACLE自动会为具有PRIMARY KEY约束的字段(主码字段)建立一个唯一索引和一个NOT NULL约束,定义PRIMARY KEY约束时可以为它的索引; UNIQUED 可空,可以在一个表里的一个或多个字段定义;
PRIMARY KEY不可空不可重复,在一个表里可以定义联合主键;简单的说, primary key = unique + not null
unique就是唯一,当你需要限定你的某个表字段每个值都唯一,没有重复值时使用. 比如说,如果你有一个person_Info表,并且表中有个身份证的column,那么你就可以指定该字段unique.
从技术的角度来看,Primary Key和Unique Key有很多相似之处。但还是有以下异同:
相同:它们都属于实体完整性约束.
例
表结构:
| 代码如下 | 复制代码 |
| CREATE TABLE `good_booked` ( `auto_id` int(10) NOT NULL auto_increment, `good_id` int(11) default NULL, `chemist_id` int(11) default NULL, PRIMARY KEY (`auto_id`), UNIQUE KEY `good_id` (`good_id`,`chemist_id`), KEY `current_state` (`current_state`), KEY `send_time` (`send_time`) ) |
|
想删除某个表中某个字段的unique key:
| 代码如下 | 复制代码 |
| ALTER TABLE good_booked DROP INDEX good_id; | |
UNIQUE防止重复插入数据示例
当unique列在一个UNIQUE键上插入包含重复值的记录时,我们可以控制MySQL如何处理这种情况:使用IGNORE关键字或者ONDUPLICATEKEYUPDATE子句跳过INSERT、中断操作或者更新旧记录为新值。这样就可以防止数据库中存在重复的数据项
| 代码如下 | 复制代码 |
|
mysql>createtablemenus(idtinyint(4)notnullauto_increment, mysql>select*frommenus; |
|
如果现在在unique列插入一条违背唯一约束的记录,MySQL会中断操作,提示出错:
| 代码如下 | 复制代码 |
|
mysql>insertintomenus(id,label,url)values(4,”Contactus”,”contactus.html”); |
|
在前面的INSERT语句添加IGNORE关键字时,如果认为语句违背了唯一约束,MySQL甚至不会尝试去执行这条语句,因此,下面的语句不会返回错误:
| 代码如下 | 复制代码 |
|
mysql>insertignoreintomenus(id,label,url)values(4,”Contactus”,”contactus.html”); |
|
当有很多的INSERT语句需要被顺序地执行时,IGNORE关键字就使操作变得很方便。使用它可以保证不管哪一个INSERT包含了重复的键值,MySQL都回跳过它(而不是放弃全部操作)。
在这种情况下,我们还可以通过添加MySQL4.1新增加的ONDUPLICATEKEYUPDATE子句,使MySQL自动把INSERT操作转换为UPDATE操作。这个子句必须具有需要更新的字段列表,这个列表和UPDATE语句使用的列表相同。
| 代码如下 | 复制代码 |
|
mysql>insertintomenus(id,label,url)values(4,”Contactus”,”contactus.html”) |
|
在这种情况下,如果MySQL发现表已经包含具有相同唯一键的记录,它会自动更新旧的记录为ONDUPLICATEKEYUPDATE从句中指定的新值:
| 代码如下 | 复制代码 |
|
mysql>select*frommenus; |
|
不同点:
(1) 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。
(2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的。但是,唯一性约束所在的列并不是表的主键列。
(3) 唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。
(4)建立主键的目的是让外键来引用.
(5)一个表最多只有一个主键,但可以有很多唯一键
Mysql中unique与primary约束的区别分析(转)的更多相关文章
- mysql中key 、primary key 、unique key 与index区别
一.key与primary key区别 CREATE TABLE wh_logrecord ( logrecord_id ) NOT NULL auto_increment, ) default NU ...
- MySQL中KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的区别
参考:MySQL中KEY.PRIMARY KEY.UNIQUE KEY.INDEX 的区别 对于题目中提出的问题,可以拆分来一步步解决.在 MySQL 中 KEY 和 INDEX 是同义.那这个问题就 ...
- 待续--mysql中key 、primary key 、unique key 与index区别
mysql中key .primary key .unique key 与index区别
- mysql中 key 、primary key 、unique key 和 index 有什么不同
mysql中 key .primary key .unique key 和 index 有什么不同 key 是数据库的物理结构,它包含两层意义和作用, 一是约束(偏重于约束和规范数据库的结构完整性), ...
- 存储引擎,MySQL中的数据类型及约束
存储引擎,MySQL中的数据类型及约束 一.存储引擎 1.不同的数据应该有不同的处理机制 2.mysql存储引擎 Innodb:默认的存储引擎,查询速度叫myisam慢,但是更安全 支持事务, ...
- SET FOREIGN_KEY_CHECKS=0;在Mysql中取消外键约束。
SET FOREIGN_KEY_CHECKS=0;在Mysql中取消外键约束.
- SET FOREIGN_KEY_CHECKS=0;在Mysql中取消外键约束
Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构. 解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导 ...
- 万答#11,MySQL中char与varchar有什么区别
万答#11,MySQL中char与varchar有什么区别 1.实验场景 GreatSQL 8.0.25 InnoDB 2.实验测试 2.1 区别 参数 char varchar 长度是否可变 定长 ...
- ql语句中left join和inner join中的on与where的区别分析
sql语句中left join和inner join中的on与where的区别分析 关于SQL SERVER的表联接查询INNER JOIN .LEFT JOIN和RIGHT JOIN,经常会用到 ...
随机推荐
- CF576C Points on Plane 构造
正解:构造 解题报告: 先放下传送门趴QAQ 话说我jio得这题好玄学啊,,,就是,我实在觉得我这题做得完美无缺了?可就是过不去,,,而且它告诉我的奇异错误是"wrong output fo ...
- mysql python pymysql模块 增删改查 查询 字典游标显示
我们看到取得结果是一个元祖,但是不知道是哪个字段的,如果字段多的时候,就比较麻烦 ''' (1, 'mike', '123') (2, 'jack', '456') ''' 用字典显示查询的结果,也可 ...
- pop to 特定的UIViewController
1. 我们可以推出到特定的UIViewController 2. 有一个类没有navigationController,以前一般用delegate,我觉得我们可以把引用一个navigationCont ...
- 机器学习理论基础学习14.2---线性动态系统-粒子滤波 particle filter
一.背景 与卡曼滤波不同的是,粒子滤波假设隐变量之间(隐变量与观测变量之间)是非线性的,并且不满足高斯分布,可以是任意的关系. 求解的还是和卡曼滤波一样,但由于分布不明确,所以需要用采样的方法求解. ...
- 为什么size_t重要?
参见 http://en.cppreference.com/w/cpp/types/size_t size_t其实与uintptr_t一个道理.就是一个东西.指针其实就是寻址,与地址总线位数一致,编译 ...
- set的一些数学运算
python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和 ...
- 按照用户名和角色查询用户liferay
需求:当登录的用户输入用户的名字和角色的时候,模糊查询,然后就是Ajax的异步请求刷新界面 首先在一个工具类中写上一条你要写的sql语句代码如下: package com.ebizwindow.crm ...
- SQL Server 2008 R2 超详细安装图文教程
一.下载SQL Server 2008 R2安装文件 ed2k://|file|cn_sql_server_2008_r2_enterprise_x86_x64_ia64_dvd_522233.iso ...
- [转]VS中展开和折叠代码
VS2005代码编辑器的展开和折叠代码确实很方便和实用.以下是展开代码和折叠代码所用到的快捷键,很常用: Ctrl + M + O: 折叠所有方法 Ctrl + M + M: 折叠或者展开当前方法 C ...
- VS2012快捷键突然不能用怎么办
晚上做项目做着做着,就去弄了下键盘配置,可怜的娃娃~~~一下子弄得什么快捷键都不能用了,比如”注释:ctrl+k ctrl+c”;问题纠结了我一个多钟,好在最后结合了网络上各路英雄的idea;解决了问 ...