NOT NULL:非空约束,也就是插入值的时候不能为空,而且值不能是空值
CREATE TABLE test_not(
a VARCHAR(20),
B VARCHAR(20) NOT NULL
);
如果往里面插入两个空字符串,不会报错,因为空字符串也算有值。但是如果不给B插入NULL或者不写则会报错。
-- 不报错
INSERT test_null(a,b) VALUES('','');
-- 报错
INSERT test_null(a,b) VALUES(NULL,NULL);
DEFAULT:默认值,如果插入记录的时候没有给字段赋值,则使用默认值
-- 测试默认值
CREATE TABLE test_default(
id INT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED DEFAULT 18,
email VARCHAR(50) NOT NULL DEFAULT '[email protected]'
);
INSERT test_default(username) VALUES('xx');
测试枚举
CREATE TABLE test_one(
id INT UNSIGNED AUTO_INCREMENT KEY,
sex ENUM('a','b','c') NOT NULL DEFAULT 'a'
);
INSERT test_one(sex) VALUES(DEFAULT);
UNIQUE KEY:和主键很类似,而UNIQUE KEY可以是多个字段为索引。唯一性,一个表中可以有多个字段是唯一索引,同样的值不能重复,但是NULL值除外。
CREATE TABLE test_unqine(
id INT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE KEY,
email VARCHAR(50) UNIQUE,
card CHAR(18) UNIQUE
);
-- 不报错
INSERT test_unique(username,email,card) VALUES('A','[email protected]','1');
-- 报错
INSERT test_unique(username,email,card) VALUES('A','[email protected]','11');
-- 不报错
INSERT test_unique(username,email,card) VALUES('B',NULL,NULL);