MySQL 必知必会知识点
2018-03-23 本文已影响32人
HikariCP
-
and优于or先执行 -
SELECT username as uname,age FROM可以从一开始指定检索结果的别名设置。这样适合该查询为主查询时设置别名使用。- 也可以像这样
SELECT username FROM user WHERE username = 'JIYONGGUANG' AS name;在最后指定检索结果的别名。这样是将该查询作为子查询,并将检索出的该列作为主查询的条件使用(该条件已赋,只是作为联合查询进行数据展现)。如:
SELECT cust_name, cust_state, (SELECT COUNT(*) FROM orders WHERE cust_id = cust_id) AS orders FROM customers ORDER BY cust_name - 也可以像这样
- 使用通配符的时候,如果
where条件后跟的检索条件是%YongGuang。即以%开头的字符串。那么检索效率会很低 - 多表查询尽量把条件至于子查询检索出
- 写SQL前先分析,写出步骤,然后依次实现,再整理
-
<>不等于 - MySQL中默认不区分大小写。即
A与a相同。但是这个规则可以进行修改 - MySQL会重用回收存储空间。如果一张表中的连续记录在物理地址上也是连续存储的,那么当数据进行删除操作后。那么其物理空间会被回收
- 多表查询时,连表时用连接条件
Inner Join比WHERE有时性能更好 -
ORDER BY中进行数据排序时,DESC,ASC排序规则作用在其紧跟着的前面那列。SELECT username,age FROM user ORDER BY id DESC,age如此, 作用在id。 - 条件顺序书写顺序:
WHERE -> INNER JOIN -> GROUP BY -> HAVING -> ORDER BY -> LIMIT OFFSET - SQL示例:
SELECT DISTINCT
< select_list >
FROM
< left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
< where_condition >
GROUP BY
< group_by_list >
HAVING
< having_condition >
ORDER BY
< order_by_condition >
LIMIT < limit_number >
执行顺序:
FROM <left_table>
ON <join_condition>
<join_type> JOIN <right_table>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
SELECT
DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT <limit_number>
从哪些表获取数据,这些表中数据通过哪个字段对应,检索什么样的数据,如何进行分组,过滤组,选择排重数据,然后再进行排序限制取几条。
-
BETWEEEN AND改写为>= 、<=之类的。 -
in转换多个or。字段为索引时,两个都能用到索引,or效率相对in好一点 - 常量传递。
a=b and b=2转换为a=2 and b=2尽量不使用变量a=b或a=@var -
MySQL处理定长远快于变长列 -
CHAR定长列,创建时不指定默认1。 - 除
BIT,BOOLEAN默认所有数值数据类型均有符号,明确字段不存储负值,UNSIGNED可以增大取值范围为原来的2倍。如1个字节的byte取值为-128 - 127那么当该字段设置为UNSIGNED的时候取值范围就成了0-254 - 存储货币数据类型
DECIMAL,因为Java中的float,double类型在进行浮点数运算的时候会出现精度丢失的问题。 - 每个表只能有一个
AUTO_INCREMENT字段,并且必须被索引。 - 如果一个列被指定为
AUTO_INCREMENT。那么只要你手动进行INSERT操作的时候。指定了这个字段。那么之后所有插入的值都是在该值得基础上进行递增。 -
last_insert_id()此方法返回最后一个插入的数据的AUTO_INCREMENT字段的值 -
InnoDB事物,外键,行锁MYISAM表锁,性能极高,支持全文本搜索。 两个存储引擎各有适用的地方,妥善选择 - 外键不能跨引擎,即两个不同存储引擎的列不能物理上相互关联。