MySQL---‘PRIMARY KEY’的使用-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

MySQL---‘PRIMARY KEY’的使用

简介:


一、定义:

主键(PRIMARY KEY),又称主码,是表中一列或多列的组合。

MySQL主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行

这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。

 

二、选取设置主键约束的字段:

主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符;主键可以 是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键

 

规则:

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

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

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

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

三、主键的类型:单字段主键和多字段联合主键。

1.单字段主键

(1)在创建表时设置主键约束,语法规则:

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

实例1:在test_db数据库中创建tb_emp1数据表,其主键为id,SQL语句如下

mysql> create table tb_emp1

   -> (

   -> id int(11) primary key,

   -> name varchar(25),

   -> deptid int(11),

   -> salary float

   -> );

Query OK, 0 rows affected (0.01 sec)

 

(2) 在定义完所有列之后指定主键,语法规则:

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

实例2:创建tb_emp2数据表,其主键为id,SQL语句如下

mysql> create table tb_emp2

   -> (

   -> id int(11),

   -> name varchar(25),

   -> deptid int(11),

   -> salary float,

   -> primary key(id)

   -> );

Query OK, 0 rows affected (0.01 sec)

mysql> show create table tb_emp2\G;

*************************** 1. row ***************************

      Table: tb_emp2

Create Table: CREATE TABLE `tb_emp2` (

 `id` int(11) NOT NULL DEFAULT '0',

 `name` varchar(25) DEFAULT NULL,

 `deptid` int(11) DEFAULT NULL,

 `salary` float DEFAULT NULL,

 PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk

1 row in set (0.00 sec)

2.多字段联合主键:

 语法规则:

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

实例3:创建数据表tb_emp3,假设表中没有主键id,为了唯一确定一个员工,可以把name、deptid联合起来作为主键,SQL语句如下

mysql> create table tb_emp3

   -> (

   -> name varchar(25),

   -> deptid int(11),

   -> salary float,

   -> primary key(name,deptid)

   -> );

Query OK, 0 rows affected (0.01 sec)

 

mysql> show create table tb_emp3\G;

*************************** 1. row ***************************

      Table: tb_emp3

Create Table: CREATE TABLE `tb_emp3` (

 `name` varchar(25) NOT NULL DEFAULT '',

 `deptid` int(11) NOT NULL DEFAULT '0',

 `salary` float DEFAULT NULL,

 PRIMARY KEY (`name`,`deptid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk

1 row in set (0.00 sec)

 

3.在修改表时添加主键约束

 语法规则:

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

 

实例4:查看tb_emp2数据表的表结构

 

mysql> desc tb_emp2;

+--------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+--------+-------------+------+-----+---------+-------+

| id    | int(11)     | NO   |    | 0       |       |

| name  | varchar(25) | YES  |     | NULL   |       |

| deptid | int(11)     | YES |     | NULL    |      |

| salary | float       | YES |     | NULL    |      |

+--------+-------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

修改数据表tb_emp2,将字段id设置为主键,SQL语句如下:

mysql> alter table tb_emp2 add primary key(id);

Query OK, 0 rows affected (0.02 sec)

Records: 0 Duplicates: 0  Warnings: 0

 

mysql> desc tb_emp2;

+--------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+--------+-------------+------+-----+---------+-------+

| id    | int(11)     | NO   | PRI | 0       |      |

| name  | varchar(25) | YES  |     | NULL   |       |

| deptid | int(11)     | YES |     | NULL    |      |

| salary | float       | YES |     | NULL    |      |

+--------+-------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

 

4.删除主键约束

   ALTER TABLE <数据表名> DROP PRIMARY KEY;

(因为每个表的主键约束只有一个,所以并不用指定名称。)

实例5:删除tb_emp2表的主键约束

mysql> alter table tb_emp2 drop primary key;

Query OK, 0 rows affected (0.02 sec)

Records: 0 Duplicates: 0  Warnings: 0

 

mysql> desc tb_emp2;

+--------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+--------+-------------+------+-----+---------+-------+

| id    | int(11)     | NO   |    | 0       |       |

| name  | varchar(25) | YES  |     | NULL   |       |

| deptid | int(11)     | YES |     | NULL    |      |

| salary | float       | YES |     | NULL    |      |

+--------+-------------+------+-----+---------+-------+

4 rows in set (0.00 sec)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章
最新文章
相关文章