学习笔记之MySQL
SQL Fiddle(在线执行SQL语句的网站)
- http://www.sqlfiddle.com/
MySQL
- https://www.mysql.com/
MySQL :: MySQL 5.7 Reference Manual :: 13 SQL Statement Syntax
- https://dev.mysql.com/doc/refman/5.7/en/sql-syntax.html
mySQL(关系型数据库管理系统)_百度百科
- https://baike.baidu.com/item/mySQL/471251?fr=aladdin
MySQL 教程 | 菜鸟教程
- http://www.runoob.com/mysql/mysql-tutorial.html
面试总结之Database / SQL - 浩然119 - 博客园
MySQL知识点总结
MySQL重要知识点
MySql语句大全:创建、授权、查询、修改等
- http://blog.csdn.net/evankaka/article/details/45580845
一份非常完整的MySQL规范
MySQL 索引原理及设计 - 数据库开发
- https://mp.weixin.qq.com/s/1MNj9v3IfKR9FUiA92mXFA
- https://icell.io/how-mysql-index-works/
终于把MySQL索引的那些事儿说清楚了
- https://mp.weixin.qq.com/s/APn6pl7B4-et1NjiHbh45w
- https://dev.mysql.com/doc/refman/5.5/en/explain-output.html
图解MySQL索引--B-Tree(B+Tree)
MySQL索引和SQL调优手册
这种 SQL 写法会导致索引失效?
MySQL 如何正确的使用索引?
为什么MySQL用B+树做索引
MySQL高效索引:覆盖索引
- https://mp.weixin.qq.com/s/xZb1xZCo9sr2UPjBk2VzdA
- https://www.cnblogs.com/chenpingzhao/p/4776981.html
我想说:MySQL的join真的很弱
MySQL:left join 避坑指南
MySQL varchar有最大长度限制吗
BEST PRACTICE
MySQL数据库之互联网常用架构方案
- https://mp.weixin.qq.com/s/22VAXElsVkle95D6zpbsxg
- https://www.cnblogs.com/littlecharacter/p/9084291.html
SQL优化方案 - CSDN云计算
- https://mp.weixin.qq.com/s/x5oguwfTC8fhqzFfR4Fpug
12 条 MySQL 优化技巧 - 数据分析与开发
- https://mp.weixin.qq.com/s/ykvH4HEGbG7FPG4AtnXwqQ
MySQL数据库优化
- https://mp.weixin.qq.com/s/eBHM3YQ2vAZAN6xiY5fxWw
- https://segmentfault.com/a/1190000018631870
MySQL性能优化之神技
SQL 性能优化梳理
MySQL慢查询记录原理和内容解析
MySQL EXPLAIN结果集分析 - 附带大量案例
亿级用户的分布式数据存储解决方案
架构秘笈:移花接木。使用MySQL模拟Redis
8种常被忽视的SQL错误用法 - 数据库开发
- https://mp.weixin.qq.com/s/6_M-Z-XimG8DgkVW85-6Hw
- https://yq.aliyun.com/articles/72501
10种常见的MySQL错误,你可中招?
借力 Docker ,三分钟搞定 MySQL 主从复制!
操作MySQL?这个库比pymysql香一百倍
MySQL 证明为什么用limit时,offset很大会影响性能
- https://mp.weixin.qq.com/s/WxAo5AbuXlU8yoTxNd1C_g
- https://github.com/zhangyachen/zhangyachen.github.io/issues/117
- MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
- 以下为在MySQL数据库中查询数据通用的 SELECT 语法:SELECT column_name,column_name FROM table_name [WHERE Clause] [OFFSET M ] [LIMIT N]
- 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
- 你可以使用 LIMIT 属性来设定返回的记录数。
- WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。
- 我们可以使用 coalesce 来设置一个可以取代 NUll 的名称
- 我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。为了处理这种情况,MySQL提供了三大运算符:关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
- IS NULL: 当列的值是 NULL,此运算符返回 true。
- IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
- <=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。
- 在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 false,即 NULL = NULL 返回false 。
- MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。
- MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配。
- 下表中的正则模式可应用于 REGEXP 操作符中。
模式 | 描述 |
---|---|
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。 |
$ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。 |
. | 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。 |
[...] | 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。 |
[^...] | 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。 |
p1|p2|p3 | 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 |
* | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
- MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
- 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
- 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
- 事务用来管理 insert,update,delete 语句
- 一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
- 1、事务的原子性:一组事务,要么成功;要么撤回。
- 2、稳定性 :有非法数据(外键约束之类),事务撤回。
- 3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
- 4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit 选项 决定什么时候吧事务保存到日志里。
- 如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。
- 有四种方式来添加数据表的索引:你可以使用 SHOW INDEX 命令来列出表中的相关的索引信息。可以通过添加 \G 来格式化输出信息。
- ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
- ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
- ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
- ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。
- 你也可以使用 SHOW TABLES 或 SHOW DATABASES 语句来获取数据库和数据表列表。
- 以下命令语句可以在 MySQL 的命令提示符使用,也可以在脚本中 使用,如PHP脚本。
命令 | 描述 |
---|---|
SELECT VERSION( ) | 服务器版本信息 |
SELECT DATABASE( ) | 当前数据库名 (或者返回空) |
SELECT USER( ) | 当前用户名 |
SHOW STATUS | 服务器状态 |
SHOW VARIABLES | 服务器配置变量 |
- MySQL中最简单使用序列的方法就是使用 MySQL AUTO_INCREMENT 来定义列。
- 以下我们将统计表中 first_name 和 last_name的重复记录数:SELECT COUNT(*) as repetitions, last_name, first_name FROM person_tbl GROUP BY last_name, first_name HAVING repetitions > 1;
- 如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。你也可以使用 GROUP BY 来读取数据表中不重复的数据:SELECT last_name, first_name FROM person_tbl GROUP BY (last_name, first_name);
- 当然你也可以在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。
- 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题。所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
- 防止SQL注入,我们需要注意以下几个要点:
- 1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。
- 2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
- 3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
- 4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
- 5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
- 6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。