问题1、char 与varchar的区别?
varchar是变长而char的长度是固定的。如果你的内容是固定的大小,char性能更好。
char[4] 与varchar[4] 存储字母a a占一个字符 varchar长度为4但是占此时为一个字符长度 而char则占4个字符
问题2、truncate 和delete 区别是什么?
delete 命令是从表中删除一行或者多行,truncate是从表中永远的删除每一行,truncate是将整个表删除后重新创建当前表结构
问题3、什么是触发器、mysql中都有哪些触发器。
触发器是一行代码 ,当触发了某个事件的时候自动触发的这一段代码。
mysql中有6中触发器
1)before insert
2) after insert
3) before update
4) after update
5)before delete
6)after delete
问题4、float 和double区别
float可以存储至多8位十进制数,并且内存占4字节
double 至多可以18位十进制数,并且内存占8字节
问题5、mysql获取当前日期的函数
select current_date();
问题6、now() 与sysdate()区别
select now() 执行语句前就获取时间 select sysdate() 在执行过程中获取时间
问题7、如何查找第n高的工资
select distin(salary) from employee order by salary desc limit n-1,1
问题8、请写出下面mysql数据类型表达的意义int(0) char(16) varchar(16) datetime text
int表示int类型长度为0 char(16) 表示固定长度字符串 长度为16 varchar(16)表示可变长度字符串,长度为16 datetime表示时间类型 text表示字符串类型 能存储大字符串,最多存65535字节数据
1) 整数类型,包括tinyint smallint mediumint int bigint 分别1字节 2字节 3字节 4字节 8字节整数。任何整数类型都可以加上unsigned属性,表示数据类型无符号,也就是非负数
长度:整数类型可以被指定长度,比如int(11) 表示长度为11的int 类型。
2) 实数类型 包括double float decimal
decimal 可以用来存储比bigint还打的整型,能存储精确的小数
float 和double 是由取值范围的,并支持使用标准的浮点进行近似计算,计算时float 和double 相比decimal效率更高一些,decimal可以理解为用字符串进行处理
3)字符串类型 包括 varchar char text blob
varchar 用于存储长度可变的字符串,它比定长的数据类型更节省空间
varchar使用额外1或2个字节存储字符创长度,varchar 存储长度超过设置长度后会被截断
char 是定长的需要使用空格惊醒填充,适合存储短字符串,或者所有值都近似一个长度
char 存储内容超过设置长度,内容同样会被截断
使用策略:
对于经常变更的数据来说,char比varchar更好,因为char不容易产生碎片。对于非常短的列char比varchar存储空间上更有效率。
使用的时候注意分配需要的空间,更长的类排序的时候会消耗更多内存。
尽量避免使用text blob类型,查询时会使用临时表,导致严重的性能开销。
4)枚举类型,不能重复的数据存储一个预定义的集合。
有时候可以使用enum代替常用的字符串类型
enum存储非常紧凑,会把列表值严肃哦到一个或两个字节
5)日期和时间类型 尽量使用timestamp 空间效力高于datetime 用整数保存时间戳通常不方便处理 如果需要存储微秒,可以使用bigint存储
常见操作
mysql 常见的连接和关闭;mysql -u -p -h -P
-u 用户名
-p 密码
-h 主机
-P 端口
进入mysql命令后 G c q s h d
G 打印结果垂直显示
c 取消当前mysql命令
q 退出mysql连接
s 显示服务器状态
h 帮助信息
d 改变执行符
mysql 存储引擎
1 、 innoDB存储引擎
1) 默认的存储引擎,最重要最广泛的存储引擎,性能非常优秀
2)数据存储在共享空间,可以通过配置分开,也就是多个表和索引都存储在一个表空间中,可以通过配置文件改变此配置。
3)对主键查询性能高于其他存储引擎
4)内部做了很多优化,从磁盘读取数据时会自动构建hash索引,插入数据时自动构建插入缓冲区
5)通过一些机制和工具支持真正的热备份
6)支持崩溃后的安全恢复
7)支持行级锁
8)支持外键
2 MyISAM 存储引擎
- 拥有全文索引 压缩 空间函数
- 不支持事务和行级锁、不支持崩溃后的安全恢复
- 表存储在两个文件 myd 和myl
- 设计简单,获取整个表多少条数据性能很高
- 全文索引不是很常用
- 不如使用elasticsearch或luncene
3 其他引擎
Archive Blackhole csv memory
在大多数场景下建议使用innodb引擎
MySQL锁机制
共享锁和排他锁 就是读锁和写锁
共享锁,不阻塞,多用户可以同时读一个资源,互不干扰
排他锁,一个写锁会阻塞其他的读锁和写锁,这样可以只允许一个用户进行写入,防止其他用户读取正在写入的资源
锁的粒度
表锁,系统开销小,会锁定整张表 myisam使用表锁
行锁,最大程度支持并发处理,但是带来最大锁开销,innodb使用行锁
MySql 事务处理
mysql 提供事务处理表引擎,也就是innodb
服务器层不管理事务,由下层的引擎实现,所以同一个事务中,使用多种引擎是不靠谱的
需要注意,在非事务表上执行事务操作,mysql不会发出提示,也不会报错。
存储过程
为以后使用保存的一条或多条mysql语句的集合 因为可以在存储过程加上业务逻辑和流程
可以在存储过程中创建表,更新数据 删除数据等
使用策略:
可以通过把sql语句封装在容易使用的单元中,简化复杂的操作
可以保证数据的一致性
可以简化对变动的管理