Mysql
-
MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
SQL 标准定义的四个隔离级别
- read uncommited : 读到未提交数据
- read committed : 脏读,不可重复读
- repeatable read : 可重读
- serializable : 串行事物
-
Mysqol 中 ENUM 用法
ENUM 是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用。
-
char 和 varchar 的区别
char 和 varchar 类型在存储和检索方面有所不同
char 列长度固定为创建表时申明的长度,长度范围是1到255.
当char值被存储时,他们被用空格填充到特定长度,检索char值时需删除尾随空格
-
Mysql 列 字符串类型
字符串类型 | 含义 |
---|---|
set | 一个集合,字符串对象可以有零个或多个set成员 |
blob | 存储二进制数据(通常不用) |
enum | 枚举类型,只能有一个枚举字符串值 |
char | 固定长度非二进制字符串 |
text | 小的非二进制字符串 |
varchar | 变长非二进制字符串 |
BLOB 和 TEXT 类型之间的唯一区别在于对 BLOB 值进行排序和比较时区分大小写,对 TEXT 值不区分大小写。
- Mysql 中使用什么存储引擎
存储引擎称为表类型,数据使用各种技术存储在文件中
技术涉及
- storage mechanism
- locking levels
- indexing
- Capabilities and functions.
-
TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 数据类型上做什么
创建表时 TIMESTAMP 列用 Zero 更新。只要表中的其他字段发生更改, UPDATECURRENT_TIMESTAMP 修饰符就将时间戳字段更新为当前时间。
-
主键 候选键 区别
表格的每一行都由主键唯一标识,一个表只有一个主键。
主键也是后选键。按照惯例,候选键可以被指定为主键,并且可以用于任何外键引用。
-
Mysql 数据库服务器性能分析的方法
show status 一些值得监控的变量值
-
Like 和 Regexp 操作区别
Like 和 Regexp运算符用于表示 ^ 和 %
- 正则匹配也不走索引
- 查询分析的时候,只要看到REGEXP或者函数之类,数据库一律认为无法索引
- 数据库的三范式
- 1NF: 数据库表的每一个字段都是不可分割的
- 2NF: 数据库表中的非主属性只依赖于主键
- 3NF:不存在非主属性对关键字的传递函数依赖关系
- Mysql 触发器
- BEFORE INSERT
- AFTER INSERT
- BEFORE UPDATE
- AFTER UPDATE
- BEFORE DELETE AND
- AFTER DELETE
- 通用SQL函数
- 数学函数
- Abs 求绝对值
- floor 向下取整
- ceil 向上取整
- 字符串函数
- insert(s1,index,length,s2)替换函数
- upper( str), ucase( str)将字母改为大写
- lower( str), lcase( str)将字母改为小写
- left( str, length)返回 str 字符串的前 length 个字符
- right( str, length)返回 str 字符串的后 length 个字符
- substring( str, index, length)返回 str 字符串从 index 位开始长度为length 个字符( index 从 1 开始)
- reverse( str)将 str 字符串倒序输出
- 日期函数
- curdate()、 current_date( ) 获取当前日期
- curtime()、 current_time( ) 获取当前日期
- now()获取当前日期和时间
- datediff( d1、 d2) d1 和 d2 之间的天数差
- adddate( date, num)返回 date 日期开始,之后 num 天的日期
- subdate( date, num)返回 date 日期开始,之前 num 天的日期
- 聚合函数
- count
- sum
- avg
- max,min
- Mysql 中有哪几种锁
MyISAM 支持表锁,InnoDB 支持表锁和行锁,默认为行锁。
表级锁:
优点:开销小,加锁快,不会出现死锁。
缺点:锁定粒度大,发生锁冲突的概率最高,并发量最低
行锁:
优点:锁力度小,发生锁冲突的概率小,并发度最高
缺点:开销大,加锁慢,会出现死锁。
- Mysql 数据优化
- 优化数据类型
- 小心字符集转换
- 优化 count(col) 和 count(*)
- 优化子查询
- 优化 UNION
- truncate delete drop 的区别。
- drop(DDL 语句): 是不可逆操作,会将表所占用空间全部释放掉;
- truncate(DDL 语句): 只针对于删除表的操作,在删除过程中不会激活与表有关的删除触发器并且不会把删除记录放在日志中;当表被 truncate 后,这个表和索引会恢复到初始大小;
- delete(DML 语句): 可以删除表也可以删除行,但是删除记录会被计入日志保存,而且表空间大小不会恢复到来;
执行速度: drop>truncate>delete
16.Mysql 存储引擎
存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MyISAM:这种引擎是 mysql 最早提供的。这种引擎又可以分为静态MyISAM、动态 MyISAM 和压缩 MyISAM 三种:
- 静态 MyISAM:如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。因为数据表中每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。当数据受损时,恢复工作也比较容易做。
- 动态 MyISAM:如果数据表中出现 varchar、 text 或 BLOB 字段时,服务器将自动选择这种表类型。相对于静态 MyISAM,这种表存储空间比较小,但由于每条记录的长度不一,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进而导致执行效率下降。同时,内存中也可能会出现很多碎片。因此,这种类型的表要经常用optimize table 命令或优化工具来进行碎片整理。
- 压缩 MyISAM:以上说到的两种类型的表都可以用 myisamchk 工具压缩。这种类型的表进一步减小了占用的存储,但是这种表压缩之后不能再被修改。另外,因为是压缩数据,所以这种表在读取的时候要先时行解压缩。
但是,不管是何种 MyISAM 表,目前它都不支持事务,行级锁和外键约束的功能。
- MyISAM Merge 引擎:这种类型是 MyISAM 类型的一种变种。合并表是将几个相同的 MyISAM 表合并为一个虚表。常应用于日志和数据仓库。
- InnoDB: InnoDB 表类型可以看作是对 MyISAM 的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。
- memory(heap):这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。
- archive:这种类型只支持 select 和 insert 语句,而且不支持索引。
- Desc[ribe] tablename:查看数据表的结构。
- show engines:命令可以显示当前数据库支持的存储引擎情况。