mysql数据库part2
一、时间类型(数据类型续)
date YYYY-MM-DD 年月日
time HH:MM:SS 时分秒
year YYYY 年份值
datetime YYYY-MM-DD HH:MM:SS 年月日 时分秒
select now() 获取当前时间
timestamp YYYYMMDDHHMMSS(时间戳) 自动更新时间 数据上一次的修改时间
手动修改数据:
二、约束
对要进行编辑的数据进行类型上的限制,不满足限制条件的数据不允许操作
unsigned 无符号
not null 不为空
default 设置默认值
unique 唯一约束,数据唯一不重复
primary key 主键,标记数据的唯一特性(唯一且不为空)
auto_increment 自增加1(一般配合主键使用,或unique自增)
zerofill 零填充(配合整型int使用)
foreign key 外键,把多张表通过一个关联字段关联在一起
1、unsigned
如图,只能插入正值
2、not null
如图,插入数据不能为空,否则报错
3、default
设置默认值:
如图,不指定name时自动生成默认值
4、unique
如图,当指定唯一约束时,值不能出现重复
插入null:
如图,当插入值为空时,不会出现报错,会将数据写入到表中
5、primary key
如图,指定主键后,对应字段既不能重复也不能传入空值
一个表里只能存在一个主键:
主键和唯一关联unique可同时存在:
6、auto_increment
如图,配合主键primary key使用,id自动累加
delete和truncate区别:
delete删除数据后累加的id号会保留,下次新插入数据会继续累加,truncate重制表
7、zerofill
如图,int指定zerofile长度,不足位补0
8、主键索引(PRI)、唯一索引(UNI)、普通索引(MUL)
1)联合唯一约束(字段都设置成not null + unique 显示PRI,联合在一起表达一种唯一性)
unique(字段1,字段2,字段3…) 把多个字段拼在一起表达一种唯一性:
如图,在此例中IP+端口具有联合唯一性:
联合唯一约束如果不加not null则可以设置空值
2)联合唯一索引可否与主键同时存在
如图,可同时存在
联合主键写法与联合唯一索引一样
二者区别:
前者可继续添加一个主键,后者不能再额外添加主键
主键可以是单个字段,也可以是联合主键,不能让多个单字段做主键
9、foreign key
外键所关联的其他字段必须具有唯一属性unique或primary key
语法:
foregin key(要绑定字段) references 要绑定的表(表中要绑定字段)
如果我们此时要删除class1这个班级:
如图,因为外键的存在,无法删除数据
联级删除:
on delete cascade
联级更新:
on update cascade
如图联级删除时会把所有相关数据删除
表与表之间的关系:
1)一对一
2)一对多或多对一
3)多对多
三、存储引擎
show engines 查看所有的存储引擎
表级锁:如果有人修改当前表,会直接上锁,其他用户无法进行修改,不能进行高并发
行级锁:如果有人修改这个表中的一条记录,当前这条数据会被锁定,其他数据仍然可被修改,速度快,允许高并发
事物处理:执行sql语句时,所有的操作必须成功,最终提交数据,否则数据回滚,回到刚开始没操作的状态
begin:开启事务
commit:提交数据
rollback:回滚操作
MyISAM 支持表级锁(5.6版本前默认存储引擎)
InnoDB 事务处理、行级锁、外键(5.6版本后默认存储引擎)
MEMORY 把数据放在内存中,做一个临时缓存
BLACKHOLE 黑洞,产生binlog日志,不生产真实数据
用来同步主从数据库中的数据,场景发生在多服务集群中
MyISAM:
InnoDB:
MEMORY:
从目录中找不到数据文件,因为存在了内存中
BLACKHOLE:
如图,不存储任何值