mysql数据库基础考点
char和 varchar的区别
innodb myisam的区别
请写出下面 mysql数据类型表达的意义
int(0) 宽度为0的整型
char(16)定长字符串 长度为16位
varchar(16) 可变字符串 长度16位
datetime 时间日期
text 字符串 大文本数据
mysql的数据类型
整数类型
tinyint
smallint
mediumint
int
bigint
属性 unsigned 非负
长度:可以为整数类型只能宽度 例如 int(11),对大多数应用是没有意义的,它不会限制值的合法范围,只会影响显示字符的个数
12
zrofill 0填充不指定不填充
int(3) 012
int(5) 00012
可以存入 1234
实数类型
float double decimal
decimal可存储比 bigint还大的整数,可以用于存储精确的小数
float和 double类型 支持使用标准的浮点进行近似计算
字符串类型
varchar
用于存储可变长字符串,它比订场类型更接受省空间
使用1或者两个额外字节记录字符串的长度,列长度小于255字节 使用一个字节表示,否则用2个
如果存储内容超出指定长度,会被截断 有的版本会报错
可变只会往小了缩不会往大了扩
char
定长的,根据定义的字符串长度分配足够的弓箭
会根据需要采用空格进行填充以后方便比较
适合存储很短的字符串,或者所有值都接近同一个长度 如加密后的密码
长度,超出设定长度会被截断
区别 注意
对于经常变更的数据,char比varchar更好,char不容易产生碎片
对于非常短的列,char比varchar在存储空间上更有效率
只分配真正需要的空间,更长的列会消耗更多的内存
尽量避免使用 blob/text类型,查询会使用临时表,导致严重的性能开销
text
blob
枚举
有时可以使用枚举代替常用的字符串类型
把不重复的集合存储成一个预定义的集合
非常紧凑,把列表值压缩到一个或两个字节
内部存储的是整数
尽量避免使用数字作为ENUM枚举的常量,易混乱
排序是按照表内部存储的整数进行排序
枚举表会使表大小大大减小
日期和时间类型
尽量使用 timestamp,比datetime空间效率高
用整数保存时间戳的格式通常不方便处理
如果需要存储微秒,可以使用bigint存储
列属性
auto_inicrement
default
not null
zerofill
mysql的基础操作
mysql的链接和关闭
mysql
-u 用户名
-p 密码
-h 主机
-P 端口
其他
\G 把打印结果垂直显示
\c 取消当前mysql命令
\q 退出 mysql
\s myslq服务器状态
\h 帮助信息
\d 改变执行服务
mysql数据表引擎
innodb 默认的事务性 引擎 最重要最广泛的存储引擎 ,性能非常优秀
数据存储在共享表空间 可以通过配置分开
对主键查询的性能高于其他类型的数据引擎
内部做了很多优化,从磁盘读取数据时自动在内存构建hash索引,插入数据时自动构建插入缓冲区
通过一些机制和工具支持真正的热备份
支持崩溃后的安全恢复
支持行级锁
支持外键
myIsam
5.1版本前 是默认的存储引擎
拥有全文索引 压缩 和空间函数
不支持事务 和行级锁,不支持崩溃后的安全回复
设计简单,某些场景下性能很好
表存储在两个文件 myd myi
其他存储引擎
archive blackhole csv memory
优先选择 innodb
mysql的锁机制
当多个查询同一时刻进行数据修改时,就会产生并发控制的问题
共享锁 和排它锁 其实就是读锁和写锁
读锁
共享的,不堵塞,多个用户可以同时读一个资源,互不干扰
写锁
排它的,一个写锁会阻塞其他的写锁和读锁,这样可以只允许一个人进行写入,防止其他用户读取正在写入的资源
锁粒度
表锁,系统性能开销最小,会锁定整张表,myIsam使用表锁,
行锁,最大程度的支持并发处理,但是也带来了最大的锁开销,innodb实现行级锁
mysql事务处理 存储过程 触发器
事务处理
mysql提供事务处理的表引擎,innodb
服务器不管理事务,由下层的引擎实现,所以同一个事务中,使用多种存储引擎不靠谱
在非事务的表上执行事务操作mysql不会发出提醒也不会报错
存储过程
为以后的使用而保存的一条或者多条mysql语句的集合
存储过程就是有业务逻辑和流程的集合
可以在存储过程中创建表,更新数据,删除等等
场景
通过把处理封装在容易使用的单元中,简化复杂的操作
保证对数据的一致性
简化对变动的管理
触发器
提供给程序员和数据分析 员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程
使用场景
可通过数据库中相关表实现级联更改
实时监控某张表中的某个字段的更改而需要作出相应的处理
某些业务编号的生成等
滥用会造成数据库及应用程序的维护困难
网友评论