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限制