使用不同的存储引擎,数据是以不同的方式存储的
show engines; 查看存储引擎
innodb: 2个文件(树形结构(数据+树) + 表结构)
mysql5.6以上默认的存储方式
transaction 事务(事务的代码先在内存中执行,完毕后才刷新到硬盘上) 保证数据安全,数据的完整性而设置的概念
row-level locking 行级锁
table-level locking 表级锁
foreign keys 外键约束 (两个表之间数据通过外键约束保证数据安全)
树tree 加速查询
myisam: 3个文件(树形结构 + 数据 + 表结构)
mysql5.5以下默认的存储方式
table-level locking 表级锁
树tree 加速查询
memory: 1个文件(表结构,数据在内存) 基于hash
tinyint: 有符号(-128,127) 无符号(unsigned约束)(0,255)
int: 有符号(-32768,32767) 无符号(unsigned约束)(0,65535)
create table int_t(
ti tinyint, ****
i int, *****
tiun tinyint unsigned,
iun int unsigned
);
create table fd_t(
f float, # 默认小数点后5位 再往后就不准确(精度问题) *****
d double, # 默认小数点后9位 精度高一些,再往后同样不准确
f2 float(5,2), 第一个数字代表全部位数,第二个数字代表小数位数,在精确位四舍五入
d2 double(5,2)
);
create table dec_t(
dec1 decimal, # 默认(10,0)
dec2 decimal(30,20) # 小数位数没写够自动补0
);
内置函数now() 得到当前时间
datetime 上下班打卡时间/日志/论坛博客类的评论和文章 *****
date 生日/入职时间/离职日期 *****
time 上课时间/下课时间/竞赛数据
year 年代(酒)
timestamp 由于表示范围问题,导致使用变少
create table time_t(
dt datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
# 相较timestamp表示范围更大,还能拥有其特点
d date,
t time,
y year,
ts timestamp # 不能为空,默认值是当前时间(可以被覆盖),在修改时同时更新时间
);
char:0-255 定长存储,存储速度快,占用更多的空间 *****
char(12) => 输入'kunkun',系统会用空格补齐存储,取出时再去掉空格(自己在数据后输入的空格也会被去掉)
# 用于手机号码、身份证号码、用户名、密码等有一定弹性的数据
varchar:0-65535 变长存储,存储速度慢,占用的空间小 ****
varchar(12) => 输入'kunkun',系统会随机补一个字符存储(如kunkun2)
# 多用于评论
create table ch_t(
c char, # 默认一个字符,varchar不能这样写
c2 char(5),
vc varchar(5),
);
enum(单选)
create table enum_t(
id int,
name char(12),
gender enum('男','女') # 如果输入的不是指定数据,则该项数据为空
);
set(多选)
create table set_t(
id int,
name char(12),
hobby set('唱','跳','rap','篮球') # 去重,输入的不是指定数据则不取
);
原文:https://www.cnblogs.com/wxl1025/p/11271770.html