MySQL主键的理解

主键(primary key )没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为“PRIMARY KEY”,主键不能重复,一个表只能有一个主键。

Mysql中规定自增列必须为主键,在插入时,如果自动增长列没有输入值,则插入的值为自动增长后的值;如果输入的值为0或者null,则插入的值也为自动增长后的值;如果插入某个确定的值,且该值在前面没有出现过,则可以直接插入。

1. 主键一定是唯一性索引,唯一性索引并不一定就是主键。 
所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。数据库在设计时,主键起到了很重要的作用。 
主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。

2. 一个表中可以有多个唯一性索引,但只能有一个主键。

3. 主键列不允许空值,而唯一性索引列允许空值。

4. 索引可以提高查询的速度。 
其实主键和索引都是键,不过主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在在数据库中,主键一般都要建,主要是用来避免一张表中有相同的记录,索引一般可以不建,但如果需要对该表进行查询操作,则最好建,这样可以加快检索的速度。

1、声明主键的方法:

您可以在创建表的时候就为表加上主键,如:

CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name));

也可以更新表结构时为表加上主键,如:

ALTER TABLE tbl_name ADD PRIMARY KEY (index_col_name,…);

/*

创建一个qq表,将qq_id设为主键,且没有对其进行NOT NULl约束

*/

create table qq(

qq_id int(10),

nick_name varchar(255) not null,

primary key (qq_id))

/*

插入一条数据,将qq号设为10000(咱也幻想一下),昵称设为"simaopig"

*/

INSERT INTO qq( qq_id, nick_name )

VALUES (

'10000', 'simaopig');

2、示例

主键被认为是NOT NULL和UNIQUE约束最好的结合。如果这些列没有被明确地定义为NOT NULL,MySQL会隐含地定义这些列。

3、主键也是索引:

刚才已经说了,主键其实也是索引,甚至在MySQL的术语里面“键”就等于“索引”,所以“外键”一定要先设为“索引”。所以主键也应该和索引一样,既可以作用于单独的字段,又可以作用于多个字段。

举个简的例子吧,我住3单元,501室,我叫小小子,那么只有3单元501室才能在本小区表里面唯一确定我家。因为2单元,501室住着的可能也是个小小子,所以只有两个字段才能唯一确定我,也就是说可以二者组合作为主键。组合的主键,每个列都会隐含定义NOT NULL约束,且其二者加在一起被定义了UNIQUE 惟一约束。

/*

创建防火墙表,将host 和port组合设为主键,注意我没有将port设NOT NULL约束

*/

create table firewall(

host varchar(11) not null,

port smallint(4),

access enum('deny', 'allow') not null,

primary key (host,port))

/*

插入一条新的记录,没有啥问题

1 row(s) inserted.

*/

INSERT INTO firewall (

host ,

port ,

access)

VALUES (

'202.65.3.87', '21', 'deny');

MySQL主键的理解相关推荐

  1. mysql 主键理解_MySQL主键的理解

    MySQL主键的理解 主键(primary key)没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为"PRIMARY KEY",主键不能重复,一个表只能有 ...

  2. mysql主键_mysql主键是什么?

    在mysql中,主键全称"主键约束",是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性:主键的作用是确定该数据的唯一性,主要是用于和其他表的外键关联, ...

  3. mysql主键干嘛的_mysql主键是什么?

    在mysql中,主键全称"主键约束",是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性:主键的作用是确定该数据的唯一性,主要是用于和其他表的外键关联, ...

  4. mysql主键自增长空缺_Mysql 主键自增长auto_increment问题分析

    本节内容: Mysql 主键自增长 在mysql数据库中,主键由auto_increment实现自增长,若自定义函数来表示auto_increment的话可以如下: 复制代码 代码示例: create ...

  5. Oracle与Mysql主键、索引及分页的区别小结

    Oracle与Mysql主键.索引及分页的区别,学习oracle的朋友可以参考下 区别: 1.主键,Oracle不可以实现自增,mysql可以实现自增. oracle新建序列,SEQ_USER_Id. ...

  6. MySQL主键学习总结

    浅谈MySQL主键 主键没有着明确的概念定义,其是索引的一种,并且是唯一性索引的一种,且必须定义为"PRIMARY KEY",主键不能重复,一个表只能有一个主键. 1.声明主键的方 ...

  7. MySQL主键(PRIMARY KEY)

    "主键(PRIMARY KEY)"的完整称呼是"主键约束".MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键 ...

  8. 从开发者角度谈Mysql主键

    转载自 从开发者角度谈Mysql主键 说在前面 零度mysql一直比较薄弱,俗话说的好,不会mysql的程序员不是好程序员,刚刚好认识mysql大牛刘龘刘,刚刚好就有了这些文章,主要是刘龘刘大牛写的, ...

  9. mysql主键long_MySQL主键设计

    [TOC] 在项目过程中遇到一个看似极为基础的问题,但是在深入思考后还是引出了不少问题,觉得有必要把这一学习过程进行记录. MySQL主键设计原则 MySQL主键应当是对用户没有意义的. MySQL主 ...

最新文章

  1. CV十年发展之观察:1.5万篇论文透视「业界」与「学界」,到底谁更胜一筹?...
  2. shell练习03 安装mysql
  3. centos7挂载nas存储_Geeki说丨浅谈几种存储添加主机映射方式
  4. 5.Excel日期时间函数类应用
  5. Vim 还是 Emacs
  6. minecraftjava版光追_我的世界:网易版终于更新狐狸生物?Java版光追技术已开始测试...
  7. Macromedia Studio 8 简体中文正式版激活码
  8. java 字符串长度截取_java中截取指定字符串长度函数
  9. 买股不如买基?Python实现快速追踪基金的收益情况!谁还不是个买基高手?
  10. C++关键字分析系列
  11. 微信聊天软件测试用例设计,微信页面测试用例_20140819
  12. 第一性原理计算2019-nCoV病毒分子3CL水解酶结构
  13. Erlang之父去世,忠告程序员:先思考再编程,累的时候不要写代码
  14. 【计算机视觉40例】案例36:调用CNN实现人脸检测
  15. 快手校招真题-最少数量货物装箱问题(动态规划)
  16. echart 可视化设计器
  17. flink监控prometheus/influxdb + grafana企业实战
  18. C++ vector之删除元素
  19. 虚拟服务器日语,云服务器日语
  20. C/C++ vs2017 OpenCV简单入门

热门文章

  1. SQL2008R2 不支持用该后端版本设计数据库关系图或表
  2. Linux操作系统-命令-free
  3. Android Context.bindService 返回 false 问题
  4. java linkedlist和arraylist添加元素时性能比较
  5. Android多线程源码学习笔记一:handler、looper、message、messageQueue
  6. SDWebImage 加载Https自签名证书时的图片问题
  7. 【uoj#139】[UER #4]被删除的黑白树 贪心
  8. MUI 支付宝支付接入
  9. JavaScript——创建对象
  10. 前后台传值乱码问题解决