unsigned
- 表示无符号
- 没有负数,从0开始
-- 测试无符号,范围是0~256CREATE TABLE test_unsigned( a tinyint, b tinyint unsigned);-- 正常插入INSERT test_unsigned(a,b) VALUES(0,0);INSERT test_unsigned(a,b) VALUES(-12,0);-- 插入报错INSERT test_unsigned(a,b) VALUES(-12,-12); -- 报错INSERT test_unsigned(a,b) VALUES(0,256); -- 报错
zerofill
- 表示零填充
- 当显示长度不够显示长度的时候,可以使用前补0的效果填充至指定长度
- 不能是负数
-- 测试零填充
CREATE TABLE test_int1(
a tinyint ZEROFILL,
b smallint ZEROFILL,
c mediumint ZEROFILL,
d int ZEROFILL,
e bigint ZEROFILL
);
INSERT test_int1(a,b,c,d,e) VALUES(1,1,1,1,1);
-- 结果为:| 001 | 00001 | 00000001 | 0000000001 | 00000000000000000001 |
所谓显示长度,是指tinyint(3)的 “3”
mysql> desc test_int1;
+-------+--------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------------------------+------+-----+---------+-------+
| a | tinyint(3) unsigned zerofill | YES | | NULL | |
| b | smallint(5) unsigned zerofill | YES | | NULL | |
| c | mediumint(8) unsigned zerofill | YES | | NULL | |
| d | int(10) unsigned zerofill | YES | | NULL | |
| e | bigint(20) unsigned zerofill | YES | | NULL | |
+-------+--------------------------------+------+-----+---------+-------+
我们可以在创建表的时候,就指定显示长度,不过一般配合zerofill使用
CREATE TABLE test_int1(
a tinyint(2) ,
b smallint(2)
);
NOT NULL
- 表示非空
- 插入值的时候必须给字段赋值
--测试NOT NULL(非空)
CREATE TABLE test_not_null(
a varchar(20),
b varchar(20) not null
);
INSERT test_not_null(a,b) VALUES('',''); -- | | |
INSERT test_not_null(a,b) VALUES(NULL,NULL); -- 报错
INSERT test_not_null(a,b) VALUES(NULL,'abc'); -- | NULL | abc |
INSERT test_not_null(a) VALUES('test'); -- 报错
INSERT test_not_null(b) VALUES('test'); -- | NULL | test |
DEFAULT
- 表示默认值
- 如果插入记录的时候没有给字段赋值,就使用默认值
--测试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 '576813175@qq.com'
);
INSERT test_default(username) VALUES('A');
-- | 1 | A | 18 | 576813175@qq.com |
INSERT test_default(username,age,email) VALUES('B',30,'imooc@qq.com');
-- | 2 | B | 30 | imooc@qq.com |
INSERT test_default(username,age,email) VALUES('C',NULL,'imooc@qq.com');
-- | 3 | C | NULL | imooc@qq.com |
INSERT test_default(username,age,email) VALUES('C',NULL,NULL);
-- 报错
INSERT test_default(username,age,email) VALUES('C',NULL,DEFAULT);
-- | 4 | C | NULL | 576813175@qq.com |
PRIMARY KEY
- 表示主键
- 标识记录的唯一性,值不能重复
- 自动禁止为空
- PRIMARY 可以省略
- 一个表只能有一个主键
- 可以指定复合主键,当复合主键的值都相同的时候,才会报主键重复错误
--测试主键
CREATE TABLE test_primary_key(
id INT UNSIGNED PRIMARY KEY,
username VARCHAR(20)
);
INSERT test_primary_key(id,username) VALUES(1,'song'); -- 正确
INSERT test_primary_key(username) VALUES('song'); -- 报错,主键不能为空
INSERT test_primary_key(id,username) VALUES(1,'hui'); -- 报错,主键重复
-- PRIMARY 可以省略
CREATE TABLE test_primary_key1(
id INT UNSIGNED KEY,
username VARCHAR(20)
);
-- 指定主键的另外方式
CREATE TABLE test_primary_key2(
id INT UNSIGNED,
username VARCHAR(20),
PRIMARY KEY(id)
);
--以下会报错,不允许存在两个主键
CREATE TABLE test_primary_key3(
id INT UNSIGNED PRIMARY KEY,
courseId INT UNSIGNED PRIMARY KEY,
username VARCHAR(20)
);
--复合主键,以下这样是可以的
--当id和courseId同时相同的时候,才会报主键重复错误
CREATE TABLE test_primary_key3(
id INT UNSIGNED,
courseId INT UNSIGNED,
username VARCHAR(20),
PRIMARY KEY(id,courseId)
);
INSERT test_primary_key3(id,courseId,username) VALUES(1,1,'song'); -- | 1 | 1 | song |
INSERT test_primary_key3(id,courseId,username) VALUES(1,2,'song'); -- | 1 | 2 | song |
INSERT test_primary_key3(id,courseId,username) VALUES(2,1,'nian'); -- | 2 | 1 | nian |
INSERT test_primary_key3(id,courseId,username) VALUES(1,1,'song'); --会报错
UNIQUE NKEY
- 表示唯一性
- 同样的值不能重复,但是NULL值除外
- 一个表中可以有多个字段是唯一索引
- NULL不算重复
CREATE TABLE test_unique(
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','A@qq.com','1');
-- | 1 | A | A@qq.com | 1 |
INSERT test_unique(username,email,card) VALUES('A','B@qq.com','2');
-- 会报错
INSERT test_unique(username,email,card) VALUES('B',NULL,NULL);
-- | 2 | B | NULL | NULL |
INSERT test_unique(username,email,card) VALUES('C',NULL,NULL);
-- | 3 | C | NULL | NULL |
AUTO_INCREMENT
- 表示自动增长
- 只能用于数值列,而且配合索引使用
--测试AUTO_INCREMENT
--从已有编号的最大值开始自增
CREATE TABLE test_auto_increment(
id INT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20)
);
INSERT test_auto_increment(username) VALUES('A'); -- | 1 | A |
INSERT test_auto_increment(username) VALUES('B'); -- | 2 | B |
INSERT test_auto_increment(username) VALUES('C'); -- | 3 | C |
INSERT test_auto_increment(id,username) VALUES(5,'C'); -- | 5 | C |
INSERT test_auto_increment(username) VALUES('D'); -- | 6 | D |
INSERT test_auto_increment(id,username) VALUES(NULL,'E'); -- | 7 | E |
INSERT test_auto_increment(id,username) VALUES(DEFAULT,'F'); -- | 8 | F |
INSERT test_auto_increment(id,username) VALUES('','F'); -- 报错