-
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
表锁,性能极高,支持全文本搜索。 两个存储引擎各有适用的地方,妥善选择 - 外键不能跨引擎,即两个不同存储引擎的列不能物理上相互关联。
网友评论