mysql sql语句注意事项

  • 更新的表不能在 set 和 where 中用于子查询
  • update 后面可以做任意的查询
  • 关闭 MySQL 的事务自动提交
    START TRANSACTION
    DML....
    COMMIT|ROLLBACK
  • SELECT 语句中的算术表达式
  • :加法运算
  • :减法运算
  • :乘法运算
    / :除法运算,返回商
    % :求余运算,返回余数
  • 包含空值的算术表达式计算结果为空。
  • MySQL 中并不支持||作为连字符,需要使用 concat 函数。在参数数量上与 oracle 的 concat函数有区别。
  • 使用 DISTINCT 关键字时需要注意以下几点:
  1. DISTINCT 关键字只能在 SELECT 语句中使用。
  2. 在对一个或多个字段去重时,DISTINCT 关键字必须在所有字段的最前面。
  3. 如果 DISTINCT 关键字后有多个字段,则会对多个字段进行组合去重,也就是说,只有多个字段组合起来完全是一样的情况下才会被去重。
  • like
    %表示任意多个任意字符
    _表示一个任意字符
  • 左右拼接
    LPAD(str,len,padstr)/RPAD(str,len,padstr)
    str --- 待拼接的字符串
    len ---拼接后的长度
    padstr --- 拼接的字符串
  • REPLACE(str,from_str,to_str)
    将 str 中的 from_str 替换为 to_str(会替换掉所有符合from_str 的字符串)
  • 数字函数
    ROUND(arg1,arg2):四舍五入指定小数的值
    ROUND(arg1):四舍五入保留整数。
    TRUNCATE(5.365,2) 截断指定小数的值,不做四舍五入处理。
    MOD(arg1,arg2):取余 MOD(5,2) --- 1
  • 转换函数
    DATE_FORMAT(date,format)
    将日期转换成字符串(类似 oracle 中的 to_char())
    STR_TO_DATE(str,format)
    将字符串转换成日期(类似 oracle 中的 to_date())
  • 通用函数
    IFNULL(expr1,expr2)
    判断 expr1 是否为 null,如果为 null,则用 expr2 来代替 null
    (类似 oracle 的 NVL()函数)
    NULLIF(expr1,expr2)
    判断 expr1 和 expr2 是否相等,如果相等则返回 null,如果不
    相等则返回 expr1
    IF(expr1,expr2,expr3)
    判断 expr1 是否为真(是否不为 null),如果为真,则使用 expr2
    替代 expr1;如果为假,则使用 expr3 替代 expr1(类似 oracle 的 NVL2()函数)
    COALESCE(value,...)
    判断 value 的值是否为 null,如果不为 null,则返回 value;如
    果为 null,则判断下一个 value 是否为 null……直至出现不为 null 的 value 并返回或者返回最
    后一个为 null 的 value
    CASE WHEN THEN ELSE END
    条件函数
  • 聚合函数
  1. AVG(arg)函数
    对分组数据做平均值运算。
    arg:参数类型只能是数字类型。

2.SUM(arg)函数
对分组数据求和。
arg:参数类型只能是数字类型。

3.MIN(arg)函数
求分组中最小数据。
arg:参数类型可以是字符、数字、日期。

  1. MAX(arg)函数
    求分组中最大数据。
    arg:参数类型可以是字符、数字、日期。

  2. COUNT 函数
    返回一个表中的行数。
    COUNT 函数有三种格式:
    • COUNT(*)
    • COUNT(expr)
    • COUNT(DISTINCT expr)

  • 约束分组结果(HAVING) 只能用在 数据组 的sql中

  • 子查询
    可以将子查询放在许多的 SQL 子句中,包括:
    • WHERE 子句
    • HAVING 子句
    • FROM 子句

使用子查询的原则
• 子查询放在圆括号中。
• 将子查询放在比较条件的右边。
• 在单行子查询中用单行运算符,在多行子查询中用多行运算符。

  • MySQL 中的正则表达式
    • MySQL 中允许使用正则表达式定义字符串的搜索条件,性能要高于 like。
    • MySQL 中的正则表达式可以对整数类型或者字符类型检索。
    • 使用 REGEXP 关键字表示正则匹配。
    • 默认忽略大小写,如果要区分大小写,使用 BINARY 关键字
  • 索引
  1. 普通索引
    是最基本的索引,它没有任何限制。
    在创建索引时,可以指定索引长度。length 为可选参数,表示索引的长度,只有字符串
    类型的字段才能指定索引长度,如果是 BLOB 和 TEXT 类型,必须指定 length。
    创建索引时需要注意:
    如果指定单列索引长度,length 必须小于这个字段所允许的最大字符个数。

  2. 唯一索引
    唯一索引与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。

  3. 主键索引
    主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引。

  4. 组合索引
    组合索引是指使用多个字段创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用(最左前缀原则)。

最左前缀原则
就是最左优先。
如:我们使用表中的 name,address,salary 创建组合索引,那么想要组合索引生效,
我们只能使用如下组合:
name/address/salary
name/address
name/
如果使用 addrees/salary 或者是 salary 则索引不会生效。

  1. 全文索引
    全文索引(FULLTEXT INDEX)主要用来查找文本中的关键字,而不是直接与索引中的值
    相比较。FULLTEXT 索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的 where语句的参数匹配。FULLTEXT 索引配合 match against 操作使用,而不是一般的 where 语句加 like。
    全文索引可以从 CHAR、VARCHAR 或 TEXT 列中作为 CREATE TABLE 语句的一部分被创建,或是随后使用 ALTER TABLE 添加。不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。

全文解析器
全文索引中基本单位是”词”。分词,全文索引是以词为基础的,MySQL 默认的分词是所有非字母和数字的特殊符号都是分词符。在检索数据时我们给定的检索条件也是词。
MySQL 中默认的全文解析器不支持中文分词。如果数据含有中文需要更换全文解析器NGRAM。

使用全文索引
SELECT 投影列 FROM 表名 WHERE MATCH(全文索引列名) AGAINST(‘搜索内容’)

MySQL中The used table type doesn't support FULLTEXT indexes解决办法
报此错误是不支持全文索引,解决办法:
1、查看创建表时用的哪种引擎,如果是InnoDB,改为MyISAM,InnoDB不支持FULLTEXT类型的索引
2、查看配置文件mysql.ini,搜索default-storage-engine= ,如果是InnoDB,改为MyISAM。重启MySQL服务。

  • 在实际操作过程中,应该选取表中哪些字段作为索引?
    为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引,有7大原则:

1.选择唯一性索引
2.为经常需要排序、分组和联合操作的字段建立索引
3.为常作为查询条件的字段建立索引
4.限制索引的数目
5.尽量使用数据量少的索引
6.尽量使用前缀来索引
7.删除不再使用或者很少使用的索引

你可能感兴趣的:(mysql sql语句注意事项)