MySQL(四)

因为内容太多了,所以将其拆分为以下内容

参考

https://www.bilibili.com/video/BV1NJ411J79W

https://www.runoob.com/mysql/mysql-tutorial.html

索引

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

  • Primary Key(聚集索引):InnoDB存储引擎的表会存在主键(唯一非null),如果建表的时候没有指定主键,则会使用第一非空的唯一索引作为聚集索引,否则InnoDB会自动帮你创建一个不可见的、长度为6字节的row_id用来作为聚集索引。
  • 单列索引:单列索引即一个索引只包含单个列
  • 组合索引:组合索引指在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。使用组合索引时遵循最左前缀集合
  • Unique(唯一索引):索引列的值必须唯一,但允许有空值。若是组合索引,则列值的组合必须唯一。主键索引是一种特殊的唯一索引,不允许有空值
  • Key(普通索引):是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值
  • FULLTEXT(全文索引):全文索引类型为FULLTEXT,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引可以在CHAR、VARCHAR或者TEXT类型的列上创建
  • SPATIAL(空间索引):空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING和POLYGON。MySQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类似的语法创建空间索引。创建空间索引的列必须声明为NOT NULL
1
2
3
4
5
6
7
8
9
show index from tablename	-- 显示所有索引信息

CREATE INDEX indexName ON table_name (column_name) -- 创建索引

ALTER table tableName ADD INDEX indexName(columnName) -- 修改表增加索引

DROP INDEX [indexName] ON mytable; -- 删除索引

explain select * from tablename -- explain分析索引

更多

权限管理

SQL 命令

1
2
3
4
5
6
7
8
9
10
11
12
mysql> grant all privileges on *.* to jack@'localhost' identified by "jack" with grant option;
-- 先来看一个例子,创建一个只允许从本地登录的超级用户jack,并允许将权限赋予别的用户,密码为:jack.

show grants for jack; -- 查看权限

revoke delete on *.* from 'jack'@'localhost'; -- 回收权限

drop user 'jack'@'localhost'; -- 删除用户

rename user 'jack'@'%' to 'jim'@'%'; -- 重命名

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456'); -- 修改密码

参考

备份

MySQL 可视化工具,转储 sql 文件

mysqldump 命令行使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 备份

# mysqldump -h主机 -u用户名 -p密码 数据库 表名 >物理磁盘位置/文件名.sql
mysqldump -hlocalhost -uroot -proot test user >C:/Users/18339/Desktop/a.sql

# mysqldump -h主机 -u用户名 -p密码 数据库 表1 表2 >物理磁盘位置/文件名.sql
mysqldump -hlocalhost -uroot -proot test user teacher >C:/Users/18339/Desktop/a.sql

# mysqldump -h主机 -u用户名 -p密码 数据库 >物理磁盘位置/文件名.sql
mysqldump -hlocalhost -uroot -proot test >C:/Users/18339/Desktop/a.sql

# 恢复

# 登陆情况下,切换到指定数据库
# source 备份文件

source C:/Users/18339/Desktop/a.sql

三大范式

第一范式

1NF是对属性的原子性,要求属性具有原子性,不可再分解;

说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

第二范式

2NF要求记录有惟一标识,即不存在部分依赖;

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。

第三范式

3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖;

满足第三范式(3NF)必须先满足第二范式(2NF)。第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

总结:三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

SQL 注入

如果您通过网页获取用户输入的数据并将其插入一个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攻击等。

因为内容太多了,所以将其拆分为以下内容