今日内容
1.存储引擎表类型
2.数据类型
3.完整性约束
1.存储引擎表类型
指令:
1、show engines;#查看MySQL所有的引擎,
2、show variables like "storage_engine%";查看当前正在使用的引擎
储存引擎的使用
1.创建表时指定引擎
create table innodb_t2(id int) engine=innodb;
2.在配置文件中指定默认的存储引擎
linux:vim /etc/my.cnf windows:my.ini文件 [mysqld] default-storage-engine=INNODB #配置默认引擎,现在用的mysql默认基本都是InnoDB,所以其实都可以不用配置了 innodb_file_per_table=1 #表示独立表空间存储,可以不写
3.不同引擎在创建表的时候生成文件的不同
创建四个表,分别使用innodb ,myisam ,memory ,balckhole 存储引擎,进行插入数据
#下面是使用四个不同的引擎来创建的表 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;
2.数据类型
数字类型:
整数:tinyint(极小),smallint(小),mediumint(中等), int ,bigint(大的)
tinyint[(m)] [unsigned] [zerofill] 小整数,数据类型用于保存一些范围的整数数值范围: 有符号: -128 ~ 127 无符号: 0 ~ 255 PS: MySQL中无布尔值,使用tinyint(1)构造。 int[(m)][unsigned][zerofill] 整数,数据类型用于保存一些范围的整数数值范围: 有符号: -2147483648 ~ 2147483647 无符号: 0 ~ 4294967295 bigint[(m)][unsigned][zerofill] 大整数,数据类型用于保存一些范围的整数数值范围: 有符号: -9223372036854775808 ~ 9223372036854775807 无符号: 0 ~ 18446744073709551615
小数:
float: 在位数比较短的情况下不准确
double: 在位数比较长的情况下不准确
decimal: (如果用小数,推荐使用decimal)
精准 内部原理是以字符串形式去存
字符串类型:
char(10) : 定长,简单粗暴,浪费空间,存储速度快
字符长度范围 : 0-255(一个中文是一个字符,是utf8编码的三个字节)
比如: root 存储为root000000
varchar(10) : 变长,精准,节省空间,存储速度慢
字符长度范围: 0-65535
注: varchar数据会储存真实的数据,例如' ab ',前后的空格也是会被储存起来
sql优化 : 创建表时,定长的类型往前放(比如性别),变长的往后放(比如地址或者描述信息)
时间类型:
类型:date ,time ,datetime ,imestamp,year
最常用的 : datatime (年月日 时分秒)
枚举类型和集合类型 :(简单的数枚举类型是单选,集合类型是多选)
枚举类型 (enum)
create table t1( name varchar(10), size enum('x_small','small','mediun') ); size 结果为从三个中选择一个
集合类型(set或myset)
create table myset (col set('a', 'b', 'c', 'd')); insert into myset (col) values ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
3.约束
作用: 保证数据的完整性和一致性
约束条件的分类
primary key (PK) 标识该字段为该表的主键,可以唯一的标识记录 foreign key (FK) 标识该字段为该表的外键(一对一,一对多,多对多) not null 标识该字段不能为空
null 标识该字段可以为空 unique key (UK) 标识该字段的值是唯一的 auto_increment 标识该字段的值自动增长(整数类型,而且为主键) default 为该字段设置默认值 unsigned 无符号 zreofill 使用0填充