MySQL数据类型,约束,标识列

一、数值型

整型:
Tinyint:1个字节,有符号:-128到127 ,无符号(unsigned):0到255
Smallint:2个字节,有符号:-32768到32767,无符号数:0到65535
Mediumint:3个字节
int/Integer:4个字节
Bigint:8个字节
小数:M:整数位+小数位,D:小数位
定点数:(精度较高)
dec(M,D)
decimal(M,D)
浮点数:
float(M,D):4个字节
double(M,D):8个字节

二、字符型

较短的文本:最多的字符数M
char(M):固定长度,M为0到255 可以省略 默认为1,比较耗费空间,效率较高
varchar(M):可变长度,M为0到65535 不可以省略,节省空间,效率低

三、日期型

date:4字节
datetime:8字节
timestamp:4字节
time:3字节
year:1字节

常见约束

NOT NULL:非空,保证该字段的值不能为空。比如姓名,学号等
DEFAULT:默认,保证该字段有默认值。比如性别
PRIMARITY:主键,保证该字段具有唯一性,且不为空。比如学号,员工编号
UNIQUE:唯一,保证该字段具有唯一性。比如座位号
CHECK:检查约束(mysql不支持)。比如性别
FOREIGN KEY:外键,用于限制两个表的关系,保证该字段的值必须来自主表的关联的值。在从表添加外键约束,用于引用主表中某一列的值。比如学生表的专业编号,员工表的部门编号,员工表的工种编号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 添加列级约束
CREATE TABLE stuinfo(
id INT PRIMARY KEY,# 主键
stuname VARCHAR(10) NOT NULL,# 非空
gender char(1) CHECK (gender='男' OR gender='女'),# 检查 不支持
seatid INT UNIQUE,# 唯一
age INT DEFAULT 18,# 默认约束
majorid INT REFERENCES major(id)# 外键 不支持
);

CREATE TABLE major(
id int PRIMARY KEY,
majorname varchar(20)
);

SHOW INDEX FROM stuinfo;# 查看所有的索引

# 2.添加表级约束
DROP TABLE stuinfo;
CREATE TABLE stuinfo(
id INT,
stuname char(10),
gender char(1),
age INT,
seatid INT,
majorid INT,

CONSTRAINT pk PRIMARY KEY(id),# 主键
CONSTRAINT ck CHECK(gender='男'or'女'),# 检查 不支持
CONSTRAINT uq UNIQUE(seatid),# 唯一
CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorid) REFERENCES major(id) # 外键
);
# 修改表时添加约束
/*
1.添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束;
2.添加表级约束
alter table 表名 add [constraint 约束名] 约束类型(字段名) [外键的引用]
*/

标识列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
1.标识列必须与key(主键,外键,unique)搭配
2.一个表至多有一个标识列
3.标识列的类型只能是数值型
4.可通过set auto_increment_increment=数字;设置步长
*/
# 创建表时设置标识列
CREATE TABLE stuinfo(
id INT PRIMARY KEY AUTO_INCREMENT,
stuname char(10),
gender char(1),
age INT,
seatid INT,
majorid INT
);
# 修改表时设置标识列
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;