mysql中有几种锁
- 行锁(Record Locks)
- 间隙锁(Gap Locks)
- 临键锁(Next-key Locks)
- 共享锁/排他锁(Shared and Exclusive Locks)
- 意向共享锁/意向排他锁(Intention Shared and Exclusive Locks)
- 插入意向锁(Insert Intention Locks)
- 自增锁(Auto-inc Locks)
实际上,MySQL官网中还提到了一种预测锁,这种锁主要用于存储了空间数据的空间索引,select ... for update虽然可以用于解决数据库的并发操作,但在实际项目中却不建议使用,原因是当查询条件对应的记录不存在时,很容易造成死锁。而造成死锁的原因和MySQL的锁机制有关。
MyISAM和InnoDB的区别
| MyISAM | InnoDB |
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 大 |
MyISAM:节约空间速度快
InnoDB:安全性高,事务的处理,多表多用户操作
InnoDB支持的四种事务隔离级别的别称,以及逐级之间有什么区别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
未提交读(read unconmmitted) | 可能 | 可能 | 可能 |
已提交读(read conmmitted) | 不可能 | 可能 | 可能 |
可重复读(repeatable read) | 不可能 | 不可能 | 可能 |
可串行化(serializable ) | 不可能 | 不可能 | 不可能 |
char和varchar区别
char的长度是不可变的,而varchar的长度是可变的,
char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;
取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,
char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,
如果一个表中有一列定义为TIMESTAMP,将会发生什么
首先先了解timetamp的用法和作用:
相当于数据库的计数器(记录着数据行的插入、更新行为)。
SQL Server全文索引时用以增量填充
timestamp类型的列会自动记下当前计数器的值,避免更新时发生冲突。
数据库优化。
每当行被更改时,时间戳字段将获取当前时间戳
怎么看到为表格定义的所有索引
SHOW INDEX FROM
LIKE声明中%和_什么意思
%对应于0个或更多字符,_只是LIKE语句中的一个字符。
MYISAM表格将在哪里存储,并且还提供其存储格式
每个MyISAM表格以三种格式存储在磁盘上:·“.frm”文件存储表定义
·数据文件具有“.MYD”(MYData)扩展名
索引文件具有“.MYI”(MYIndex)扩展名
如何优化DISTINCT
distinct
一般是用来去除查询结果中的重复记录的,
select distinct 字段名 from 表明
order by通过索引扫描生成有序的结果
DISTINCT在所有列上转换为GROUP BY,并与ORDER BY子句结合使用。
可以使用多少列创建索引
最多16列
什么是非标准字符串类型
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
MySQL有关权限的表有哪几个
权限表放在sql数据库里,由mysql_install_db脚本初始化,这些权限表分别user,db,table_priv,columns_priv和host
锁的优化策略
读写分离
分段加锁
减少锁持有时间
多个线程尽量以相同的顺序获取资源
索引的底层实现及优化
B+树 ,经过优化的B+树
主要是在所有的叶子节点中增加了指向下一个叶子节点的指针,因此InnoDB建议大部分表使用默认自增主键作为索引
什么情况下设置了索引却无法使用
以%开头的LIKE语句,模糊匹配
OR语句前后没有同时使用索引
数据类型出现隐式转换
SQL注入漏洞产生的原因和预防
原因:开发过程不注意书写规范sql和对特殊字符的过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行
预防:
开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置
执行sql语句时使用addslashes进行sql转换
sql语句书写尽量不要省略单双引号
过滤掉一些关键词:update insert delete select
提高数据库表和字段的命名技巧
什么是基本表什么是试图
基本表是本身独立存在的表,一个关系对应一个表。
视图是从一个或多个表中导出来的表,是一个虚表,不独立存在数据库中
视图的优点:
能够简化用户操作
使用户能以多种角度看待同一数据
为数据库提供了一定程度的逻辑独立性
能够对机密数据提供安全保护
用什么来确保表格里的字段只接受特定范围的值
check限制