1. 关于SQL区分大小写
1.1 在Mysql数据库中进行查询时,希望英文严格区分大小写。默认情况下是不区分大小写的。
1.2 如何让Mysql数据查询时,严格区分大小写呢?
link: https://www.imooc.com/article/14190
2. distinct 多列
只会查找id 与price 都相同的
Q: 如果只查找一列不同, 是不是要用group by?
3. 降序升序
如果想在多个列上进行降序升序, 必须对每一列指定DESC关键字。
4. 在字句中 操作符的优先顺序
圆括号()
and
or
5. in操作符比or 执行更快,在where字句中用来制定要匹配值的清单的关键字,功能与or相当
6.某些情况下,<> 与not 作用一样
7.^ 表示否定
8.在Mysql中两个字符串相加不能用+号,加号是用来做数字相加的,在mysql中要连接字符串需要用CONCAT或者CONCAT_WS函数
8.1 CONCAT_WS函数()函数, 表示concat with separator,即有分隔符的字符串连接
第一个参数为分隔符?
8.2 concat_ws的参数中有null的话,并非都返回null
9.mysql 下的trim()
9.1trim函数可以过滤指定的字符串:
完整格式:TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
简化格式:TRIM([remstr FROM] str)
返回字符串 str , 其中所有remstr前缀和/或后缀都已被删除。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH。remstr为可选项,在未指定情况下,可删除空格。
returns a string after removing all prefixes or suffixes from the given string.
MySQL中trim()函数的用法 - lijinxiu123的博客 - CSDN博客
9.2MySQL LTRIM和RTRIM函数
10.常见的文本处理函数
11.mysql 没有DATEPART()
刷题遇到的:
a. timestampdiff()
TIMESTAMPDIFF(interval,time_start,time_end)
interval: day;month;year;week
mysql 计算两个时间差函数(TIMESTAMPDIFF)的用法 - 程序媛-jjl的博客 - CSDN博客
b. datediff()
DATEDIFF(date1,date2)
MySQL DATEDIFF() 函数 - 许进进的博客 - CSDN博客
12. 数值处理函数
刷题中碰见的图上的函数:
ceil(x): 该函数返回的最小整数值,但不能小于X
SELECT CEILING(3.46);
4
pow(x,y)
返回X的Y次方
要有两个参数
13.聚焦函数 aggregate function
13.1 AVG()只用于单个列,要是求多列的,就要每一列都avg(),忽略为NULL的值
13.2 COUNT()
COUNT(*) 对表中行的数目进行计数,不管列中是否包含空值。
13.3MAX()
文本数据中,MAX()返回该列排序后的最后一行。
MIN()返回该列排序后最前面的行。
14. select子句顺序
15.笛卡尔积
由没有联结条件的表关系返回的结果为笛卡尔积。
检测出的行的数目将是第一个表中的行数乘以第二个表中的行数。
笛卡尔积的联结,也称叉联结 cross join.
内连接(inner join)
如果没有指定连接条件的话,和笛卡尔积的交叉连接结果一样,但是不同于笛卡尔积的地方是,没有笛卡尔积那么复杂要先生成行数乘积的数据表,内连接的效率要高于笛卡尔积的交叉连接。
16自然联结的作用就是排除多次出现,使每个列只返回一次
标准的联结(内联结)返回所有数据,相同的列甚至多次出现。
17.join
RIGHT 指出的是OUTER JOIN 右边的表,而LEFT 指出的是OUTER JOIN左边的表)。上面的例子使用LEFT OUTER JOIN 从FROM 子句左边的表(Customers 表)中选择所有行
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
mysql不支持full join
实现方法: right join union left join
full join: 显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL,即显示左连接、右连接和内连接的并集
mysql中的连接 -
详细的连接解释
18.复合查询 compound query
在一个查询中从不同的表返回结构数据
对一个表执行多个查询,按一个查询返回数据
19.UNION
union中的每个查询必须包含相同的列,表达式或聚焦函数
UNION重复的行会被自动取消
如果想返回所有的匹配行,可适用UNION ALL
20.insert 必须给每一列提供一个值,如果某列没有值,则应该使用NULL值
21.INSERT SELECT 可以用一条select插入多行,不管SELECT语句返回多少行,都将被INSERT插入
22.mysql 不支持 select... into table
mysql 支持insert into...select
INSERT INTO tbl_temp2 (fld_id) SELECT tbl_temp1.fld_order_id
FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
MySQL :: MySQL 8.0 Reference Manual :: 13.2.6.1 INSERT ... SELECT Syntax
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中
23. as可以作为连接语句的操作符
create table tablename as select * from tablename2;
上面语句的意思就是先获取到tablename表中的所有记录,之后创建一张tablename表,结构和tablename2表相同,记录为后面语句的查询结果。
24.update 用法
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET assignment_list
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
ps:在更新多个列时,只需要使用一条SET 命令, 每个“列=值”对之间用逗号分隔(最后一列之后不用逗号)
要删除某个列的值,可设置它为NULL(假如表定义允许设为NULL值)
25.TRUNCATE TABLE 比delete更快的删除表中所有行
但是也有区别
可以重置自增字段的起始位置
26.NULL
null值是没有值,不是空字符串。
如果指定''(两个单引号,其间没有字符),这在NOT NULL列中是允许的。
空字符串是一个有效的值,不是无值。
27. 默认值 DEFAULT
mysql中 将系统日前用作默认日期,DEFAULT CURRENT_DATE()
28. 复杂的表结构更改
29.view 视图
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = user]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
29.1 create or replace view 当有该名称的视图时,该命令会替代旧的视图
The CREATE VIEW statement creates a new view, or replaces an existing view if the OR REPLACE clause is given. If the view does not exist, CREATE OR REPLACE VIEW is the same as CREATE VIEW. If the view does exist, CREATE OR REPLACE VIEW replaces it.
29.2 视图的限制
在mysql官网手册中,有写view是有许多限制的,例如不能使用index等。
《sql必知必会》中,也有说order by在视图中禁止使用。
具体情况:
The SELECT statement cannot contain a subquery in the FROM clause.
The SELECT statement cannot refer to system variables or user-defined variables.
Within a stored program, the SELECT statement cannot refer to program parameters or local variables.
The SELECT statement cannot refer to prepared statement parameters.
Any table or view referred to in the definition must exist. If, after the view has been created, a table or view that the definition refers to is dropped, use of the view results in an error. To check a view definition for problems of this kind, use the CHECK TABLE statement.
The definition cannot refer to a TEMPORARY table, and you cannot create a TEMPORARY view.
You cannot associate a trigger with a view.
Aliases for column names in the SELECT statement are checked against the maximum column length of 64 characters (not the maximum alias length of 256 characters).
中文参照: mysql视图的限制,以及实例
30.存储
可以单独编写每条sql语句,并根据结果有条件地执行其他语句。 在每次需要这个处理时,都必须做这些工作。
存储过程就是为以后使用而保存的一条或多条sql语句,可将其视为批文件。
CREATE [DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body proc_parameter:
[ IN | OUT | INOUT ] param_name type characteristic:
COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
routine_body:
Valid SQL routine statement
[begin_label:] BEGIN [statement_list]
……END [end_label]
MySQL 存储过程 | 菜鸟教程
链接中 有详细的存储资料
31.事务处理 transaction processing
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
事务处理是一种机制,用来管理必须成批执行的SQL操作,保证数据不包含不完整的操作结果。
事务 transaction:指一组SQL语句
回退 rollback: 指撤销指定SQL语句的过程
提交 commit: 指将未存储的sql语句结果写入数据库表
保留点save point: 指事务处理中设置的临时占位符 placeholder, 可以对它发布回退 与回退整个事务处理不同
事务处理用来管理INSERT,UPDATE,DELETE语句
31.1 事务的4个条件
事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
MySQL 事务 | 菜鸟教程
EG:
32.游标 cursor
要处理存储过程中的结果集,请使用游标。游标允许您迭代查询返回的一组行,并相应地处理每行。
sselect整个数据集,然后创建游标,能用游标处理结果中的每一行
declare创建游标
open cusor 打开游标
fetch 访问游标
MySQL游标 - MySQL教程™
33.唯一约束
表可包含多个唯一约束,但每个表只允许一个主键
唯一约束可包含NULL值
唯一约束可修改或更新
唯一约束列的值可重复使用
与主键不一样,唯一约束不能用来定义外键
34.检查约束
check
35.索引
索引用于数据过滤和数据排序
create index
索引必须唯一命名
36.触发器
有以下的访问权:
INSERT操作中的所有新数据
UPDATE操作中的所有新旧数据
DELETE操作中删除的数据
CREATE TRIGGER
37.数据库安全
39.mysql架构
40.mysql 与 innodb 笔记
『浅入浅出』MySQL 和 InnoDB
42.查看表结构
desc 表名
43.修改数据库引擎
alter table 表名 engine=;(PS:主要有InnoDB和MyISAM,InnoDB对经常修改表数据友好,MyISAM对经常查询表友好)
44.加载外部数据到表
Load data local infile ‘数据路径’Into table 表名 Fields terminated by ‘分隔符’Ignored 1 lines
MySQL增删改查的常用语句汇总 - 知乎
45. Mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用
IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
46.ifnull
IFNULL(expr1,expr2)
假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。
IFNULL(expr1,expr2) 的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、 REAL或 INTEGER。
47.IF ELSE 做为流程控制语句使用
48. end if 例子
declare是创建游标 能够相应地处理每一行
49.mysql中的case
Case具有两种格式。简单Case函数和Case搜索函数。
Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
mysql操作查询结果case when then else end用法举例 - 常斯特啰嗦司机 - 博客园
--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
50. mysql 中的locate用法
LOCATE(substr,str)
返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0
LOCATE(substr,str,pos)
返回子串 substr 在字符串 str 中的第 pos 位置后第一次出现的位置。如果 substr 不在 str 中返回 0 :
mysql> SELECT LOCATE('bar', ‘foobarbar',5);
-> 7
51.mysql 中的left 用法
LEFT(str,length)
LEFT()函数接受两个参数:
str是要提取子字符串的字符串。length是一个正整数,指定将从左边返回的字符数。
LEFT()函数返回str字符串中最左边的长度字符。如果str或length参数为NULL,则返回NULL值。
如果length为0或为负,则LEFT函数返回一个空字符串。如果length大于str字符串的长度,则LEFT函数返回整个str字符串。
请注意,SUBSTRING(或SUBSTR)函数也提供与LEFT函数相同的功能。
ps:链接中有一个left函数在数据库中截取文本的例子
52. union 与 join的区别
union : they only bind fields on top of one another in the two tables.
53.mysql里面没有intersect()
53.1 intersect()用法
sql标准有三个集合运算符:union,intersect,minus
53.2 在mysql中实现intersect()
54.mysql中不支持 except()只能用于SQLserver
语法:
EXCEPT 子句的基本语法如下所示:
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
EXCEPT
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
https://blog.csdn.net/yiguang_820/article/details/82685561
55. semi-join 和 anti-join
MySQL中的semi-join - zengkefu - 博客园
所谓的semi-join是指semi-join子查询。 当一张表在另一张表找到匹配的记录之后,半连接(semi-jion)返回第一张表中的记录。与条件连接相反,即使在右节点中找到几条匹配的记录,左节点 的表也只会返回一条记录。另外,右节点的表一条记录也不会返回。半连接通常使用IN 或 EXISTS 作为连接条件。
通常出现在使用了exists或in的sql中,所谓semi-join即在两表关联时,当第二个表中存在一个或多个匹配记录时,返回第一个表的记录;
与普通join的区别在于semi-join时,第一个表里的记录最多只返回一次
A semi-join is a preparation-time transformation that enables multiple execution strategies such as table pullout, duplicate weedout, first match, loose scan, and materializtion. The optimizer uses semi-join strategies to improve subquery execution, as described in this section
MySQL :: MySQL 5.7 Reference Manual :: 8.2.2.1 Optimizing Subqueries, Derived Tables, and View References with Semi-Join Transformations
56.mysql中的semi-join
MySQL, a subquery must satisfy these criteria to be handled as a semi-join:
It must be an IN (or =ANY) subquery that appears at the top level of the WHERE or ON clause, possibly as a term in an AND expression.
It must be a single SELECT without UNION constructs.
It must not contain a GROUP BY or HAVING clause.
It must not be implicitly grouped (it must contain no aggregate functions). eg:avg,min,max,count,sum
It must not have ORDER BY with LIMIT.
The statement must not use the STRAIGHT_JOIN join type in the outer query.
The STRAIGHT_JOIN modifier must not be present.
The number of outer and inner tables together must be less than the maximum number of tables permitted in a join.
57.anti-join
anti-join则与semi-join相反,即当在第二张表没有发现匹配记录时,才会返回第一张表里的记录;
当使用not exists/not in的时候会用到,两者在处理null值的时候会有所区别
何时选择anti-join
1 使用not in且相应列有not null约束
2 not exists,不保证每次都用到anti-join
当无法选择anti-join时,oracle常会采用filter替代
(转)关于semi-join/anti-join的一点探讨 - 我心依旧 - ITeye博客
58. coalesce()函数
coalesce()解释:返回参数中的第一个非空表达式(从左向右)
select coalesce(a,b,c);
如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)
eg: select coalesce(null,"carrot","apple")
返回结果:carrot
https://blog.csdn.net/shixiaoguo90/article/details/50633628
59.mysql中的cast()用法
把一个字段转成另一个字段
Cast(字段名 as 转换的类型 )
CHAR[(N)] 字符型
DATE 日期型
DATETIME 日期和时间型
DECIMAL float型
SIGNED int
TIME 时间型
select cast(名字 as DECIMAL)
https://blog.csdn.net/u013215018/article/details/80014278
60.mysql中的正则表达式
MySQL中使用 REGEXP 操作符来进行正则表达式匹配。
eg:
SELECT name FROM person_tbl WHERE name REGEXP '^st';
查找name字段中以'st'为开头的所有数据
MySQL 正则表达式 | 菜鸟教程
61.mysql中的rlike()
RLIKE operator performs a pattern match of a string expression against a pattern. The pattern is supplied as an argument.
REGEXP and RLIKE are not case sensitive, except when used for
with BINARY and VARBINARY data types
ps:regexp 和rlike 都可以用来做正则表达式,并且对大小写不敏感。如果需要区分大小写,可以用binary指定大写
62.mysql中的正则表达式
MySQL :: MySQL 8.0 Reference Manual :: 12.5.2 Regular Expressions
MySQL - REGEXP, RLIKE - Guide, Examples and Alternatives
MySQL RLIKE operator - w3resource
63.MySQL EXTRACT() 函数
EXTRACT(unit FROM date)
EXTRACT() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
eg:
SELECT EXTRACT(YEAR FROM OrderDate) AS OrderYear,
EXTRACT(MONTH FROM OrderDate) AS OrderMonth,
EXTRACT(DAY FROM OrderDate) AS OrderDay
FROM Orders
WHERE OrderId=1
MySQL EXTRACT() 函数 | 菜鸟教程
64.mysql中的cte 用法
MySQL CTE(公共表表达式) - MySQL教程™
ps: 该用法在mysql8.0 之后才有
64.1 定义
公用表表达式是一个命名的临时结果集,仅在单个SQL语句(例如SELECT,INSERT,UPDATE或DELETE)的执行范围内存在。
与派生表类似,CTE不作为对象存储,仅在查询执行期间持续。 与派生表不同,CTE可以是自引用(递归CTE),也可以在同一查询中多次引用。 此外,与派生表相比,CTE提供了更好的可读性和性能。
WITH cte_name (column_list) AS (query)
SELECT * FROM cte_name;
64.2 with用法
a. 在SELECT,UPDATE和DELETE语句的开头可以使用WITH子句
WITH...SELECT...
WITH...UPDATE...
WITH...DELETE...
b.可以在子查询或派生表子查询的开头使用WITH子句
SELECT...WHERE id IN(WITH...SELECT...);
SELECT * FROM (WITH...SELECT...) AS derived_table;
c.可以在SELECT语句之前立即使用WITH子句,包括SELECT子句
CREATE TABLE ... WITH ... SELECT ...
CREATE VIEW ... WITH ... SELECT ...
INSERT ... WITH ... SELECT ...
REPLACE ... WITH ... SELECT ...
DECLARE CURSOR ... WITH ... SELECT ...
EXPLAIN ... WITH ... SELECT ...
ps:在两个cte中,只有第一句需要用with,第二句cte 直接 表格名称 as 这种格式
65.join vs correlated subqueries vs multiple/nested subqueries vs common table expressions
join:适合用2个或2个以上的database
correlated subqueries :matching data from different columns in one or more table
66.mysql中的substring()用法
字符串的截取
SUBSTRING(str,pos)
从字符串str的起始位置pos返回一个子串
mysql> select SUBSTRING('Quadratically',5);
-> 'ratically'
相同类似功能 : left();right()
MySQL字符串函数:字符串截取 - 浪迹天涯 - ITeye博客
67.mysql中的replace()用法
replace(object,search,replace)
把object中出现search的全部替换为replace
mySQL中replace的用
68.mysql中的window function
https://www.jianshu.com/p/70f8c2c512b0
69.mysql中的自定义变量
https://www.jianshu.com/p/f42fd10845af
70.mysql中repeat()用法
The REPEAT() function repeats a string as many times as specified.
REPEAT(string, number)
https://www.w3schools.com/sql/func_mysql_repeat.asp
71. mysql中的数据透视表
mysql中没有pivot 这个function
72.mysql中的group_concat()
mysql 中 GROUP_CONCAT()函数,主要用来处理一对多的查询结果,通常会结合GROUP BY一起使用。
GROUP_CONCAT([DISTINCT]expr[,expr ...]
[ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC][,col_name ...]]
[SEPARATOR str_val])
https://blog.csdn.net/hjh15827475896/article/details/79237878
73.mysql中插入csv数据
https://dev.mysql.com/doc/refman/5.5/en/load-data.html
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_name [CHARACTER SET charset_name] [{FIELDS | COLUMNS}
[TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] [IGNORE number {LINES | ROWS}] [(col_name_or_user_var [, col_name_or_user_var] ...)] [SET col_name={expr | DEFAULT}, [, col_name={expr | DEFAULT}] ...]
74.mysql中的exist
对外表用loop逐条查询,每次查询都会查看exists的条件语句。
当 exists里的条件语句能够返回记录行时(无论记录行是多少,只要能返回),条件就为真 , 返回当前loop到的这条记录。反之如果exists里的条件语句不能返回记录行,条件为假,则当前loop到的这条记录被丢弃。
exists的条件就像一个boolean条件,当能返回结果集则为1,不能返回结果集则为 0。
select * from tables_name where [not] exists(select..);
75.exist和in的区别
**如果查询的两个表大小相当,那么用in和exists差别不大。 **
**如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: **
MySQL - exists与in及any的用法 - 小小默:进无止境 - CSDN博客
76.mysql中的rollup 和 cube
ROLLUP,是GROUP BY子句的一种扩展,可以为每个分组返回小计记录以及为所有分组返回总计记录。
CUBE,也是GROUP BY子句的一种扩展,可以返回每一个列组合的小计记录,同时在末尾加上总计记录。
如果是Group by ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。
如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。 grouping_id()可以美化效果。除了使用GROUPING函数,还可以使用GROUPING_ID来标识GROUP BY的结果。
也可以 Group by Rollup(A,(B,C)) ,Group by A Rollup(B,C),…… 这样任意按自己想要的形式结合统计数据,非常方便。
group by分组函数之rollup与cube用法 - blockheading的博客 - CSDN博客
77.mysql中的grouping set
group by cube,rollup, grouping set的用法 - 程序园
78.mysql中的top
mysql不支持top用法,需要用limit表示
具体的limit用法:
实现MySQL top n查询的步骤
Mysql 分页语句 Limit原理 - helloxiaozhe的博客 - CSDN博客
这个链接中还提到了怎么用limit做分页,以及如何优化limit!!!!!!!!
79.mysql中的聚集索引/非聚集索引
Mysql聚集索引和非聚集索引(堆组织表和索引组织表) - ChangWen的博客 - CSDN博客
80.mysql中的字节长度计算
80.1 length
LENGTH(str)
Returns the length of the string str, measured in bytes. A multibyte character counts as multiple bytes. This means that for a string containing five 2-byte characters, LENGTH() returns 10, whereas CHAR_LENGTH() returns 5.
返回字符串str的长度,以字节为单位。 多字节字符计为多个字节。 这意味着对于包含5个2字节字符的字符串,LENGTH()返回10,而CHAR_LENGTH()返回5。
80.2 char_length()
CHAR_LENGTH(str)
Returns the length of the string str, measured in characters. A multibyte character counts as a single character. This means that for a string containing five 2-byte characters, LENGTH() returns 10, whereas CHAR_LENGTH() returns 5.
返回字符串str的长度,以字符为单位。 多字节字符算作单个字符。 这意味着对于包含5个2字节字符的字符串,LENGTH()返回10,而CHAR_LENGTH()返回5。
mysql字符串函数之length,char_length用法 - 刘鸿亮 - CSDN博客
81.mysql中的escape用法
select * from user where username like '/_nihao' escape '/',意思就是说/之后的_不作为通配符
MYSQL escape用法 - lovely9862的专栏 - CSDN博客
82. mysql中的执行顺序
from 表
where 条件
group by 字段
形成虚拟的表及字段,聚合及字段添加
having 筛选数据
distinct 去重
order by 字段 asc,desc
limit 限制条数
select 罗列记录
先根据where 约束条件 将数据从表中加载到内存,所以where的条件作用在数据之前,然后根据字段进行分组,在内存中形成一张虚拟的表包含字段,如果此时有聚合函数则先执行聚合函数,并将聚合函数字段也加到虚拟的表中,接着进行having记录筛选,筛选完成后对数据进行去重,排序,限制等操作后进行显示。
83.mysql中的mid的用法
SQL MID() 函数用于得到一个字符串的一部分
SELECT MID(ColumnName, Start [, Length]) FROM TableName
字符串从1开始,而非0,Length是可选项,如果没有提供,MID()函数将返回余下的字符串。
84.MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用
CASCADE
在父表上update/delete记录时,同步update/delete掉子表的匹配记录
SET NULL
在父表上update/delete记录时,将子表上匹配记录的列设为null (要注意子表的外键列不能为not null)
NO ACTION
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
RESTRICT
同no action, 都是立即检查外键约束
SET NULL
父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别
NULL、RESTRICT、NO ACTION
删除:从表记录不存在时,主表才可以删除。删除从表,主表不变
更新:从表记录不存在时,主表才可以更新。更新从表,主表不变
CASCADE
删除:删除主表时自动删除从表。删除从表,主表不变
更新:更新主表时自动更新从表。更新从表,主表不变
SET NULL
删除:删除主表时自动更新从表值为NULL。删除从表,主表不变
更新:更新主表时自动更新从表值为NULL。更新从表,主表不变
MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用 - yzuzhang - 博客园