表的基本操作+字段类型
存储引擎
存储引擎:不同的文件需要不同的存储格式和处理方式;数据库中的储存引擎就是对存储数据的处理机制。不同的存储引擎,对数据的处理方式不同。
MySQL主要储存引擎:
-
Innodb,,是MySQL5.5版本及之后默认的存储引擎,存储数据更加的安全
-
myisam,是MySQL5.5版本之前默认的存储引擎,速度要比Innodb更快,是我们更加注重的是数据的安全
-
memory,内存引擎(数据全部存放在内存中) 断电数据丢失
-
blackhole,无论存什么,都将数据丢失(黑洞)
# 查看存储引擎的sql语句, show engines;
不同储存引擎,硬盘上对应的数据文件也不尽相同
create table t1(id int) engine=innodb;
create table t2(id int) engine=myisam;
create table t3(id int) engine=blackhole;
create table t4(id int) engine=memory;
创建表的完整语法
# 完整语法
create table 表名(
字段名1 类型(宽度) 约束条件,
字段名2 类型(宽度) 约束条件,
字段名3 类型(宽度) 约束条件
)
注意
-
1 在同一张表中字段名不能重复
-
2 字段名、字段类型是必须的; 宽度、约束条件是可选的(可写可不写) ,约束条件支持写多个
字段名1 类型(宽度) 约束条件1 约束条件2..., create table t5(id); 报错
-
3 最后一行不能有逗号,否则报错
补充
-
宽度
一般情况下指的是对存储数据的限制 例如,char,默认是1个宽度,表示存一个数据的字符串只保留一个,多余的部分丢掉。 针对不同的版本会出现不同的效果 - 5.6版本默认没有开启严格模式 规定只能存一个字符你给了多个字符,那么我会自动帮你截取 - 5.7版本及以上或者默认开启了严格模式,默认一旦超出范围立刻报错
-
约束条件
约束条件 null not null不能插入null create table t8(id int,name char not null); # 此处not null是约束条件,表示该字段不能为空
# 宽度是用来限制数据的存储
# 约束条件是在宽度的基础之上增加的额外的约束
严格模式
# 如何查看严格模式
show variables like "%mode";
模糊匹配/查询
关键字 like
%:匹配任意多个字符
_:匹配任意单个字符
# 修改严格模式
set session 只在当前窗口有效
set global 全局有效
<1> set global sql_mode = 'STRICT_TRANS_TABLES';
<2> 修改完之后 重新进入服务端即可
基本字段类型
整型
-
类别:tinyint、 int、 bigint
-
默认是带有符号的(正负数),超出范围只存最大或最小接受值
-
创建表字段时可以指定整型字段时无符号的
unsigned
-
还有整形字段的宽度指的不是限制位数;默认当位数不足时用空格补全;超出时有几位存几位(在最大范围内)。
-
修改补全方式为用数字0填充,
create table t1(id int(8) unsigned zerofill);
,不足8位用0填充 -
针对整型字段,括号内无需指定宽度,因为它默认的宽度以及足够显示所有的数据了
浮点型
-
类别:FLOAT、DOUBLE、DECIMAL
-
区别:精度不同 float < double < decimal
-
存储限制
float(255,30) # 总共255位 小数部分占30位 double(255,30) # 总共255位 小数部分占30位 decimal(65,30) # 总共65位 小数部分占30位
字符类型
-
类别:char、varchar
-
区别:char固定长度,不足补全,查询速度快;varchar可变长度,节省空间;查询较慢,多占一位表示长度
-
补充:char_length()统计字段长度,需要再设置sql_mode,不让mysql自动补全空格才能真实统计
# 补充: char硬盘上存的绝对是真正的数据 带有补全空格的 但是在显示的时候MySQL会自动将多余的空格剔除 修改sql_mode 让MySQL不要做自动剔除操作 set global sql_mode = 'STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
时间类型
date、datetime、time、year等
date:年月日 2020-5-4
datetime:年月日时分秒 2020-5-4 11:11:11
time:时分秒11:11:11
Year:2020
枚举和集合
枚举 enum 多中选一个
集合 set 多中选多个
枚举字段,存的时候,只能存枚举里面有的
集合字段,存的时候,也只能存集合里面有的
create table teacher(
id int,
name char(16),
gender enum('male','female','others'),
hobby set('read','DBJ','hecha')
);
修改表
mysql对大小写不敏感
1 修改表名 # rename
alter table 表名 rename 新表名;
2 增加字段 # add first、 after
alter table 表名 add 字段名 字段类型(宽度) 约束条件;
alter table 表名 add 字段名 字段类型(宽度) 约束条件 first;
alter table 表名 add 字段名 字段类型(宽度) 约束条件 after 字段名;
3 删除字段 # drop
alter table 表名 drop 字段名;
4 修改字段 # modify、 change
alter table 表名 modify 字段名 字段类型(宽度) 约束条件;
alter table 表名 change 旧字段名 新字段名 字段类型(宽度) 约束条件;
复制表
我们sql语句查询的结果其实也是一张虚拟表
可以将这张表存起来,方标日后读取,仅仅是用而已。
create table 表名 select * from 旧表; # 不能复制主键 外键
删除表
drop table 表名
delete from 表名
truncate 表名 清空表数据