数据库引擎
决定数据存取数据的方式
show engines : 查看引擎 innodb(默认引擎):支持事务,行级锁,外键 myisam:查询效率由于innodb,不需要支持事务,行级锁,外键,可以选用myisam来优化数据库 mysql> create table t1(id int)engine=innodb; mysql> create table t2(id int)engine=myisam; mysql> create table t3(id int)engine=blackhole; mysql> create table t4(id int)engine=memory; create table t1(name char,id int) engine=innodb insert into t1 values(1)
创建表的完整语法
create table 表名 (字段名 类型[(宽度)约束条件 ])engine=innodb charset="utf8";
数据库的模式
show variables like "%sql_mode%" 查看当前数据库模式,% 代表模糊查找 set global sql_mode="strict_trans_tables"; 设置数据库模式 no_engine_substitution:非安全性,默认 strict_trans_tables:安全模式(严格模式)
数据库的常用类型
规定数据存放的哪些数据
整形 浮点型 字符型 时间类型 枚举类型 集合类型
(1)整形: 不同类型所占字节数不一样,决定所占空间及存放数据大小限制
tinyint:1字节 -128 到 127 smallint:2字节 mediumint:3字节 int:4字节 bigint:8字节
宽度:
1.不能决定整形存放数据的宽度,超过宽度可以存放,最终由数据类型所占字节决定
2.如果没有超过宽度,且有zerofill限制,会用0填充前置位的不足为
3.没有必要规定整形的宽度,默认设置的宽度就为最大宽度
(2)浮点型:
float:4字节 精度最低,最常用 double:8字节 精度高,占位多 decimal:M,D大值基础上+2 字符串存,全精度
宽度:
decimal( a,b )
a为位数,b为小数位
(3)字符型:
char:定长 一定按规定存放数据,以规定宽度读取数据 varchar:不定长 首先根据数据长度计算宽度,并在数据开始以数据头 1到2字节 计算数据长度 保存起来,计算耗时
宽度:
char(4):以四个字符长度存储,超出报错浪费,以空间换取时间效率,
varchar(4):数据长度决定字符长度,但也不能超出长度,节省空间
总结:数据长度相近的数据提倡用char来存取数据,数据需要高速存取,异空间换时间
(4)时间类型:
year:年 yyyy(1901/2155) date:年-月-日 yyyy-MM-dd time:时分秒 HH:mm:ss datetime:年月日时分秒 yyyy-MM-dd HH-mm-ss 可以为空,不依赖时区 timestamp:年月日时分秒 yyyy-MM-dd HH-mm-ss 不能为空,默认位当前时间,依赖时区
(5)枚举与集合:
枚举 enum:单选 集合 set:多选 create table t1 ( sex enum('male',"female","wasai") not null default "wasai"", #枚举 hobbies set("play","read","music") #集合 ); insert into t1(sex,hobbit) values("male","play,read");
约束条件
限制存取数据的规则
主键:表默认都有主键 (id字段)
primary key:主键(不为空,唯一性) 单例主键: create table t1(id int primary key) 联合主键: create table t1(ip char(16),port int,primary key(ip,port))
唯一性:表默认都有主键 (id字段)
unique key: 唯一性约束,联合唯一 单列唯一(单个字段不能重复) create table t1(id int unique) 联合唯一(指联合的字段不能同时重复) create table t1( ip char(16), port int, unique(ip,port) )
自增:跟键一起连用
auto_increment:自增,只能跟key字段连用 create table t1(id int primary key auto_increment )
其他约束条件
not null:不能为空 default:默认值 unsigned : 无符号 zerofill : 0填充
创建表的完整语法