存储引擎
1、定义:存储引擎可以看成是处理数据的不同方式,show engines;是查看所有存储引擎的命令。
2、主要类型:MYISAM,MEMORY,INNOdb,BLACKHOLE
MYISAM MySQL5.5之前默认的存储引擎,不支持下面的,不够安全,但是速度比innodb块。
INNOdb MySQL5.5之后的默认的存储引擎 支持事物 transactions,行级锁row-level locking,外键foreign key,更加安全。
MEMEORY:基于内存存取数据,速度最快但是最不安全,断电之后就没有了。
BLACKHOLE:写入其中数据就会立刻消失,类似于垃圾站。
3、创建表的区别:指定存储引擎的命令:create table t1 (id int) engine=myisam;
(1)myisam会创3个文件,.frm 表结构文件 .MYD表数据文件 .MYI表索引文件
(2)innodb .frm 表结构文件 .ibd 表数据和表索引文件
(3)memory .frm 表结构文件
(4) blackhole .frm 表结构文件
数据类型
1、整型
int tinyint smallint int bigint 不同的int类型能够存储不同的数据长度,要注意的是:
(1)正负号占一个比特为
(2)手机号必须使用bigint
(3)所有的int类型默认都需要正负号
移除正负号:
create table t1 (id tinyint unsigned);
2、浮点型
float(255,30) 总共255位,小数占30位
double(255,30) 总共255位,小数占30位
decimal(65,30) 总共65位,小数占30位
三者精确度不一样,float<double<decimal
3、字符类型
char(4)-->定长类型,最多只能存4个字节,多了报错,少了自动空格填充至4个,在存的时候会自动补上空格,但是取的时候就是会把空格自动去除.
varchar-->变长类型,最多能存4个,多了报错,少了有几个存几个
针对5.6版本超出范围不会报错,而是自动帮你截取并保存,我下的是8.0,是自动严格模式的。
对此更改sql模式就行:
方式1:修改配置文件
方式2:show variables like '%mode%';
set session;当前窗口有效
set global;当前服务有效
set global sql_model=strict_trans_tables;
退出重新进入
注意:统计某个字段数据的长度:select char_length(name)from t1 where id=1; char类型在取的时候会自动去掉空格,可以设置sql_mode来让他显示
char和varchar的对比
char:整存整取,速度快,但是浪费存储空间。
varchar:节省存储空间,但是存取数据的速度比char慢,会给每一个数据加1bytes的报头,里面放着数据的长度。
补充:在创建字段的时候可以加上注释:create table t1( id int comment'序号');
🌹 整型中括号内数字的作用
在整型中括号内的数字是用来控制展示的长度的
4、枚举与集合
枚举(多选一) enum()
create table user(id int, name varchar(32),gender enum('male','femal','others'));
集合(多选多包含多选一)
create table user(id int, name varchar(32),hobbby enum(' football','tennis','others'))
5、日期类型
date 年月日
datetime
年月日时分秒
time 时分秒
year 年份
🌹 创建表的完整语法
create table 表名( 字段名 字段类型(数字) 约束条件 );
1、字段名和字段类型是必须的
2、数字和约束条件是可选的并且条件可以与多个
3、最后一个语句的结尾不要加逗号
约束条件
(1)约束条件相当于在字段类型的基础上添加的额外约束
(2)unsigned 让数字不能正负号
(3)zerofill 多余的使用数字0填充
(4)not null 非空
(5)default 默认值 --》default 'judy'
(6)unique 唯一值
单列唯一 单列字段值必须是唯一的,在字段最后加上unque即可
联合唯一 多个字段结合的结果是唯一的,unique(字段1,字段2)
(7)primary key-->相当于not null+unique innodb有且只有一个主键
🌹如果没有设置主键
1、innodb会采用隐藏的字段作为主键,不能加快数据的查询
2、没有主键但是有非空且唯一的字段,自动将该字段升级为主键
(8)auto_increment 自增 只能增不会减。
truncate + 表名 可以清空整张表,并且重置主键值;
🌹新增表数据的方式
1、insert into t1 values();
2、insert into t1(name,id) values('judy',1);
3、在mysql中不传数据,会使用关键字null,类似于python的none,如果需要限制就用not null;