关键字: [ primary key ]

作用:用来唯一标识表中的一行记录

特点:1.唯一性约束+非空约束  唯一且为空

唯一性约束:不允许出现重复值

非空约束:不允许出现空值,但不是 NULL 

2.一个表最多只能有一个主键约束,建立主键约束可以在列级别创建,也可以在表级别上创建。

列级别创建写在某单个列的后面,表级别主键写在整个表的后面

3.主键约束对应着表中的一列或者多列(复合主键) 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。

4.MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用。

5.当创建主键约束时,系统默认会在所在的列或列组合上建立对应的主键索引(能够根据主键查询 的,就根据主键查询,效率更高)。

6.如果删除主键约束了,主键约束对应的索引就自动删除了。

需要注意的一点是,不要修改主键字段的值。因为主键是数据记录的唯一标识,如果修改了主键的 值,就有可能会破坏数据的完整性。

添加主键约束:

create table temp

( id int primary key,

name varchar(20) );

测试设置了主键的列是否能插入充值 

id 我们设置成了主键,先插入两条数据 id = 1, id = 2

INSERT INTO temp VALUES(1,'张三');
INSERT INTO temp VALUES(2,'李四');

后再重复插入 id = 1 的值,不要看name 他不是主键和这个约束无关
INSERT INTO temp VALUES(1,'周六');

错误提示:Duplicate entry '1' for key 'temp.PRIMARY'  

mysql的primary key怎么创建 mysql中primary key的作用_mysql

 

测试:给设置了主键的 id 插入null看看

INSERT INTO temp VALUES(NULL,'李琦');#失败

Column 'id' cannot be null  id列不允许为空

疑问:非空约束: 指的是 null 还是 '  '

众所周知,NULL指的是内存中中存储NULL值有地址,并且还要留有一定空间储存看是不是 NULL,空值也就是字段中存储空字符'    '格子里什么都没有 也不用留有空去存它.

bug 在哪? 明显表格中显示什么都没有,却用 插入 null来测试是否为空 而不是 ('  ')。

 

 

mysql的primary key怎么创建 mysql中primary key的作用_错误提示_02

 测试: 是否能插入多个主键

CREATE TABLE temp2(
id INT PRIMARY KEY,
NAME VARCHAR(20) PRIMARY KEY
);  #错误

错误提示: Multiple primary key defined   定义了多个主键

删除主键约束:

语法:alter table   表名称  drop primary key;

ALTER TABLE  student  DROP(删除)

复合主键:和表级主键差不多,表级主键,表中所有列组合设置为主键,复合主键你可以针对两个以上的列任意设置为复合主键

表级主键:

CREATE TABLE emp5( id INT ,

NAME VARCHAR(20),

pwd VARCHAR(15),

CONSTRAINT emp5_id_pk

对于 MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用

emp5_id_pk 这个是我给自定义的,但是查询出还是 priMary key  

mysql的primary key怎么创建 mysql中primary key的作用_mysql_03

复合主键:

create table student_course(

sid int,

cid int,

score int, primary key(sid,cid)

总结:告诉大家几个查看约束和索引的方法

SELECT * FROM information_schema.table_constraints
WHERE TABLE_NAME = '索引名';

DESC 索引名

指定需要查看数据表的索引

SHOW INDEX FROM 表名 FROM 数据库名;