MySQL入门(2)

183 阅读5分钟

一、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 视图名;