“主键(PRIMARY KEY)”的完整称呼是“主键约束”。MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。

选取设置主键约束的字段

主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则:

  • 每个表只能定义一个主键。
  • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。
  • 一个列名只能在复合主键列表中出现一次。
  • 复合主键不能包含不必要的多余列。已经为大家精心准备了大数据的系统学习资料,从Linux-Hadoop-spark-......,需要的小伙伴可以点击当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。

在创建表时设置主键约束

在 CREATE TABLE 语句中,主键是通过 PRIMARY KEY 关键字来指定的。

在定义列的同时指定主键,语法规则如下:

<字段名> <数据类型> PRIMARY KEY [默认值]

【实例 1】在 test_db 数据库中创建 tb_emp 3 数据表,其主键为 id,输入的 SQL 语句和运行结果如下所示。

  mysql> CREATE TABLE tb_emp3      -> (      -> id INT(11) PRIMARY KEY,      -> name VARCHAR(25),      -> deptId INT(11),      -> salary FLOAT      -> );  Query OK, 0 rows affected (0.37 sec)  mysql> DESC tb_emp3;  +--------+-------------+------+-----+---------+-------+  | Field  | Type        | Null | Key | Default | Extra |  +--------+-------------+------+-----+---------+-------+  | id     | int(11)     | NO   | PRI | NULL    |       |  | name   | varchar(25) | YES  |     | NULL    |       |  | deptId | int(11)     | YES  |     | NULL    |       |  | salary | float       | YES  |     | NULL    |       |  +--------+-------------+------+-----+---------+-------+  4 rows in set (0.14 sec)

在定义完所有列之后,指定主键的语法格式为:

[CONSTRAINT <约束名>] PRIMARY KEY [字段名]

【实例 2】在 test_db 数据库中创建 tb_emp 4 数据表,其主键为 id,输入的 SQL 语句和运行结果如下所示。

  mysql> CREATE TABLE tb_emp4      -> (      -> id INT(11),      -> name VARCHAR(25),      -> deptId INT(11),      -> salary FLOAT,      -> PRIMARY KEY(id)      -> );  Query OK, 0 rows affected (0.37 sec)  mysql> DESC tb_emp4;  +--------+-------------+------+-----+---------+-------+  | Field  | Type        | Null | Key | Default | Extra |  +--------+-------------+------+-----+---------+-------+  | id     | int(11)     | NO   | PRI | NULL    |       |  | name   | varchar(25) | YES  |     | NULL    |       |  | deptId | int(11)     | YES  |     | NULL    |       |  | salary | float       | YES  |     | NULL    |       |  +--------+-------------+------+-----+---------+-------+  4 rows in set (0.14 sec)

在创建表时设置复合主键

主键由多个字段联合组成,语法规则如下:

PRIMARY KEY [字段1,字段2,…,字段n]

【实例 3】创建数据表 tb_emp5,假设表中没有主键 id,为了唯一确定一个员工,可以把 name、deptId 联合起来作为主键,输入的 SQL 语句和运行结果如下所示。

  mysql> CREATE TABLE tb_emp5      -> (      -> name VARCHAR(25),      -> deptId INT(11),      -> salary FLOAT,      -> PRIMARY KEY(id,deptId)      -> );  Query OK, 0 rows affected (0.37 sec)  mysql> DESC tb_emp5;  +--------+-------------+------+-----+---------+-------+  | Field  | Type        | Null | Key | Default | Extra |  +--------+-------------+------+-----+---------+-------+  | name   | varchar(25) | NO   | PRI | NULL    |       |  | deptId | int(11)     | NO   | PRI | NULL    |       |  | salary | float       | YES  |     | NULL    |       |  +--------+-------------+------+-----+---------+-------+  3 rows in set (0.14 sec)

在修改表时添加主键约束

在修改数据表时添加主键约束的语法规则为:

ALTER TABLE <数据表名> ADD PRIMARY KEY(<列名>);

查看 tb_emp2 数据表的表结构,如下所示。

  mysql> DESC tb_emp2;  +--------+-------------+------+-----+---------+-------+  | Field  | Type        | Null | Key | Default | Extra |  +--------+-------------+------+-----+---------+-------+  | id     | int(11)     | NO   |     | NULL    |       |  | name   | varchar(30) | YES  |     | NULL    |       |  | deptId | int(11)     | YES  |     | NULL    |       |  | salary | float       | YES  |     | NULL    |       |  +--------+-------------+------+-----+---------+-------+  4 rows in set (0.14 sec)

【实例 4】修改数据表 tb_emp2,将字段 id 设置为主键,输入的 SQL 语句和运行结果如下所示。

  mysql> ALTER TABLE tb_emp2      -> ADD PRIMARY KEY(id);  Query OK, 0 rows affected (0.94 sec)  Records: 0  Duplicates: 0  Warnings: 0  mysql> DESC tb_emp2;  +--------+-------------+------+-----+---------+-------+  | Field  | Type        | Null | Key | Default | Extra |  +--------+-------------+------+-----+---------+-------+  | id     | int(11)     | NO   | PRI | NULL    |       |  | name   | varchar(30) | YES  |     | NULL    |       |  | deptId | int(11)     | YES  |     | NULL    |       |  | salary | float       | YES  |     | NULL    |       |  +--------+-------------+------+-----+---------+-------+  4 rows in set (0.12 sec)

MySQL主键(PRIMARY KEY)相关推荐

  1. MySQL||主键(primary key)及主键约束

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

  2. Mysql完整性约束详解(字段唯一,非空,主键primary key,外键foreign key,自增长auto_increment)

    引入 1.什么是完整性约束, 为什么使用 为了规范数据格式, 在用户进行插入.修改.删除等操作时,DBMS(数据库管理系统(Data Base Management System))自动按照约束条件对 ...

  3. 数据库六大约束用法:主键(primary key)、外键(foreign key)、非空(not null)、默认(default)、检查(check)、唯一(unique)

    1. 数据库有六大约束 主键(primary key) 外键(foreign key):被参照的键必须有唯一约束或是主键 非空(not null) 默认(default) 检查(check):orac ...

  4. 主键(Primary Key)设置

    版权声明:Copyright©2008-2020,david, All Rights Reserved, 本文为博主原创文章,转载请标明出处. https://blog.csdn.net/jssg_t ...

  5. Oracle之主键(Primary Key)用法详解

    工作中用的数据库是Oracle,建表是说用复合主键,博主不是很懂啊(主键还有复合主键),才发现主键这块很是薄弱,查完资料,特写一篇博客记录一下. 什么是主键 主键(primary key)是表中的一个 ...

  6. mysql创建数据库时使用sql/wordbench使主键(primary key)自增

    sql `id` int(4) primary key not null auto_increment 例: CREATE TABLE `supplier_recommand`.`new_table` ...

  7. 主键primary key和唯一索引unique index

    1)主键一定是唯一性索引,唯一性索引并不一定就是主键. 2)主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引. 3)主键常常与外键构成参照完整性约束,防止出现数 ...

  8. oracle建表语句设置主键,oracle 表添加主键 primary key

    根据数据库三范式就是每个表建议要有主键,每个字段不可再分,表与之间不存在部分依赖 数据库的优化首先考虑的也是主键 主键会在对应的字段加唯一约束.加not null,建 索引 怎么为表加主键呢 1,建表 ...

  9. MySQL主键学习总结

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

  10. MySQL主键唯一键重复插入解决方法

    我们插入数据的时候,有可能碰到重复数据插入的问题,但是这些数据又是不被允许有重复值: CREATE TABLE stuInfo ( id INT NOT NULL COMMENT '序号', name ...

最新文章

  1. 关于Python的装饰器(1)
  2. 01. 把存储过程结果集SELECT INTO到临时表
  3. Android开发之约束布局平均分布|ConstraintLayout平均分布|约束布局均匀分布|ConstraintLayout均匀分布
  4. linux判断文件写入完毕,linux文件编程——系统调用(打开、写入、读取、访问判断)...
  5. oracle中的fetchsize,oracle setFetchsize() 优化查询速度
  6. python3.7安装步骤-python安装步骤_python 3.7.2安装教程
  7. IBatisNet初步体验
  8. PGP加密并签名邮件 实验
  9. Python 调用 kafka 构建完整实例分析与应用
  10. 9.2 iptables主机防火墙
  11. Halo博客建站小记
  12. 华为2018年服务器销售额,2018Q4华为服务器收入全球第三 同比增45.9%
  13. 今日分享非技术之图片大小不得超过80kb
  14. 打单工具有哪些?拼多多商家如何打单?
  15. 喇叭音圈是大一点好还是小一点好
  16. 记一次全局/后台弹窗处理
  17. 2013年中国android智能手机用户调查研究报告,ZDC:2013年7月中国智能手机市场分析报告...
  18. 面向对象性不属于Java语言_以下叙述中不属于Java语言特点的是()。 A.面向对象B.可移植性C.多线程...
  19. 中大计算机专业在上升中,考研趣事:中科大软件学院400分以上300+,中大计算机321分排第三...
  20. 用css生成购物车图标,图标字体库(用CSS样式生成搜索、购物车等图标)

热门文章

  1. ML之LiRSGDR:基于二种算法(LiR、SGDR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能
  2. 算法训练_ALGO14_回文数
  3. [R]R语言中的%%和%.%
  4. 20145205《Java程序设计》课程总结
  5. WIFI只sta和ap建立连接的过程
  6. (译+原)std::shared_ptr及std::unique_ptr使用数组
  7. 强化学习(二)—— 价值学习(Value-Based)及DQN
  8. 文本挖掘预处理流程总结(1)— 中文
  9. 出块过程 (1)close发送消息
  10. 作业调度算法--短作业优先 操作系统_处理器管理_编程题