91 Testing MySQL学习总结
---------
在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System
什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,
----------
什么是关系型数据库管理系统(RDBMS)
所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
1.数据以表格的形式出现
2.每行为各种记录名称
3.每列为记录名称所对应的数据域
4.许多的行和列组成一张表单
5.若干的表单组成database
-----------------
数据库中的一些概念:
数据库: 数据库是一些关联表的集合。.
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
冗余:存储两倍数据,冗余可以使系统速度更快。
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
----------------------
Mysql数据库的特点:
Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。
32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
Mysql是开源的,所以你不需要支付额外的费用。
Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。
--------------
安装Mysql
下载Mysql
https://www.mysql.com/downloads/
在Linux系统上安装MySQL
在Windows上安装MySQL
------------------------
常用的基础命令:
SHOW DATABASES;
添加用户的的实例,用户名为guest,密码为guest123,并授权用户可进行 SELECT, INSERT 和 UPDATE操作权限:
use mysql;
INSERT INTO user
(host, user, password,
select_priv, insert_priv, update_priv)
VALUES ('localhost', 'guest',
PASSWORD('guest123'), 'Y', 'Y', 'Y');
FLUSH PRIVILEGES;
SELECT host, user, password FROM user WHERE user = 'guest';
2.添加用户 zara ,密码为 zara123 。
use mysql;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON TUTORIALS.*
-> TO 'zara'@'localhost'
-> IDENTIFIED BY 'zara123';
以上命令会在mysql数据库中的user表创建一条用户信息记录。
注意: MySQL 的SQL语句以分号 (;) 作为结束标识。
------------------------
管理MySQL的命令
USE 数据库名 :选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库。
SHOW DATABASES: 列出 MySQL 数据库管理系统的数据库列表。
SHOW TABLES: 显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。
SHOW COLUMNS FROM 数据表: 显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。
SHOW INDEX FROM 数据表: 显示数据表的详细索引信息,包括PRIMARY KEY(主键)。
SHOW TABLE STATUS LIKE 数据表\G: 该命令将输出Mysql数据库管理系统的性能及统计信息。
---------------------
登录进Mysql
mysql -u root -p
Enter password:******
退出Mysql
使用 exit 命令
创建数据库
删除数据库
创建数据库表
删除数据库表
DROP TABLE table_name ;
向数据库表中插入一条数据
INSERT INTO
数据查询
Select 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
SELECT 命令可以读取一条或者多条记录。
你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
你可以使用 WHERE 语句来包含任何条件。
你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
-----------------------
mySQL任务13
查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
查询某个表中的所有信息
SELECT * from 要查询的表的名字
查询中的where字句
WHERE 子句类似于程序语言中的if条件,如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据。MySQL数据表中读取指定的数据,WHERE 子句是非常有用的。使用主键来作为 WHERE 子句的条件查询是非常快速的。
---------------------
删除数据库中的数据:
SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录
通用的语句是:delete from 要删除的表 where 条件
如果没有指定 WHERE 子句,MySQL表中的所有记录将被删除。
你可以在 WHERE 子句中指定任何条件
----------------------
数据库中的模糊查询like
LIKE 通常与 % 一同使用
可以使用AND或者OR指定一个或多个条件
可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件
-----------------------
SQL的 ORDER BY 子句用来将查询的返回结果进行排序
默认情况下,它是按升排列ASC。
ASC 或 DESC 关键字来设置查询结果是按升序或降序排列
----------------------
在多张表中查询数据
即借助join 关键字来实现的联合多表查询
1. LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。
-----------------------
SQL语句对Null值的处理
IS NULL: 当列的值是NULL,此运算符返回true。
IS NOT NULL: 当列的值不为NULL, 运算符返回true。
<=>: 比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true。
------------------------
MySQL中的事务
事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行
通常来说:事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
1、事务的原子性:一组事务,要么成功;要么撤回。
2、稳定性 : 有非法数据(外键约束之类),事务撤回。
3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。
-----------------------
事务的操作:
1,开始一个事务
start transaction
2, 做保存点
save point 保存点名称
3, 操作
4,可以回滚,可以提交,没有问题,就提交,有问题就回滚。
-----------------
索引:
索引可以大大提高MySQL的检索速度。
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。
创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。
索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
建立索引会占用磁盘空间的索引文件。
------------------------
1.创建索引
2.删除索引
3.创建唯一索引
------------------------
临时表:
临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。
默认情况下,当你断开与数据库的连接后,临时表就会自动被销毁。当然你也可以在当前MySQL会话使用 DROP TABLE 命令来手动删除临时表。
------------------------
复制Mysql数据库中的数据表的完整信息
需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等。
1.获取数据表的完整结构。
SHOW CREATE TABLE tutorials_tbl \G;
2.修改SQL语句的数据表名,并执行SQL语句。<
复制以下命令显示的SQL语句,修改数据表名,并执行SQL语句,通过以上命令 将完全的复制数据表结构。
>
3.如果你想复制表的内容,你就可以使用 INSERT INTO ... SELECT 语句来实现。
------------------------
获取Mysql服务器元数据
命令 描述
SELECT VERSION( ) 服务器版本信息
SELECT DATABASE( ) 当前数据库名 (或者返回空)
SELECT USER( ) 当前用户名
SHOW STATUS 服务器状态
SHOW VARIABLES 服务器配置变量
-------------------------
MySQL数据库中重复数据的处理:
MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。
1.防止表中出现重复数据
你可以在MySQL数据表中设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性。
--------------------------
1.统计MySQl数据表中的重复数据
2.过滤重复数据, 在SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。
3.删除重复数据
--------------------------
SQL注入:
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输入的数据进行过滤处理。
------------------------
防止SQL注入,我们需要注意以下几个要点:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。
---------------------------
1.Like语句中的SQL注入
-----------------
MySQL数据导出
MySQL数据导入
---------------------------