帮助的使用
按照层次看帮助
如果不知道帮助提供什么,可以一层一层往下看:1
2MySQL> ? content
# 在列出的分类中继续使用 ? (内容) 查看对应的帮助
快速查阅帮助
需要快速查阅某项语法时,用关键字进行快速查询. 也是使用 ?
### 表类型(存储引擎)的选择
mysql的存储引擎包括:MyISAM、 InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、
ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引
擎都是非事务安全表.
Myisam mysql默认存储引擎,当create创建新表时,未指定新表存储引擎时,默认使用Myisam.
每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是 .frm(存储表定义)、.MYD (MYData,存储数据)、.MYI (MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。是在web,数据仓储和其他应用环境下最常用的存储引擎之一
InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比 Myisam的存储引擎,InnoDB 写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。用于事务处理应用程序,具有众多特性,包括ACID 事务支持
字符集
概述
字符集是一套符号和编码的规则,不论在Oracle 还是MySQL,都存在字符集的选择问题,后期字符集的更换是比较高的操作,页存在风险,所以在应用开始阶段,就按照需求选择合适的字符集,避免后期不必要的调整.
MySQL支持的字符集
可以用show character set命令查看所有MySQL支持的字符集,
MySQL的字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念,字符集是用来定义MySQL存储字符串的方式,校对规则是定义了比较字符串的方式,字符集和校对规则是一对多的关系.每个字符集至少一个校对规则,可以用show COLLATION LIKE 'utf8%';命令查看相关字符集的校对规则.
字符集的设置
mysql 的字符集和校对规则有 4 个级别的默认设置:服务器级、数据库级、表级和字段级。分别在不同的地方设置,作用也不相同。
索引的设计与使用
概述
索引可以理解为就是数据库的目录,目的是为了让数据库更快的找回返回的数据.
对相关列使用索引是提高SELECT操作性能的最佳途径.存储引擎支持每个表至少16个索引,总索引长度至少256字节,大多数存储引擎有更高的限制.
设计引擎的原则
1: 最适合索引的列是出现在where子句中的列,或连接子句中指定的列,而不是出现在select关键字后的选择列表中的列.
2: 使用唯一索引,考虑某列中值的分布,对于唯一值的列,效果最好,多个重复值的列,效果最差.(例如,年龄的就很容易区分,但是性别的就没什么用)
3: 使用短索引,如果有一个char(200)列, 如果在前10个或20个字符内,多数值是唯一的,就不要对整个列进行索引.对前10个字符索引能够节省大量索引空间,也可能查询更快
4: 最左前缀:顾名思义,就是最左优先,比如我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。这样一个多列索引可以起几个索引的作用,因为可以利用索引中最左边的列集来匹配行.
5: 不要过度索引 索引并不是越多越好,每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能.
6: 考虑在列上进行的比较类型,索引可用于< <= = > >= between 运算,在模式具有一个直接量前缀时,索引也用于 LIKE 运算。如果只将某个列用于其他类型的运算时(如 STRCMP( )),对其进行索引没有价值。
btree索引和hash索引
hsah索引把数据的索引以hash形式组织起来,因此当查找某一条记录的时候,速度非常快。当时因为是hash结构,每个键只对应一个值,而且是散列的方式分布。所以他并不支持范围查找和排序等功能。
B+tree是mysql使用最频繁的一个索引数据结构,是Inodb和Myisam存储引擎模式的索引类型。相对Hash索引,B+树在查找单条记录的速度比不上Hash索引,但是因为更适合排序等操作,所以他更受用户的欢迎。毕竟不可能只对数据库进行单条记录的操作.
锁机制和事务控制1
2
3
4# 加锁
LOCK TABLES
# 解锁
UNLOCK TABLES
InnoDB提供行级锁,支持共享锁和排他锁两种锁定模式,以及四种不同的隔离级别.
事务控制
在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作。
事务控制语句:start transaction 或 begin ; 显式的开启一个事务
commit ,提交事务,
rollback 回滚会结束用户的事务,并撤销正在进行的所有未提交的修改.
chain 定义事务提交后的操作,会立即启动一个新的事务
release 定义事务回滚之后的操作,release 会断开和客户端的连接.
set autocommit =0 禁止自动提交事务 =1 开启自动提交事务
在事务中可以通过定义savepoint,指定回滚事务的一个部分,但是不能指定提交事务的一个部分。对于复杂的应用,可以定义多个不同的savepoint,满足不同的条件时,回滚不同的 savepoint。需要注意的是, 如果定义了 相同名字的 savepoint ,则后面定义的savepoint会覆盖之前的定义。对于不再需要使用的savepoint,可以通过release savepoint命令删除savepoint,删除后的savepoint,不能再执行rollback to savepoint命令。
常用SQL技巧
检索包含最大/最小值的行(使用max min 函数 找不到返回NULL)1Select Student_name ,MIN(test_score),MAX(test_score) from Student group by student_name;
提取随机行1
2# 随机顺序检索数据行
select * from name order by rand();
order by rand() 和limit 结合可以从一组列中选择随机样本1SELECT * from table1,table2 where a=b and c