MySQL数据库(四)__2018.11.12

想在记录中保持数据的完整性和一致性,就必须有完整性约束条件。

主键:标识着记录的唯一性,主要目的是帮助我们快速定位到表中的某一条记录。主键的值不能重复,而且一个表中只能有一个主键。被设置为主键的字段禁止为空。一般给表中的无意义字段设置主键,习惯给编号字段特别是数值性。

--测试主键

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');

扫描二维码关注公众号,回复: 4064808 查看本文章

指定主键时可以省略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');

自动增长是最大值加一。

猜你喜欢

转载自blog.csdn.net/weixin_40316053/article/details/83997457