当前位置:网站首页 > SQL数据库编程 > 正文

mysql主键设计原则(mysql主键原理)



“主键(PRIMARY KEY)”的完整称呼是“主键约束”。

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

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

每个表只能定义一个主键。

主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。

一个列名只能在复合主键列表中出现一次。

复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。

创建表时设置主键约束 在 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主键设计原则(mysql主键原理)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • MySQL增删改查(MySQL增删改查命)2025-03-31 12:36:08
  • mysql主从主键冲突(mysql主从常见问题)2025-03-31 12:36:08
  • mysql导入sql文件(mysql导入sql文件过大自动断开)2025-03-31 12:36:08
  • jdbc连接数据库5个步骤mysql(jdbc连接数据库5个步骤代码)2025-03-31 12:36:08
  • mysql导入sql文件语句(mysql8.0导入sql文件)2025-03-31 12:36:08
  • 使用pymysql连接数据库(pymysql连接数据库失败)2025-03-31 12:36:08
  • mysql导入sql文件跳过错误(mysql导入sql文件报错)2025-03-31 12:36:08
  • sql写循环语句(sql循环函数)2025-03-31 12:36:08
  • sqlldr readsize最大值(sql in最大值)2025-03-31 12:36:08
  • mysql 主键重置为0(mysql主键重复报错)2025-03-31 12:36:08
  • 全屏图片