面试-MySQL(一)

2015-07-24 06:01:50 · 作者: · 浏览: 13

?

1 事务的特性

?

事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这四个特性也简称ACID性。

(1)原子性:事务是应用中最小的执行单位,就如原子是自然界最小颗粒,具有不可再分的特征一样。事务是应用中不可再分的最小逻辑执行体。

(2)一致性:事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态。当数据库中只包含事务成功提交的结果时,数据库处于一致性状态。一致性是通过原子性来保证的。

(3)隔离性:各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务,都是隔离的。也就是说:并发执行的事务之间不能看到对方的中间状态,并发执行的事务之间不能相互影响。

(4)持久性:指事务一旦提交,对数据所做的任何改变,都要记录到永久存储器中,通常是保存进物理数据库。

2 MySQL存储引擎

?

特点

Myisam

BDB

Memory

InnoDB

Archive

存储限制

没有

没有

64TB

没有

事务安全

?

支持

?

支持

?

锁机制

表锁

页锁

表锁

行锁

行锁

B树索引

支持

支持

支持

支持

?

哈希索引

? ?

支持

支持

?

全文索引

支持

? ? ? ?

集群索引

? ? ?

支持

?

数据缓存

? ?

支持

支持

?

索引缓存

支持

?

支持

支持

?

数据可压缩

支持

? ? ?

支持

空间使用

N/A

非常低

内存使用

中等

批量插入的速度

非常高

支持外键

? ? ?

支持

?


Myisam:每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是.frm(存储表定义)、.MYD(MYData,存储数据)、.MYI(MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。最常使用的2种存储引擎:

?

InnoDB:是Mysql的默认存储引擎。当create创建新表时,未指定新表的存储引擎时,默认使用InnoDB。存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

3 选择合适的MySQL存储引擎

选择标准:根据应用特点选择合适的存储引擎,对于复杂的应用系统可以根据实际情况选择多种存储引擎进行组合。下面是常用存储引擎的适用环境:

MyISAM:在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。

InnoDB:默认的MySQL插件式存储引擎,用于事务处理应用程序,具有众多特性,包括ACID事务支持。

Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。

Merge:允许MySQLDBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。

4 MySQL特点

与其他数据库Oracle、DB2、SQL Server等相比功能稍弱一些

1、可以处理拥有上千万条记录的大型数据;

2、支持常见的SQL语句规范 ;

3、可移植行高,安装简单小巧 ;

4、良好的运行效率,有丰富信息的网络支持;

5、调试、管理,优化简单(相对其他大型数据库)。

5 MySQL支持的数据类型

数值型:

\

?

日期时间类型:

\

?

字符串类型:

\

?

空间数据类型:

\

?

6 MySQL内置函数

数学函数

BIN(x):返回x的二进制(OCT返回八进制,HEX返回十六进制)

FLOOR(x):返回小于x的最大整数值

ROUND(x,y):返回参数x的四舍五入的有y位小数的值

LOG(x,y):返回x的以y为底的对数

MOD(x,y):返回x/y的模(余数)

聚合函数:

COUNT(col):返回指定列中非NULL值的个数

MIN(col):返回指定列的最小值

MAX(col):返回指定列的最大值

SUM(col):返回指定列的所有值之和

字符串函数:

LENGTH(s):返回字符串str中的字符数

CONCAT(s1,s2...,sn):将s1,s2...,sn连接成字符串

TRIM(str):去除字符串首部和尾部的所有空格

LEFT(str,x):返回字符串str中最左边的x个字符

RIGHT(str,x):返回字符串str中最右边的x个字符

日期时间函数:

NOW():返回当前的日期和时间

WEEK(date):返回日期date为一年中第几周(0~53)

YEAR(date):返回日期date的年份(1000~9999)

DAYOFWEEK(date):返回date所代表的一星期中的第几天(1~7)

DAYOFMONTH(date):返回date是一个月的第几天(1~31)

DAYOFYEAR(date):返回date是一年的第几天(1~366)

加密函数:

MD5():计算字符串str的MD5校验和

ENCRYPT(str,salt):使用UNIXcrypt()函数,用关键词salt(一个可以惟一确定口令的字符串,就像钥匙一样)加密字符串str

控制流函数:MySQL有4个函数是用来进行条件操作的,这些函数可以实现SQL的条件逻辑,允许开发者将一些应用程序业务逻辑转换到数据库后台。

SELECT CASE 'green'

WHEN 'red' THEN 'stop'

WHEN 'green' THEN 'go' END;

格式化函数:

DATE_FORMAT(date,fmt):依照字符串fmt格式化日期date值

TIME_FORMAT(time,fmt):依照字符串fmt格式化时间time值

类型转化函数:

为了进行数据类型转化,MySQL提供了CAST()函数,它可以把一个值转化为指定的数据类型。类型有:BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED

示例:

SELECT CAST(NOW() AS SIGNED INTEGER), CURDATE()+0;

SELECT 'f'=BINARY 'F', 'f'=CAST('F' AS BINARY);

系统信息函数:

CONNECTION_ID():返回当前客户的连接ID

VERSION():返回MySQL服务器的版本

USER()或SYSTEM_USER():返回当前登陆用户名

FOUND_ROWS():返回最后一个SELECT查询进行检索的总行数

http://bxbx258.blog.51cto.com/339450/106008

7 MySQL解决乱码问题

在数据库安的时候指定字符集,如果在安完了以后可以更改以下文件:C:\ProgramFiles\MySQL\MySQL Server 5.0\my.ini 里的所有的 default-character-set=gbk C:\Program Files\MySQL\MySQL Server 5.0\data\depot_development\db.optdefault-character-set