主键

primary key主键

特点:
一个表中只能有一个primary key主键
如果有多个字段都作为primary key主键,称为复合主键,必须在建立表时指定!并且这个复合主键虽然有多个字段,但它仍然代表的是一个主键!
对应的字段值不允许有重复,并且不允许设空值
主键字段的key标识为PRI
主键通常与auto_increment 连用
经常把表中能够唯一标识记录的字段设置为主键[记录编号字段]
###########################################################################
创建主键/复合主键(在建表时)

用法:
primary key(字段)

创建复合主键
primary key(字段名,字段名,字段名); 创建复合主键,只要在括号里写上多个字段名就行了

MariaDB [db1]> create table c(
-> name varchar(5) not null,
-> age int(2) not null, #记住最后面有逗号,因为下面是单独指定主键
-> primary key(name,age) #第1种方法,单独写一条。复合组建就在括号里写多个字段名
-> );

MariaDB [db1]> create table b(
> name varchar(5) not null,
-> age int(2) not null primary key #第2种方法,直接写在字段后
-> );


MariaDB [db1]> create table a(
-> id int(4) primary key auto_increment, #第2种方法,直接写在字段后
-> name varchar(5) not null,
-> age int(2) not null
-> );
############################################################################
创建复合主键(在建表时)

用法:
primary key(字段名,字段名,字段名); 创建复合主键,只要在括号里写上多个字段名就行了

把具有唯一标识的字段设置为主键。
复合主键的字段只要不同时重复就可以设置。

MariaDB [db1]> desc c;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| name | varchar(5) | NO | PRI | NULL | | 用户名:是复合主键
| age | int(2) | NO | PRI | NULL | | 年龄:也是复合主键
+-------+------------+------+-----+---------+-------+

MariaDB [db1]> insert into c values("tom",20); 插入用户名tom,年龄20岁

常见错误:复合主键的全部字段同时重复了,所以报错!
MariaDB [db1]> insert into c values("tom",20); 无法再插入一样的数据,用户名tom,年龄20岁
ERROR 1062 (23000): Duplicate entry 'tom-20' for key 'PRIMARY'

MariaDB [db1]> insert into c values("tom",21); 只要不是所有的复合主键的值全部一样,就能插入数据
MariaDB [db1]> insert into c values("lili",21);
########################################################################
auto_increment 自增长

前提是:必须是主键primary key,且是数值类型。
主键与auto_increment自增长连用时,能让字段的值自动增长

创建自增长(在建表时和主键一起创建)
MariaDB [db1]> create table a(
-> id int(4) primary key auto_increment,
-> name varchar(5) not null,
-> age int(2) not null
-> );

MariaDB [db1]> select * from a;
MariaDB [db1]> desc a;
+-------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | varchar(5) | NO | | NULL | |
| age | int(2) | NO | | NULL | |
+-------+------------+------+-----+---------+----------------+

MariaDB [db1]> insert into a(name,age) values("tom",21),("harry",30);
MariaDB [db1]> select * from a;
+----+-------+-----+
| id | name | age |
+----+-------+-----+
| 1 | tom | 21 |
| 2 | harry | 30 |
+----+-------+-----+

MariaDB [db1]> insert into a values(null,"lili",35); #当是空值null,它默认没有输入参数,自加一
MariaDB [db1]> select * from a;
+----+-------+-----+
| id | name | age |
+----+-------+-----+
| 1 | tom | 21 |
| 2 | harry | 30 |
| 3 | lili | 35 | 默认编号在原来的最后一个id值2上加一,能让字段的值自动增长!
+----+-------+-----+
#############################################################################
创建主键/复合主键(在已有的表中)

用法:
alter table 表名 add primary key(字段名);

创建复合主键
alter table 表名 add primary key(字段名,字段名,字段名); 创建复合主键,只要在括号里写上多个字段名就行了

mysql> alter table t6 add primary key(clientip,serport);

MariaDB [db1]> desc a;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+

MariaDB [db1]> alter table a add primary key(id);

MariaDB [db1]> desc a;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | 0 | |
+-------+---------+------+-----+---------+-------+
############################################################################
删除主键

用法:
alter table 表名 drop primary key;

注意:删除有自增长属性的主键,必须先取消自增长属性!

MariaDB [db1]> desc c;
+-------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment | 是主键,并且有自增属性
| name | varchar(5) | NO | | NULL | |
| age | int(2) | NO | | NULL | |
+-------+------------+------+-----+---------+----------------+


常见错误:主键有自增长属性,不允许删除
MariaDB [db1]> alter table a drop primary key;
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key


MariaDB [db1]> alter table c #先删除自增长。用modify命令,保持原有类型,不写自增长。
-> modify id int(4);


MariaDB [db1]> desc c;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | int(4) | NO | PRI | 0 | | 自增属性已经去掉了
| name | varchar(5) | NO | | NULL | |
| age | int(2) | NO | | NULL | |
+-------+------------+------+-----+---------+-------+

MariaDB [db1]> alter table c drop primary key; 再去掉自增属性

MariaDB [db1]> desc c;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | int(4) | NO | | 0 | | 移除主键成功!
| name | varchar(5) | NO | | NULL | |
| age | int(2) | NO | | NULL | |
+-------+------------+------+-----+---------+-------+


如果想要添加自增长。用modify命令,保持原有类型,并写自增长。
mysql> alter table t7
-> modify id int not null auto_increment;

###########################################################################
删除复合主键

会删除全部的复合主键,不能只删除单个的。

mysql> alter table t6 drop primary key; 会删除全部的复合主键!

 

posted @ 2019-04-30 22:24  安于夏  阅读(485)  评论(0编辑  收藏  举报