目录
数据库存储引擎
1、存储引擎:数据库针对数据才去的存取方式
2、查看常见存储引擎的方式
show engines;
3、基本的存储引擎:
1.MyISAM
MySQL5.5之前的存储引擎,存取数据的速度快,但是功能性少,安全性较低
2.InnoDB
MySQL5.5之后的存储引擎,因为支持事物、行锁、外键等操作,存取速度没有MySQL快,但是安全性更高
3.Memory
基于内存存取数据 仅限临时表数据存取
4.BlackHole
任何写入进去的数据都会立刻丢失
4.不同存储引擎底层文件个数
4.1 创建库、表、添加记录
create database db2;
use db2;
create table t1(id int) engine=innodb;
create table t2(id int) engine=myisam;
create table t3(id int) engine=memory;
create table t4(id int) engine=blackhole;
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t3 values(1);
ps:MySQL默认忽略大小写,上述只需要复制到终端鼠标右键即可
4.2 结果展示
1.innodb两个文件
.frm 表结构
.ibd 表数据(表索引)
2.myisam三个文件
.frm 表结构
.MYD 表数据
.MYI 表索引
3.memory一个文件
.frm 表结构
4.blackhole一个文件
.frm 表结构
创建表的完整语法
create table 表名(
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件
);
注意:
1.字段名和字段类型是必备的
2.数字和约束条件是可选的
3.约束条件也可以写多个 空格隔开即可
4.最后一行结尾不能加逗号
编写SQL语句报错之后不要慌 仔细查看提示(near ')' at line 7)
MySQL基本数据类型及常见约束条件
字段类型之整型
tinyint 1bytes 正负号(占1bit)
smallint 2bytes 正负号(占1bit)
int 4bytes 正负号(占1bit)
bigint 8bytes 正负号(占1bit)
1.验证整型默认是否携带正负号
create table t5(id tinyint);
insert into t5 values(-129),(128);
结果展示:结果是-128和127 也就意味着默认自带正负号,正负号带1bit
针对手机号码只能用bigint
要是想验证的话,sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 编码配置中,这个先不要添加,添加就是代表数字超出数字类型范围就会报错,只能允许范围内的数字允许。引入了下面的严格模式
2.添加约束条件,取消正负号
create table t6(id tinyint unsigned);
insert into t6 values(-129),(128),(1000);
严格模式
当我们在使用数据库存储数据的时候 如果数据不符合规范 应该直接报错而不是擅自修改数据 这样会导致数据的失真(没有实际意义)
正常都应该报错 但是我们之前不小心改了配置文件
show variables like '%mode%';
1.临时修改
set session sql_mode='strict_trans_tables';
在当前客户端有效
set global sql_mode='strict_trans_tables';
在当前服务端有效
2.永久修改
直接修改配置文件---一般选这种
字段类型之浮点型
1.浮点型类型
float(255,30)
总共255位小数位占30位
double(255,30)
总共255位小数位占30位
decimal(65,30)
总共65位小数占30位
2.验证浮点型精确度
create table t7(id float(255,30));
create table t8(id double(255,30));
create table t9(id decimal(65,30));
insert into t7 values(1.11111111111111111111);
insert into t8 values(1.11111111111111111111);
insert into t9 values(1.11111111111111111111);
结果显示:三者精确度不同
精确度排序:decimal > double > float
字段类型之字符类型
1.字符串类型
char 定长
char(4) 最多存储四个字符,超出就会报错,不够四个空格就填充至四个
varchar 变长
varchar(4) 最多存储四个字符,超出就会报错,不够则有几个就存几个
2.验证字符串类型是否有限制
create table t10(id int,name char(4));
create table t11(id int,name varchar(4));
insert into t10 values(1,'kevin'); # 报错
insert into t11 values(1,'jason'); # 报错
insert into t10 values(1,'kimi');
3.统计某个字段数据对应的长度char_length()
char_length()获取字段存储的数据长度,默认情况下MySQL针对char的存储会自动填充空格和删除空格。
如果上述方法还是无法验证,需要先去取消底层优化操作:
set global sql_mode= 'strict_trans_tables,pad-char_to_full_length';
退出mysql 重启后生效>>>>:exit mysql -uroot -p
4.char 与varchar 对比
4.1 char
char
优势:整存整取 速度快
劣势:浪费存储空间
char作用:
char在存储时:固定了字符的长度不够的会空格填充。在取得时候固定取存时候的长度即可
char存储格式:
char(6)
jason tony jack kevin
4.2 varchar
varchar
优势:节省存储空间
劣势:存取数据的时候都需要先考虑报头 速度较于char慢
varchar作用:
varchar在存储时: 没有固定字符的长度。在每次取得时候会有一个报头,先取报头然后再取真实数据
varchar存储格式:
varchar(6)
1bytes+jason1bytes+tony1bytes+jack1bytes+kevin
总结:所以在存储数据长度差异不大得时候使用char,数据长度差异很大情况下使用varchar
数字的含义
数字在很多地方都是用来表示限制存储数据的长度
但是在整型中数字却不是用来限制存储长度
create table t12(id int(3)); 不是用来限制长度
insert into t12 values(12345);
create table t13(id int(5) zerofill); 而是用来控制展示的长度
insert into t13 values(123),(123456789);
create table t14(id int);
"""以后写整型无需添加数字"""
字段类型之枚举及集合
1.枚举 多选一
create table t15(
id int,
name varchar(32),
gender enum('male','female','others')
);
insert into t15 values(1,'tony','猛男');
insert into t15 values(2,'jason','male');
insert into t15 values(3,'kevin','others');
2.集合 多选多(多选一)
create table t16(
id int,
name varchar(16),
hobbies set('basketabll','football','doublecolorball')
);
insert into t16 values(1,'jason','study');
insert into t16 values(2,'tony','doublecolorball');
insert into t16 values(3,'kevin','doublecolorball,football');
字段类型之日期类型
1.日期类型
datetime 年月日时分秒
date 年月日
time 时分秒
year 年
2.日期
create table t17(
id int,
name varchar(32),
register_time datetime,
birthday date,
study_time time,
work_time year
);
insert into t17 values(1,'jason','2000-11-11 11:11:11','1998-01-21','11:11:11','2000');
ps:以后涉及到日期相关字段一般都是系统自动回去 无需我们可以操作
标签:insert,数据库,数据类型,id,values,MySQL,table,create,into
From: https://www.cnblogs.com/zhanglanhua/p/16919556.html