MySql primary key

219 阅读1分钟
  • primary key ■ 用于设定主键。 ■ 主键就是一个表中数据的“关键值”,通过该关键值就可以找到该特定的数据行。 ■ 一个表的主键值不能重复(相等) ,比如文章表中的文章编号id, 比如用户表中的用户名。 ■ 主键字段必须有值(不能为空)。 ■ 一个表只能有一个主键(但一个主键可以是1个字段或2个以上的字段联合构成)

  • 主键设置的几种形式

mysql> create table test (id int primary key, name varchar(10));
mysql> desc test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
mysql> create table test (id int, name varchar(10), primary key(id));
mysql> desc test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
  • 多字段主键的含义及设定
    • 含义:表结构里面不能通过一个字段作为定位主键,需要多个字段组合才能定位数据。
    • 设定:数据样例(成绩表),通过学生ID与科目作为联合主键查询学生每科成绩:
学生ID科目成绩
1mysql90
2php88
1js70
2ios89
mysql> create table test (id int, subject varchar(20), score tinyint unsigned, primary key(id, subject));
mysql> desc test;
+---------+---------------------+------+-----+---------+-------+
| Field   | Type                | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+-------+
| id      | int(11)             | NO   | PRI | NULL    |       |
| subject | varchar(20)         | NO   | PRI | NULL    |       |
| score   | tinyint(3) unsigned | YES  |     | NULL    |       |
+---------+---------------------+------+-----+---------+-------+
3 rows in set (0.02 sec)

上面创建的表中就有两个主键值了,分别为 id subject,注意看 Key 那一栏的 PRI 标识,查询就通过两个主键值查询即可,这里只是简单举例,实战还得自己看用于什么场景。