想在记录中保持数据的完整性和一致性,就必须有完整性约束条件。
主键:标识着记录的唯一性,主要目的是帮助我们快速定位到表中的某一条记录。主键的值不能重复,而且一个表中只能有一个主键。被设置为主键的字段禁止为空。一般给表中的无意义字段设置主键,习惯给编号字段特别是数值性。
--测试主键
CREATE TABLE test_primary_key(
id INT UNSIGNED PRIMARY KEY,
username VARCHAR(20)
);
PRI就是主键的缩写,被标注为主键后,就禁止为空了,不能重复了。
NULL部分是禁止为空的。
INSERT test_primary_key(id,username) VALUES(1,'king');
主键为空
INSERT test_primary_key(username) VALUES('king');
主键重复,代表了一个唯一性。
mysql> INSERT test_primary_key(id,username) VALUES(1,'queue');
指定主键时可以省略primary。
CREATE TABLE test_primary_key(
id INT UNSIGNED KEY,
username VARCHAR(20)
);
第二种写法:
CREATE TABLE test_primary_key(
id INT UNSIGNED ,
username VARCHAR(20),
PRIMARY KEY(id)
);
使用多字段主键的时候用第二种写法比较方便。
一个表中只能有一个主键。但是可以有复合主键的形式。
多主键被定义的情况:
复合主键:
由id和courseId共同组成一个主键,用它们共同定义一个用户。它们两个共同可以定位到一个位置。它们两个必须同时相同才代表重复。
CREATE TABLE test_primary_key3(
id INT UNSIGNED,
courseId INT UNSIGNED,
username VARCHAR(20),
email VARCHAR(50),
PRIMARY KEY(id,courseId)
);
此时的主键就相当于1-1
INSERT test_primary_key3(id,courseId,username,email)
VALUES(1,'a','king','[email protected]');
主键为:1-a(它们两个整体构成一个唯一值就可以)
INSERT test_primary_key3(id,courseId,username,email)
VALUES(1,'b','king','[email protected]');
复合主键重复。
一般就用两个字段组成一个符合主键。
和主键配合来用的auto increasement。是一个自动增长(默认排号)默认起始值从1开始,每次增长1。
--测试自动增长auto increment。
一般是配合索引来使用,它一定要配合索引来使用。一般配合主键索引来使用。
一个表中只能由一个自动增长的列,并且它一定得被定义为索引。
CREATE TABLE test_auto_increment(
id INT UNSIGNED AUTO_INCREMENT,
username VARCHAR(20)
);
CREATE TABLE test_auto_increment(
id INT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20)
);
查看表结构得详细信息:
INSERT test_auto_increment(username)VALUES('b');
INSERT test_auto_increment(username)VALUES('c');
自增长,且只能用到数值列。
INSERT test_auto_increment(id,username)VALUES(NULL,'b');
INSERT test_auto_increment(id,username)VALUES(DEFAULT,'c');
INSERT test_auto_increment(id,username)VALUES('','b');
INSERT test_auto_increment(id,username)VALUES(15,'G');
自动增长是最大值加一。