一、建表
1、数据类型
(1)数值类型
整数类型 |
字节 |
范围 |
用途 |
tinyint |
1 |
-128~127 |
很小的整数 |
smallint |
2 |
-32768~32767 |
|
mediumint |
24位 |
-8388608~8388607 |
|
int |
32位 |
-2147483648~2147483647 |
|
bigint |
64位 |
±9.22*10的18次方 |
|
浮点数类型 |
字节 |
说明 |
float |
4 |
单精度 |
double |
8 |
双精度 |
decimal |
|
用于金钱,不会出现精度损失 |
(2)字符类型
类型 |
大小 |
用途 |
CHAR |
0-255 bytes |
定长字符串 |
VARCHAR |
0-65535 bytes |
变长字符串 |
TEXT |
0-65 535 bytes |
长文本数据 |
MEDIUMTEXT |
0-16 777 215 bytes |
中等长度文本数据 |
LONGTEXT |
0-4 294 967 295 bytes |
极大文本数据 |
char
和varchar
区别
写法 |
M的意思 |
特点 |
空间的耗费 |
效率 |
char(M) |
最大的字符数,可省略,默认为1 |
固定长度的字符 |
比较耗费 |
高 |
varchar(M) |
最大的字符数,不可以省略 |
可变长度的字符 |
比较节省 |
低 |
(3)日期类型
类型 |
字节 |
范围 |
格式 |
用途 |
DATE |
3 |
1000-01-01/9999-12-31 |
YYYY-MM-DD |
日期值 |
TIME |
3 |
‘-838:59:59’/‘838:59:59’ |
HH:MM:SS |
时间值或持续时间 |
YEAR |
1 |
1901/2155 |
YYYY |
年份值 |
DATETIME |
8 |
1000-01-01/9999-12-31 |
YYYY-MM-DD HH:MM:SS |
混合日期和时间值 |
TIMESTAMP |
4 |
1970-2038 |
YYYYMMDD HHMMSS |
混合日期和时间值,时间戳 |
(4)二进制类型
类型 |
大小 |
用途 |
BLOB |
0-65 535 bytes |
二进制大对象(图片,音视频) |
MEDIUMBLOB |
0-16 777 215 bytes |
二进制形式 |
LONGBLOB |
0-4 294 967 295 bytes |
二进制形式的极大对象 |
2、六大约束
USE students;
DROP TABLE stuinfo;
CREATE TABLE stuinfo(
id INT PRIMARY KEY,#主键
stuName VARCHAR(20) NOT NULL UNIQUE,#非空
gender CHAR(1) CHECK(gender='男' OR gender ='女'),#检查(mysql不支持)
seat INT UNIQUE,#唯一
age INT DEFAULT 18,#默认约束
majorId INT REFERENCES major(id)#外键
);
NOT NULL:非空,用于保证该字段的值不能为空
比如姓名、学号等
DEFAULT:默认,用于保证该字段有默认值
比如性别
PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
比如学号、员工编号等
UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
比如座位号
CHECK:检查约束【mysql中不支持】
比如年龄、性别
FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
在从表添加外键约束,用于引用主表中某列的值
比如学生表的专业编号,员工表的部门编号,员工表的工种编号
约束的添加分类:
列级约束:
六大约束语法上都支持,但外键约束没有效果
表级约束:
除了非空、默认,其他的都支持
主键和唯一的大对比:
保证唯一性 是否允许为空 一个表中可以有多少个 是否允许组合
主键 √ × 至多有1个 √,但不推荐
唯一 √ √ 可以有多个 √,但不推荐
外键:
1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、主表的关联列必须是一个key(一般是主键或唯一)
4、插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表
二、存储引擎
对比项 |
MyISAM |
InnoDB |
主外键 |
不支持 |
支持 |
事务 |
不支持 |
支持 |
行表锁 |
表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 |
行锁,操作时只锁某一行,不对其它行有影响,适合高并发的操作 |
缓存 |
只缓存索引,不缓存真实数据 |
不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响表空间 |
表空间 |
小 |
大 |
关注点 |
性能 |
事务 |
默认安装 |
Y |
Y |
用户表默认使用 |
N |
Y |
自带系统表使用 |
Y |
N |