学习笔记之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索引的那些事儿说清楚了

图解MySQL索引--B-Tree(B+Tree)

MySQL索引和SQL调优手册

这种 SQL 写法会导致索引失效?

MySQL 如何正确的使用索引?

为什么MySQL用B+树做索引

MySQL高效索引:覆盖索引

我想说:MySQL的join真的很弱

MySQL:left join 避坑指南

MySQL varchar有最大长度限制吗


BEST PRACTICE

MySQL数据库之互联网常用架构方案

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很大会影响性能


  • 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攻击等。
posted on 2016-06-11 11:07  浩然119  阅读(532)  评论(0编辑  收藏  举报