存储引擎

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;