数据库——存储引擎、字段类型、约束条件
存储引擎
存储引擎是根据不同的机制处理不同的数据
查看MySQL中所有引擎
cmd>>>:show engines;
- myisam:5.5以前老的版本使用的存储引擎
- blackhole(黑洞引擎):类似于队列中的数据,存进去消失
- innodb:默认使用的存储引擎
- 支持事务
- 行锁
- 外键
- memory:通电数据存在,断电丢失
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;
- 插入数据验证引擎的作用:
insert into t1 values(1);
insert into t2 values(2);
insert into t3 values(3);
insert into t4 values(4);
创建表完整的语法
约束条件:可有可无
宽度:限制某些数据类型的存储大小
create table 表名(
字段名1 字段类型(宽度) 约束条件,
字段名2 字段类型(宽度) 约束条件
);
注意:
1、创建表的字段名不能重复
2、最后一个字段不能再末尾加 , 号
3、字段名必须要有字段类型与宽度
字段类型
1)确定表结构
2)字段与字段类型
- 整型
- tinyint: 默认范围 -128, 127
create table t5(
id tinyint,
name varchar(16)
);
5.6.40
insert into t5 values(-128, 'tank'), (127, 'jason');
insert into t5 values(-129, 'tank');
insert into t5 values(128, 'jason');
insert into t5 values(12, 'sean');
- int: 默认范围是(-2147483648, 2147483647)
应用场景: id号、年龄...
create table t6(
id int
);
# int 默认宽度11---> 默认展示宽度
insert into t6 values(-2147483649);
insert into t6 values(2147483648);
insert into t6 values(100);
create table t7(
id int(3)
);
# 若插入超过设定宽度,则正常显示
insert into t7 values(123456);
# 若插入不足够4位,则以空格补全
insert into t7 values(1);
- bigint
- 浮点型:
应用场景: 工资、身高、体重...
- float (默认5位)
- double(默认16位)
- decimal(默认没有小数)
# 范围255是最大长度(包括.小数), 30代表是小数的位数
create table t8(x float(255, 30));
create table t9(x double(255, 30));
create table t10(x decimal(65, 30));
# 插入数据
# 三种浮点型: 区别在于精确度不一样
insert into t8 values(1.111111111111111111111111111111); # 精确度7位
insert into t9 values(1.1111111111111111111111111111); # 精确度15位
insert into t10 values(1.1111111111111111111111111111); # 取几位小数,精准到多少位
字符类型
char是定长字符他的特点是:
1、存储空间固定
2、长度不够时内部存储使用空格填充
3、若字段末尾存在空格,检索出来自动截断末尾的空格
4、若字段本身前段存在空格,是不会阶段的
5、当输入字符的长度超过指定长度时,char会截取超出的字符,不做存储
优点:
存取速度快
缺点:
浪费空间
varchar是可变长字符,他的特点是:
1、存储空间不固定,根据字段长度决定
2、需要额外的一个或两个字节记录字符串的长度,字符串的长度小于255字节使用1个字节,否则2个
3、最大长度65535字节(这里单位是字节不是字符)
优点:
节省空间
缺点:
相较于char存取速度慢
日期类型
data:年月日 --->2019-12-11
datetime:年月日 时分秒 --->2019-12-11 11:10:00
time:时分秒 11:10:00
year:年 2019
timestamp:时间戳 ---> 插入时间时,会自动更新
create table student(
id int,
name varchar(4),
birth date,
register datetime,
work_time year,
t_time time,
update_time timestamp
);
insert into student values(1, '张全蛋', '2019-11-11', '2019-11-11 11:11:11','2019', '11:11:11', null);
枚举与集合
枚举 enum('值1','值2') 多选一,若不选,在严格模式下会报错
集合 set('值1','值2') 多选一 多选多 set('值1, 值2')
约束条件
语法:create table 表名(
字段名1 字段类型(宽度) 约束条件,
字段名2 字段类型(宽度) 约束条件
);
1.not null --->不得为空
2.unique ---> 必须唯一
3.primary key ---> 主键
4.default ---> 设置默认值
5.auto_increment ---> 自增
6.zerofill ---> 用0填充空格
7.unsigned ---> 无符号