1.约束是对表中的数据进行限定,保证数据的正确性、有效性和完整性。在mysql中,约束包括:not null(非空约束)、unique(唯一性约束)、primary key(主键约束)、foreign key(外键约束)、check(检查约束)。
2.primary key(主键):用于唯一的标示表行的数据,当定义主键约束时,该列不能重复而且不能为null;一张表最多只能有一个主键,但可以是复用主键;直接在字段后制定:字段名 primary key;在表定义最后写 primary key(列名);使用desc表名,可以看到primary key的情况。
CREATE TABLE t17(
id INT PRIMARY KEY,
`name` VARCHAR(32));
INSERT INTO t17
VALUES(1,'jack');
INSERT INTO t17
VALUES(2,'tom');
INSERT INTO t17
VALUES(1,'nono'); -- 报错
SELECT * FROM t17;
INSERT INTO t17
VALUES(NULL,'nono'); -- 报错
3.not null(非空):在列上定义了not null,那么当插入数据时,必须为列提供数据。 字段名 字段类型 not null。
CREATE TABLE t21(
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(32) NOT NULL DEFAULT '',
`name` VARCHAR(32) NOT NULL DEFAULT '');
DESC t21;
4.unique(唯一):当定义了唯一约束后,该列值是不能重复的。 字段名 字段类型 unique 如果没有指定not null,则unique字段可以有多个null。一张表可以有多个unique字段。
CREATE TABLE t19(
id INT UNIQUE,
`name` VARCHAR(32));
INSERT INTO t19
VALUES(1,'jack');
INSERT INTO t19
VALUES(1,'tom');
INSERT INTO t19
VALUES(NULL,'tom');
SELECT * FROM t19;
5.foreign key(外键):用于定义主表和从表之间的关系;外键约束要定义在从表上,主表则必须具有主键约束或是unique约束。FOREIGN KEY(本表字段名) REFERENCES 主表名(主键名或unique字段名) 外键指向的表的字段,要求是primary key或是unique 表的类型是innodb,这样的表才支持外键。外键字段的值,必须在主键字段中出现过,或者为null(前提是外键字段允许为null)。
CREATE TABLE my_class(
id INT PRIMARY KEY,
`name` VARCHAR(32) NOT NULL DEFAULT '');
CREATE TABLE my_stu(
id INT PRIMARY KEY,
`name` VARCHAR(32) NOT NULL DEFAULT '',
class_id INT,
FOREIGN KEY (class_id) REFERENCES my_class(id));
INSERT INTO my_class
VALUES(100,'java'),(200,'web');
SELECT * FROM my_class;
INSERT INTO my_stu
VALUES(1,'tom',100);
INSERT INTO my_stu
VALUES(2,'jack',200);
INSERT INTO my_stu
VALUES(3,'nono',300);-- 添加失败
SELECT * FROM my_stu;
6.check(检查):是用来检查数据表中字段值。mysql5.7目前不支持chack,只做语法校验,但不会生效。CHECK (表达式)
CREATE TABLE t20(
id INT PRIMARY KEY,
`name` VARCHAR(32),
sex VARCHAR(6) CHECK (sex IN('man','woman')),
sal DOUBLE CHECK (sal > 1000 AND sal < 2000));
INSERT INTO t20
VALUES(1,'jack','mid',1);
SELECT * FROM t20;
7.当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。字段名 整型 primary key auto_increment 自增长修饰的字段为整数型(很少使用小数)。自增长默认从1开始,可以通过命令修改:alter table 表名 auto_increment = xxx;
ALTER TABLE t22 AUTO_INCREMENT = 100;
CREATE TABLE t22(
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(32) NOT NULL DEFAULT '',
`name` VARCHAR(32) NOT NULL DEFAULT '');
INSERT INTO t22
(email,`name`) VALUES('nono@qq.com','nono');
SELECT * FROM t22;