一、MySQL高级查询
1、LIMIT的分页查询
2、子查询
(1)将一个查询的结果作为另一个查询语句的查询条件,称为子查询
(2)语法:
SELECT 字段列表 FROM 表名1 WHERE 字段 = (SELECT 字段 FROM 表2 WHERE....)
或者
SELECT 字段列表 FROM 表名1 WHERE 字段 IN (SELECT 字段 FROM 表2 WHERE....)
注意: = 匹配子查询的结果返回一个值的情况
IN 匹配子查询的结果返回一组值的情况
(3)查询的步骤先执行子查询,再执行父查询。将子查询的结果作为父查询的条件,在进行查询
(4)自身子查询
子查询和父查询使用的是同一张表的查询方式
二、MySQL的函数
1、统计(聚集)函数
(1)COUNT( ); 返回某列的行数
SELECT COUNT(*) FROM 表 [WHERE 条件];
(2)SUM( ); 返回某列值之和(只针对数值型的字段)
SELECT SUM(数值型字段名) FROM 表 [WHERE 条件];
(3)AVG( ); 返回某列的平均值(只针对数值型的字段)
SELECT AVG(数值型字段名) FROM 表 [WHERE 条件];
(4)获取某列的最大值和最小值(只针对数值型的字段)
SELECT MAX(数值型字段名) FROM 表 [WHERE 条件];
SELECT MIN(数值型字段名) FROM 表 [WHERE 条件];
2、分组统计查询GROUP BY
(1)按照指定的字段进行分组统计
(2)语法
SELECT 分组字段,SUM(统计字段) FROM 表...
[WHERE 条件]
GROUP BY 分组字段
[HAVING SUM(统计字段)>xxxx]
[ORDER BY SUM(统计字段) ASC或者DESC]
[LIMIT m,n];
(3)GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前
(4)过滤分组HAVING子句
三、MySQL的事务
1、MySQL的事务
(1)将一组sql语句做为一个执行单元进行处理的方式
(2)在一组被执行的sql语句中,只要有一个sql语句出现错误,则所有的sql语句都将撤销执行
(3)将以上的特征称为事务的原子性
2、事务的特征
事务--事件服务(事件主要指增、删、改事件)
(1)原子性(Atomicity)(sql的操作不可分割)
在一个单元内执行的sql语句,要么都执行通过,要么都撤销执行
(2)一致性(Consistency)(数据在表中的表现形式)
在数据表中存储的数据是一致的,比如A给B转账,转账总数是一致的
(3)隔离性(独立性,Isolation)
每个事务在执行时都是独立的。互不影响
(4)持久性(Durability)
最终所有的数据都会在数据库中进行存储
注意:事务只影响数据的增、删、改语句,不影响查询
3、MySQL中事务的实现方式
(1)MySQL中默认是自动提交,使用事务时应先关闭自动提交,使用SET AUTOCOMMIT=0;关闭MySQL事务的自动提交功能
(2)START TRANSACTION;开始一个事务,标记事务的起始点
(3)COMMIT;提交一个事务给数据库,
ROLLBACK; 将事务回滚,数据回到本次事务的初始状态(撤销操作)
(4)SET AUTOCOMMIT = 1;开启MySQL数据库的自动提交
四、数据库的索引
1、索引的作用:提升查询的效率
2、索引的类别
(1)主键索引 PRIMARY KEY (在创建表时指定索引键,特征主键值是非空唯一的)
(2)唯一性索引 UNIQUE(可以保证数据的唯一性(值不重复))
(3)常规索引,使用INDEX在字段值上建立索引
(4)全文索引 FULLTEXT(只能用于 CHAR 、 VARCHAR、TEXT数据列类型类型的字段上建立的索引)
3、在已存在的表中建立常规索引
ALERT TABLE 表 ADD INDEX 索引名称(字段1,字段2,...) ;
4、全文索引(只能在MyISAM类型的表上创建全文索引)
ALERT TABLE 表 ADD FULLTEXT(字段名);
5、删除索引
DROP INDEX 索引名 ON 表名;
或者
ALERT TABLE 表 DROP INDEX 索引;
6、查看索引
SHOW INDEX(或KEYS) FROM 表名;
五、mysql数据库的备份
保证重要数据不丢失、数据转移,掌握MySQL数据库的备份导出与导入
六、数据库设计
1、收集信息--需要完成的任务
2、标识实体(Entity)--需求描述中的名词
3、标识每个实体的属性(Attribute)
4、标识每个实体间的关联关系
七、E-R关系图(实体关系图Entity-Relational)
1、使用矩形表示实体
2、使用椭圆形描述实体的属性
3、使用菱形描述实体间的关联关系
八、数据库设计的三范式
1、第一范式 (1st NF)
列不能有重复
2、第二范式 (2nd NF)
在第一范式的基础上,每个字段都依赖于主键字段,即每张表描述一个实体。需要建立主键约束
3、第三范式 (3rd NF)
在第二范式的基础上,拆分表中不依赖于主键字段列,形成独立表并与其他表建立关联关系
九、MySQL管理
1、创建用户账号
CREATE USER 用户名@host IDENTIFIED BY '密码';
例如:
CREATE USER 'admin'@'localhost' IDENTIFIED BY '123';
或者: CREATE USER admin IDENTIFIED BY '123';
2、设置访问权限
(1)查看赋予用户的权限,使用SHOW GRANT FOR
SHOW GRANT FOR 用户名;
(2)给用户分配权限,使用GRANT语句,要求至少给出以下信息:
要授予的权限
被授予访问权限的数据库或表
用户名
例如:GRANT SELECE ON database.* TO 用户名;
GRANT的反操作为REMOVE语句,用REMOVE来撤销特定的权限
例如:
REMOVE SELECT ON database.* FROM 用户名;
3、修改用户密码,可用SET PASSWORD语句
SET PASSWORD FOR 用户名@'localhost'=PASSWORD('new password');
4、删除用户
DROP USER 'admin';
或者
DROP USER 'admin'@'localhost';
十、视图
1、定义: 有若干个基本表构成的虚拟表称为视图
2、作用
主要用于简化查询,保护数据。一般将视图用于检索(SELECT语句),而不用于更新(INSERT、UPADATE和DELETE)
3、创建视图
CREATE VIEW 视图名 AS SELECT语句;
例如:
CREATE VIEW productcustomers
AS SELECT cust_name,cust_contact,prod_id FROM
customers,orders,orderitems
WHERE customers.cust_id=orders.cust_id AND
orderitems.order_num=orders.order_num;
4、查询视图
SELECT * FROM 视图名;
为检索订购了产品TNT的客户,可如下进行:
SELECT cust_name,cust_contact FROM productcustomers
WHERE pro_id=’TNT’;
5、删除视图
DROP VIEW 视图名;