MySQL必知必会,读书笔记4

一、联结表

  数据仍利用前文中的数据。

第二十二章 使用视图

  • 视图是一张设想表
  • 为啥使用视图
    • 重用SQL语句
    • 简化复杂的SQL操作
    • 使用表的组成都部队分并不是整张表
    • 保卫安全数量,只同意访谈表的有些并非整张表
    • 改换数据格式和表示,视图能够再次来到与底层表格式区别的数码
  • 视图的接纳准则

    • 独一命名
    • 视图数目没有界定
    • 创立视图必要权限
    • 视图能够嵌套,能够接纳另外视图来布局视图
    • 视图能够利用 O本田UR-VDE劲客 BY,然则 SELECT 中的 OMuranoDE索罗德 BY 会覆盖视图中的 O奥德赛DE奥迪Q5 BY
    • 视图不可能引得,也不可能有提到的触发器或暗许值
    • 视图能够和表一齐行使,能够联结表和视图
  • 利用视图

    • CREATE VIEW 创制视图
    • SHOW CREATE VIEW viewname; 查看所创办的视图
    • DROP 删除视图
    • 更新视图,能够先删除再创造,也得以选拔 CREATE O宝马7系 PEPLACE VIEW
  • 行使视图简化复杂的联合:创设有时表,增加灵活性

  • 用视图重新格式化检索出的数额:视图可以依照供给创建列名

  • 运用视图过滤不想要的数量:通过视图过滤数据后代替表使用

  • 选取视图简化计算字段

  • 视图一般用于检索,不用于更新

MYSQL入门上学之十五:事务管理的基本操作

一、用INSERT INTO 插入数据

  1、子查询

  作为子查询的SELECT语句只好查询单个列。盘算检索多个列将赶回错误。

-- 作为查询条件使用
-- 查看TNT2订单对应的客户ip(order表)
SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2');
-- 根据TNT2订单的客户ip查看客户信息(cust表)
SELECT cust_name, cust_contact FROM customers WHERE cust_id IN (SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2'));
-- 作为计算字段使用
-- 计算每个客户的订单数据
SELECT cust_name, cust_state, (SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders FROM customers ORDER BY cust_name;

第二十三章 使用存款和储蓄进程

  • 存款和储蓄进程是一条或然多条SQL语句的见面,类似于批文件

  • 采取存款和储蓄进程的说辞(简单、安全、高品质)

    • 简化复杂操作
    • 以免错误
    • 简化对转移的保管
    • 坚实品质
  • 创办和运用存款和储蓄进程都亟需权限

  • 创制存款和储蓄进程

    //创建一个名为productpricing的存储过程
    CREATE PROCECURE productpricing()
    BEGIN
        SELECT Avg(prod_price) AS priceaverage
        FROM products;
    END
    
  • 进行存储进度

    CALL productpricing (
        @pricelow,
        @pricehigh,
        @priceaverage
    );
    
  • 利用存款和储蓄进程

    CALL productpricing();  
    
  • 删除存款和储蓄进度

    DROP PROCEDURE productpricing IF EXISTS;
    

 

二、更新和删除数据 UPDATE DELETE

  2、创立链接

 图片示例  链接方式 关键字 语句示例
  内连接 INNER JOIN ... ON SELECT <select_list> FROM A INNER JOIN B ON A.key = B.key
左外连接 LEFT JOIN ... ON SELECT <select_list> FROM A LEFT JOIN B ON A.key = B.key
左外连接 LEFT JOIN ... ON ... WHERE B.key IS NULL SELECT <select_list> FROM A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL
右外连接 RIGHT JOIN ... ON SELECT <select_list> FROM A RIGHT JOIN B ON A.key = B.key
右外连接 RIGHT JOIN ... ON ... WHERE A.key IS NULL SELECT <select_list> FROM A RIGHT JOIN B ON A.key = B.key WHERE A.key IS NULL
全外连接 UNION

SELECT <select_list> FROM A LEFT JOIN B ON A.key = B.key

UNION

SELECT <select_list> FROM A RIGHT JOIN B ON A.key = B.key

全外连接 (WHER IS NULL) UNION ... (WHER IS NULL)

SELECT <select_list> FROM A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL

UNION

SELECT <select_list> FROM A RIGHT JOIN B ON A.key = B.key WHERE A.key IS NULL

   用例:

-- 笛卡尔积:n * m
-- SELECT * FROM vendors, products;
SELECT orders.cust_id, cust_name FROM orders CROSS JOIN customers;-- 没有WHERE子句
-- 内连接
-- SELECT * FROM vendors, products WHERE vendors.vend_id = products.vend_id;
SELECT * FROM vendors INNER JOIN products on vendors.vend_id = products.vend_id;
-- 左外连接(a),根据A表相应字段取列
SELECT orders.cust_id, cust_name FROM orders LEFT JOIN customers on customers.cust_id = orders.cust_id;
-- 左外连接b,只取A表中无B表相应字段的列
SELECT vendors.vend_id, vend_name, vend_country  FROM vendors LEFT JOIN products on vendors.vend_id = products.vend_id where products.vend_id IS NULL ORDER BY vend_id;
-- 右外连接(a),同左外连接(a)
SELECT orders.cust_id, cust_name FROM orders RIGHT JOIN customers on customers.cust_id = orders.cust_id;
-- 右外连接(b),同左外连接(b)
SELECT customers.cust_id, cust_name FROM orders RIGHT JOIN customers on customers.cust_id = orders.cust_id WHERE orders.cust_id IS NULL;

-- 全外连接,两者id相等的行和不相等的行都保留
SELECT customers.cust_id, orders.order_num FROM orders LEFT JOIN customers on customers.cust_id = orders.cust_id
UNION
SELECT customers.cust_id, orders.order_num FROM orders RIGHT JOIN customers on customers.cust_id = orders.cust_id;
-- 全外连接,只保留两者id不相等的行,这里两个WHERE子句一样是因为customers的id字段完全包含orders中的字段
SELECT customers.cust_id, orders.order_num FROM orders LEFT JOIN customers on customers.cust_id = orders.cust_id WHERE orders.cust_id IS NULL
UNION
SELECT customers.cust_id, orders.order_num FROM orders RIGHT JOIN customers on customers.cust_id = orders.cust_id WHERE orders.cust_id IS NULL

第二十四章 使用游标

  • 游标(cursor)是三个积攒在MySQL服务器上边包车型客车数据库查询,能够在追寻的结果凑集滚动到某一行举办操作

  • 使用游标

    • 声称游标
    • 打开游标
    • 行使游标抽出须求的行并管理
    • 关闭游标

相关链接:

三、成立和操纵表
1.创建表
CREATE TABLE创设表,必得付出下列音讯:
1) 新表的名字,在重大字CREATE TABLE之后
2) 表列的名字和定义,用逗号分隔
CREATE TABLE customers
(
cust_id int NOT NULL AUTO_INCREMENT,
cust_name char(50) NOT NULL,
cust_address char(50) NULL,
cust_city char(50) NULL,
cust_MySQL必知必会,读书笔记4。state char(5) NULL,
cust_zip char(10) NULL,
cust_country char(50) NULL,
cust_contact char(50) NULL,
cust_email char(255) NULL,
primaryKEY (cust_id)
) ENGINE = InnoDB;
有以下几点须求注意:
1)个中主键也得以用四个列组成,如orderitems表中在主键表示如下:
PRIMARY KEY(order_num,order_item)
主键只可以采纳不容许NULL值的列。
2)每一种表只允许贰个AUTO_INCREMENT列。可用SELECT last_insert_id()获取最后一个AUTO_INCREMENT值。
3)用DEFAULT钦定私下认可值
4)引擎类型
InnoDB是叁个保证的东西管理引擎,它不帮忙全文本寻觅
MEMOEnclaveY在效果与利益上等同于MyISAM,但鉴于数量存款和储蓄在内部存款和储蓄器中,速度火速(特适合于有时表)
MyISAM是三个本性极高的斯特林发动机,它援助全文本找出,但不支持事物管理
电动机能够混用,但外键不可能夸引擎。
2.更新表
必需提供以下音讯:
1)在ALTEEscort TABLE之后给出要退换的表名
2)改换的列表
ALTER TABLE vendors ADD vend_phone CHA本田UR-V(20);//扩展贰个新列
ALTER TABLE vendors DROP vend_phone;//删除三个列
ALTER TABLE vendors MODIFY vend_phone VARCHAPRADO2(15);//修改列宽
概念外键:
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_orders FOREIGN KEY (order_num) REFERENCE orders(order_num);
CONSTRAINT fk_orderitems_orders 定义完整性约束名
FOREIGN KEY (order_num) 外键
REFERENCE orders(order_num) 参照约束
3.刨除表格
DROP TABLE customers;
4.重命名表
RENAME TABLE backup_customers TO customers;

  3、视图

  视图是杜撰的表。它只富含使用时动态检索数据的查询,换言之,视图存款和储蓄查询语句。保存查询语句能够动用视图。视图的一对条条框框:

  - 与表名相同,视图必需唯一命名。

  - 视图数目未有限制。

  - 为了创立视图,必需有所丰富的访谈权限。

  - 视图能够嵌套。

  - 视图查询中不要选用GROUP BY。

  - 视图无法引得,也不能有涉嫌的触发器或默许值。

-- 创建视图
-- CREATE VIEW viewname 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;

CREATE VIEW orderitemsexpanded AS SELECT order_num, prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM orderitems;

-- 执行视图查询时会首先执行视图
SELECT cust_name, cust_contact FROM productcustomers WHERE prod_id ='FB';
SELECT * FROM orderitemsexpanded WHERE order_num = 20009;
-- 删除视图
-- DROP VIEW viewname;
DROP VIEW productcustomers;

第二十五章 使用触发器

  • 触发器是在事变发生时自动试行的一条MySQL语句

    • DELETE
    • INSERT
    • UPDATE
  • 始建触发器

    • 独一的触发器名
    • 关系的表
    • 一呼百应的运动(DELETE、INSERT或UPDATE)
    • 何时实施(管理此前照旧后来)
    • 独有表才帮助触发器
    • 触发器按每一个表每一种事件每趟地定义
    • 各样表每一种事件每一次只允许三个触发器
    • 每一种表最多协助6个触发器(INSERT UPDATE 和 DELETE 的前头和未来)
// 创建一个名为 newproduct 的触发器,在 products 表每次 INSERT 之后输出 'Product added'
CREATE TRIGGER newproduct AFTER INSERT ON products 
FOR EACH ROW SELECT 'Product added';
  • 去除触发器
    • DELETE TRIGGER newproduct;
  • 动用触发器
    • INSERT 触发器
      • 能够援用二个名称叫 NEW 的虚构表,访谈被插入的行
      • 平常 BEFORE 触发器用于数据表明,AFTEENVISION 触发器用于查询数据
    • DELETE 触发器
      • 能够援引二个名叫 OLD 的虚构表,访问被删去的行
    • UPDATE 触发器
      • 能够援引贰个名字为 OLD 的设想表,访问被更新此前的值
      • 能够引用三个名称叫 NEW 的设想表,访问被更新之后的值

MYSQL入门上学之一:基本操作

四、采取视图
视图是虚拟的表。与满含数据的表不平等,视图只含有使用时动态检索数据的询问。
视图不带有表中应该某个任何列或数量,它含有的是一个SQL查询。视图仅仅用来查看存储在别处数据的一种配备。视图本人不包括数据,由此它们再次回到的数码是从其余表中检索出来的。在加上或更换这么些表中的数额时,视图将回到改换过的多少。每便使用视图时,都必须处理查询实施时所急需的任一检索。
视图不可能引得,也不能够有关系的触发器或默许值。
1.接纳视图
1)视图用CREATE VIEW来创建
2)使用SHOW CREATE VIEW viewname;来查阅制造视图的言辞
3)用DROP删除视图,其语法为DROP VIEW viewname;

二、存款和储蓄进度

第二十六章 处总管务管理

  • 事务管理用来维护数据库的完整性,它保险成批的MySQL操作依然完全施行,要么完全不推行

  • 不是有所的数据库引擎都扶助事务管理

    • MyISAM 不支持
    • InnoDB 支持
  • 多少个术语

    • 事务 一组SQL语句
    • 回降 撤除内定SQL语句
    • 付出 将未存款和储蓄的SQL语句结果写入数据库表
    • 保留点 指事务管理中安装的权且占位符
  • 调控事务管理

    • 关键在于将SQL语句组分解为逻辑块,并鲜明规定数据曾几何时应该回落,哪一天不应当回降
  • 业务初阶 START TRANSACTION

  • 回退 ROLLBACK

    • ROLLBACK 只可以在一个事务管理内采纳,在施行一条 START TRANSACTION 命令之后
    • INSERT UPDATE DELETE 能够回降
    • SELECT CREATE DROP 无法回落
  • 提交 COMMIT

    • 为了有限支撑 SQL 操作不是被部分管理,能够放在职业块中管理
    • 在事务管理块中,提交不会含有的交付,须要选取 COMMIT 鲜明的交给
    • 独有事务块中全体语句都无庸置疑推行,才会施行 COMMIT
  • 当 ROLLBACK 和 COMMIT 实践后,事务会自动关闭

  • 采取保留点

    • 轻巧易行的 ROLLBACK 和 COMMIT 能够写入或许吊销全体事务管理,更复杂的或是要有的交给只怕回降
    • 增添占位符,纵然供给回落,能够回落到某些占位符(保留点)
    • 开创保留点 SAVEPOINT delete;
    • 回降到保留点 ROLLBACK TO delete;

  1. 更新视图时,能够先用DROP再用CREATE,也得以直接用CREATE O福特Explorer REPLACE VIEW。
    举个栗子:

    图片 1

  1、存款和储蓄进度

第二十七章 全世界化和本地化

  • 字符集 字母和符号的成团
  • 编码 字符集的个中表示
  • 核对 为规定的字符如何相比较的吩咐
  • 能够给一定的表大概列定义字符集和查对,不点名的话就利用数据库暗许

MYSQL入门上学之二:使用正则表明式寻找

2.**更新视图**  
有时,视图是可更新的(即可以对它们使用INSERT、UPDATE和DELETE),对视图增加或删除行,实际上是对其基表增加或删除行。  
但是,如果视图定义中有以下操作,则不能进行更新:  
1) 分组(使用GROUP BY和HAVING)  
2) 联结  
3) 子查询  
4) 并  
5) 聚集函数  
6) DISTINCT  
7) 导出(计算)列

  1.简介

  存款和储蓄过程是累积在数据库目录中的一段申明性SQL语句。它疑似编制程序语言中的函数可能可实行代码块。通过声喜宝(Hipp)段可进行的SQL语句,不仅能够幸免一行行的输入SQL语句,又足以将这段SQL语木神复使用。

  存款和储蓄进程的长处:

  - 常常存款和储蓄进程有利于增高应用程序的属性。

  - 存款和储蓄进程有利于削减应用程序和数据库服务器之间的流量,因为应用程序不必发送多个冗长的SQL语句,而不得不发送存款和储蓄进度的名目和参数。

  - 存款和储蓄的前后相继对其它应用程序都以可选用的和晶莹剔透的。

  - 存储的程序是安枕无忧的。

  存款和储蓄进度的短处:

  - 假如应用大批量囤积进程,那么使用那些囤积进度的种种连接的内部存款和储蓄器使用量将会大大增添。

  - 存款和储蓄进度的组织使得开拓具备复杂专业逻辑的积累过程变得愈加勤奋。

  - 很难调节和测量检验存储进程。

  - 开采和珍视存款和储蓄进程并不轻便。

第二十八章 安全保管

  • 访谈调控
    • 客商对必要的多少具备确切的访谈权
    • root是极品质量管理理理员,应该制造一名目多数的账号,开放分裂的权杖,给有关的人口选拔
  • 客商处理
    • MySQL的客户账号和音信存储在mysql表中
    • 开创客户
      • CREATE USER ben IDENTIFIED BY 'p@$$wOrd';
      • REMANE USER ben TO mark;
    • 剔除顾客
      • DROP USER mark;
    • 安装访谈权限
      • 翻开客户权限 SHOW GRANTS FOLAND mark;
      • 使用 GRANT 设置权限
        • 要予以的权能
        • 被给予权限的数据库可能表
        • 用户名
      • 动用 REVOKE 撤消权限
      • GRANT 和 REVOKE 可以在多少个档次上决定访问权限
        • 方方面面服务器
        • 全体数据库
        • 一定的表
        • 一定的列
        • 一定的仓库储存进程
      • 改换密码 SET PASSWOTiggoD FO凯雷德 mark = PASSWO宝马7系D('123456');
        • 不点名顾客名时,修改的是当前报到客商的密码

五、使用存款和储蓄进度
积存进程轻松的话,就是为后来的运用而保留的一条或多条MySQL语句的联谊。可将其正是批文件,固然它们的功力不仅只限于批管理。
仓库储存进度有3个重要的好处:轻巧、安全、高品质。
创办进程

  2.使用

-- 创建存储过程
DELIMITER // -- DELIMITER // 和DELIMITER;用于划分一块范围来声明存储过程
CREATE PROCEDURE GetAllProducts()-- CRAET PROCEDURE 创建一个存储过程
   BEGIN-- 存储过程的主体的开始
   DECLARE id INT(20) DEFAULT 1003;-- DECLARE variable datatype(size) DEFAULT value,声明局部变量;它只能在BEGIN和END之间生效
    SET id = 1001;-- 变量赋值
   SELECT * FROM products WHERE vend_id = id;-- SQL语句
   END //-- 存储过程的主体的结束,结尾用//
DELIMITER ;

-- 调用存储过程
CALL GetAllProducts();
-- 删除存储过程
DROP PROCEDURE IF EXISTS `GetAllProducts`;

-- 设置参数
DELIMITER //
CREATE PROCEDURE GetProductsByVendId(IN id INT(20), OUT outcome VARCHAR(20))-- 参数默认前缀是IN,即只允许调用函数时给参数传递值;OUT则表示将存储过程的运行结果传递出去,它是个单值参数;
    BEGIN
    SELECT count(*) INTO outcome FROM products WHERE vend_id = id;
    END //
DELIMITER ;
CALL GetProductsByVendId(1003, @outcome);-- 不直接打印结果,而是把结果传递给了全局变量@outcome
SELECT @outcome;-- 设置全局变量可以用SET variable = value;

-- 条件语句
/* IF condition THEN 
    sql
ELSEIF condition THEN
    sql
...
ELSE 
    sql
END IF */

DELIMITER //
CREATE PROCEDURE GetPriceLevel(IN prod_id CHAR(10), OUT price_level VARCHAR(20))
    BEGIN
    DECLARE price DECIMAL(8,2);
    SELECT prod_price INTO price FROM products WHERE products.prod_id = prod_id;

    IF price <= 5 THEN
        SET price_level = 'cheap';
    ELSEIF (price > 5 AND price <= 10) THEN
        SET price_level = 'ordinary';
    ELSE
        SET price_level = 'expensive';
    END IF;
    END //
DELIMITER ;
CALL GetPriceLevel('ANV01', @price_list);
SELECT @price_list;

-- 循环语句
/* WHILE condition DO
   statements
END WHILE */
-- 函数 略
-- 游标 https://www.yiibai.com/mysql/cursor.htm

第二十九歌 数据库维护

  • 备份数据
    • mysqldump
    • mysqlhotcopy
    • BACKUO TABLE 或者 SELECT INTO OUTFILE
  • 数据库维护
    • ANALYZE TABLE 检查表键是或不是正规
    • CHECK TABLE
    • OPTIMIZE TABLE
  • 会诊运转问题
    • --help 呈现扶助
    • --safe-mode 装载减去一些最棒配置的服务器
    • --verbose 显示全文音信
    • --version 呈现版本新闻后脱离
  • 查阅日志文件
    • 谬误日志 hostname.err
    • 询问日志 hostname.log
    • 二进制日志 hostname-bin
    • 慢性查询日志 hostname-show.log 记录实施缓慢的其它查询,优化数据库时很有用

MYSQL入门上学之三:全文本寻找

图片 2

  2、事务管理

第三十章 改革质量

  • 硬件
  • 内部存储器分配、缓冲区大小
  • 关切试行缓慢的进程
  • 考试搜索顶级的SQL语句
  • 存款和储蓄进程一般比一条条施行sql要快
  • 总是选择精确的数据类型
  • 不用检Sobi必要还多的数目
  • 创制施用索引
  • 使用SELECT UNION 替代一文山会海复杂的 OENCORE 条件
  • 每条准则在少数标准下都会被打破

删除存款和储蓄进度
DROP PROCEDURE productpricing;//当海市蜃楼时报错
DROP PROCEDURE productpricing IF EXISTS;//仅当存在时去除,不设有时不报错
实行存款和储蓄进度
MySQL称存款和储蓄进度的实践为调用,因而MySQL试行存款和储蓄进度的说话为CALL。CALL接受存款和储蓄进程的名字以及供给传递给它的即兴参数。
一般,存款和储蓄进程并不显示结果,而是把结果回到给你内定的变量。
变量:内部存款和储蓄器中二个一定的职位,用来一时存款和储蓄数据。全部MySQL变量必需以@开始。

  1.概念

  事务管理(transaction processing)用于保险SQL操作的完整性。它提供一种管理体制来应对SQL恐怕别的意况因素恐怕导致的不胜结果。事务管理中的多少个术语:

  - 事务(transaction),指一组SQL语句。

  - 回落(rollback),指撤废钦点SQL语句的长河。

  - 提交(commit),指将未存款和储蓄的SQL语句结果些人多少库表。

  - 保留点(savepoint),指事务管理中安装的权且占位符(placeholder),它可以回落。

  事务管理用来管理(能够回落)INSERT、UPDATE和DELETE语句,不可能回落SELECT语句,也不能够回落CREATE或然DROP操作。

  在MySQL中,事务最早应用COMMIT或ROLLBACK语句开始职业和终止。开端和了结语句的SQL命令之间产生了大批量的作业。

MYSQL入门上学之四:MYSQL的数据类型

图片 3

  2.ACID特性

  事务有以下八个标准属性的缩写ACID,经常被称之为:

  - 原子性: 指事务是多少个不得再分叉的做事单元,事务中的操作照旧都发出,要么都不发生。

  - 一致性: 在事情初阶在此之前和事情停止现在,数据库的完整性约束未有被毁损。那是说数据库事务无法破坏关周详据的完整性以及工作逻辑上的一致性。

  - 隔开性: 多少个事情并发访谈时,事务之间是割裂的,一个事务不该影响别的业务运维效果。

  - 长久性: 在专门的学业达成今后,该事务所对数据库所作的更改便悠久的保留在数据库之中,并不会被回滚。

显示出检索的数据
SELECT @pricehigh,@pricelow,@priceaverage;

  3.简练用例

-- MySQL默认出错自动回滚,没出错自动提交
BEGIN;
SAVEPOINT place;
INSERT INTO orders VALUES(20010, '2005-09-08 00:00:00', 10001);
ROLLBACK;-- ROLLBACK place
COMMIT

  在COMMIT提交在此之前,ROLLBACK语句来打消事务中所做的每一类职业,固然职业是大功告成的也得以裁撤,它能够直接撤除到事情的起来。在COMMIT提交之后,只好使用DELETE,INSERT或许UPDATE语句,ROLLBACK是老大的。

MYSQL入门上学之五:MYSQL的字符集

图片 4

三、访问调整和客户权限管理

  内容摘自MySQL教程()

上面看贰个整机进程的栗子:

  1、访谈调节

  当客户端连接到服务器时,MySQL访问调整有三个级次:

  - 接二连三验证:连接到MySQL数据库服务器的客商端需求有三个管用的客户名和密码。别的,顾客端连接的主机必需与MySQL授权表中的主机相相配。

  - 呼吁验证:当连接成功创设后,对于顾客端发出的每种语句,MySQL会检查客商端是或不是具有丰富的权限来实施该特定语句。 MySQL能够检查数据库,表和字段等第的权杖。

  MySQL安装程序自动成立叁个名称为mysql的数据库。 mysql数据库包罗七个珍贵的授权表(user、db、host、tables_priv和columns_priv),它们存款和储蓄了区别等级上对客户权限的设置。并可经过GRANT和REVOKE等说话间接操作这一个表。

表名 权限
mysql.user  包含用户帐户和全局权限列。MySQL使用user表来接受或拒绝来自主机的连接。 在user表中授予的权限对MySQL服务器上的所有数据库都有效
mysql.db  包含数据库级权限。MySQL使用数据库表来确定用户可以访问哪个数据库以及哪个主机。在db表中的数据库级授予的特权适用于数据库,所有对象属于该数据库,例如表,触发器,视图,存储过程等
mysql.table_priv  包含表级别权限,权限适用于表中所有列
mysql.columns_priv  授予的权限只适用于字段
mysql.procs_priv  包含存储函数和存储过程的权限

MYSQL入门上学之六:MYSQL的运算符

图片 5

  2、顾客权限处理

  MySQL8之上提供了role对象开展多顾客权限管理。

/* GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user_specification [, user_specification] ...
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
    [WITH with_option ...]
*/

-- 创建单个用户账户
-- CREATE USER username@localhost IDENTIFIED BY passwd
CREATE USER dbadmin@localhost IDENTIFIED BY 'pwd123';
-- 查看该用户权限
SHOW GRANTS FOR dbadmin@localhost;
-- 赋予该用户操作权限
GRANT ALL PRIVILEGES ON test.customer TO dbadmin@localhost;-- 可以到mysql.table_priv授权表中查看设置
-- 更新
FLUSH PRIVILEGES;
SHOW GRANTS FOR dbadmin@localhost;
SELECT * FROM mysql.user;
-- 删除权限
REVOKE ALL PRIVILEGES ON test.customer FROM dbadmin@localhost;

  dbadmin@localhost用来钦赐账户名和主机地址。

  GRANT子句设置客商权限,富含对数码库级、表级、字段、查询语句等的设置。

权限 含义 全局 数据库 过程 代理
ALL [PRIVILEGES] 授予除了GRANT OPTION之外的指定访问级别的所有权限            
ALTER 允许用户使用ALTER TABLE语句 x x x      
ALTER ROUTINE 允许用户更改或删除存储程序 x x     x  
CREATE 允许用户创建数据库和表 x x x      
CREATE ROUTINE x x          
CREATE TABLESPACE 允许用户创建,更改或删除表空间和日志文件组 x          
CREATE TEMPORARY TABLES 允许用户使用CREATE TEMPORARY TABLE创建临时表 x x        
CREATE USER 允许用户使用CREATE USERDROP USERRENAME USERREVOKE ALL PRIVILEGES语句。 x          
CREATE VIEW 允许用户创建或修改视图 x x x      
DELETE 允许用户使用DELETE x x x      
DROP 允许用户删除数据库,表和视图 x x x      
EVENT 能够使用事件计划的事件 x x        
EXECUTE 允许用户执行存储过程/存储函数 x x        
FILE 允许用户读取数据库目录中的任何文件 x          
GRANT OPTION 允许用户有权授予或撤销其他帐户的权限 x x x   x x
INDEX 允许用户创建或删除索引 x x x      
INSERT 允许用户使用INSERT语句 x x x x    
LOCK TABLES 允许用户在具有SELECT权限的表上使用LOCK TABLES x x        
PROCESS 允许用户使用SHOW PROCESSLIST语句查看所有进程 x          
PROXY 启用用户代理            
REFERENCES 允许用户创建外键 x x x x    
RELOAD 允许用户使用FLUSH操作 x          
REPLICATION CLIENT 允许用户查询主服务器或从服务器的位置 x          
REPLICATION SLAVE 允许用户使用复制从站从主机读取二进制日志事件 x          
SELECT 允许用户使用SELECT语句 x x x x    
SHOW DATABASES 允许用户显示所有数据库 x          
SHOW VIEW 允许用户使用SHOW CREATE VIEW语句 x x x      
SHUTDOWN 允许用户使用mysqladmin shutdown命令 x          
SUPER 允许用户使用其他管理操作,如CHANGE MASTER TOKILLPURGE BINARY LOGSSET GLOBALmysqladmin命令 x          
TRIGGER 允许用户使用TRIGGER操作 x x x      
UPDATE 允许用户使用UPDATE语句 x x x x    
USAGE 相当于“无权限”          

反省存款和储蓄进度
SHOW CREATE PROCEDURE ordertotal;

MYSQL入门上学之七:MYSQL常用函数

图片 6

为了博取包罗什么时候,由什么人创立等详细音讯的蕴藏进度列表,使用SHOW PROCEDURE STATUS,况且可用LIKE钦赐一个过滤格局,举个例子:
SHOW PROCEDURE STATUS LIKE ‘ordertotal’;

MYSQL入门上学之八:数据库及表的基本操作

六、选取游标
用DECLARE创设游标,eg:DECLARE ordernumbers cursor
开拓/关闭游标:OPEN ordernumbers;/CLOSE ordernumbers;
行使游标数据:FETCH ordernumbers INTO o;
请看使用实例(有注释表明)

图片 7

MYSQL入门上学之九:索引的简单操作

七、运用触发器
1.触发器
触发器是MySQL响应以下大肆语句而机关实践的一条MySQL语句(或放在BEGIN和END语句之间的一组语句):
DELETE INSERT UPDATE
2.开立触发器
始建触发器时,须求提交4条音信:

  1. 独一的触发器名;
  2. 触发器关联的表
  3. 触发器应该响应的位移(DELETE、INSERT或UPDATE)
  4. 触发器何时试行(管理在此以前或之后)
    只有表能够支撑触发器,视图不协助(不常表也不援助)。

MYSQL入门上学之十:视图的基本操作

![](https://upload-images.jianshu.io/upload_images/1926574-8fff0cb9ef10dbf6.png)



![](https://upload-images.jianshu.io/upload_images/1926574-1a2ccb7f6f0e0098.png)



这里用CREATE
TRIGGER创建一个名为newproduct的新触发器。触发器可在一个操作发生之前或之后执行,这里给出了AFTER
INSERT,所以触发器将在INSERT语句成功后执行。这个触发器还制定了FOR
EACH ROW,因此代码对每个插入行执行。在这个例子中,文本Product
added将对每个插入的行显示一次。  
☆触发器按每个表每个时间每次的定义,每个表每个时间每次只能定义一个触发器,因此一个表最多支持6个触发器(INSERT,UPDATE和DELETE之前或之后)。  
3.删除触发器:  
DROP TRIGGER newproduct;  
4.1 INSERT触发器  
1)在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行;  
2)在BEFORE
INSERT触发器中,NEW中的值可以被更新(允许更改被插入的值)  
3)对于AUTO_INCREMENT列,NEW在INSERRT执行之前包含0,在执行之后包含新的自动生成的值。  
CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT
NEW.ORDER_num;  
4.2.DELETE触发器  
1)在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行  
2)OLD中的值全部都是只读的,不能更新。



![](https://upload-images.jianshu.io/upload_images/1926574-cefe02efd309791e.png)


4.3update触发器  
1)可以用OLD的虚拟表访问以前的值,也可以用名为NEW的虚拟表访问新更新的值  
2)在BEFFORE UPDATE触发器中,NEW中的值可能也被更新  
3)OLD中的值全部都是只读的,不能更新

八、治工夫务管理
事务管理能够用来有限支撑数据库的完整性,它保险成批的MySQL操作照旧完全实施,要么完全不实施。
事务:指一组SQL语句
回落:指打消内定SQL语句的经过
交付:指将未存款和储蓄的SQL语句结果写入数据库表
保留点:值事务管理中装置的偶然占位符,你能够对它揭穿回落。
1.说了算事务管理
管制事务管理的关键在于将SQL语句组分解为逻辑块,并分明规定数据哪天应该回降,几时不应有回落。
START TRANSACTION//标识是业务开首
2.应用ROLLBACK用来回落MySQL语句
3.选择COMMIT语句显明提交
eg:

MYSQL入门上学之十一:触发器的基本操作

图片 8

4.选择保留点
粗略的ROLLBACK和COMMIT语句就能够写入或收回全体事务管理。然则,只是对简易的事务管理技巧那样做,更复杂的事务管理可能要求有个别交给或回落。
为了帮忙回落部分事务管理,必需使用保留点,可正如使用SAVEPOINHighlander语句:
SAVEPOINT delete1;
各样保留点都意味它的独一名字,以便回降时,MySQL知道要回降到何处。
ROLLBACK TO delete1;

MYSQL入门上学之十二:存款和储蓄进度的基本操作

  1. 改换暗许的提中信银行为
    为提醒MySQL不自动提交改动,供给运用以下语句:
    SET autocommit = 0;

九、字符集和核查顺序
CREATETABLE mytable
(
Column1 INT,
Column2 VARCHAR(0)
)DEAULT CHARACTER SET hebrew COLLATE hebrew_general_ci;
那条语句创造一个表,并且制定贰个字符集和叁个核查顺序
SHOW CHARACTEPAJERO SET;//能够查阅所协理的字符集完整列表
SHOW COLLATION; //查看所支撑的核查完整列表

MYSQL入门上学之十三:自定义函数的基本操作

十、管制客户
USE mysql;
SELECT user FROM user;
Mysql数据库有几个名称叫user的表,它包涵全部顾客账号。User表有贰个user列。
1.成立顾客账户
为开立异客户账户,使用CREATE USECR-V语句
CREATE USER ben IDENTIFIED BY ‘P@$$w0rd’;
始建叁个顾客名叫ben的客商,口令为P@$$w0rd。
RENAME USER ben TO bforta;
2.刨除客户账号
DROP USER bforta;
3.装置访谈权限
动用GRANT设置权限,必要提交以下音讯:
1)要给以的权位
2)被予以访谈权限的数据库或表
3)用户名

图片 9

MYSQL入门上学之十四:游标的基本操作

赋予bforta在crashcourse.*拥有SELECT权限。
可以用REVOKE撤除权限。

图片 10

 

4.转移口令
立异顾客口令
SET PASSWORD FOR bforta = Password(‘n3wp@$$w0rd’);
设置自身的口令
SET PASSWORD= Password(‘n3w p@$$w0rd’);

  事务管理(transaction processing)能够用来保卫安全数据库的完整性,它保证成批的MySQL操作依然完全实行,要么完全不施行。  www.2cto.com  

十一、数据库维护
ANALYZE TABLE:用来检查表键是不是科学
CHECK TABLE:用来针对广大标题对表进行反省

        可是绝不全部的数据库引擎都扶助事务管理。MyISAM和InnoDB是二种最常使用的引擎。前边一个不辅助明确的事务管理管理,而后人帮衬。

一、多少个事务管理相关的术语

        事务(transaction)指一组SQL语句;

        回落(rollback)指裁撤内定SQL语句的经过;

        提交(commit)指将未存款和储蓄的SQL语句结果写入数据库表;

        保留点(savepoint)指事务管理中安装的一时占位符(placeholder),能够对它揭破回落(与回落整个事务管理差别)。

 

二、调整事务管理

        处监护人务管理的关键在于将SQL语句组分解为逻辑块,并显明规定数据曾几何时应该回降,何时不应有回降。

1、最初职业

        START TRANSACTION;

        使用如上语句标记事务的启幕;

2、使用ROLLBACK

        ROLLBACK命令用来回降(打消)MySQL语句:

        上面包车型客车示范操作,首先起初三个作业,然后删除了表test_inn中的全部剧情,并查看表中的原委,展现表已被清空。但推行ROLLBACK回降事务后,重新查询表中的数据。表中的数码依旧还在:

[sql] 

mysql> start transaction;  

mysql> delete from test_inn;  

mysql> select * from test_inn;  

Empty set (0.00 sec)  

mysql> rollback;  

mysql> select * from test_inn;  

------ ------------  

| id   | birthday   |  

------ ------------  

|    1 | 2012-12-12 |  

|    1 | 0000-00-00 |  

|    1 | 2012-12-00 |  

|    1 | 0000-00-00 |  

------ ------------  

mysql> show create table test_inn;  

---------- ----------------------------  

| Table    | Create Table  

---------- ----------------------------  

| test_inn | CREATE TABLE `test_inn` (  

  `id` int(11) DEFAULT NULL,  

  `birthday` date DEFAULT NULL  

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |  

---------- ----------------------------  

        注意:上例中表test_inn使用的是InnoDB引擎,若多少个用到MyISAM引擎的表施行如上操作,则正是ROLLBACK后,能够窥见,数据如故被实实在在的清空。

3、使用COMMIT

        一般的MySQL语句都以包蕴提交(implicit commit)的,即提交(写或保存)操作是活动实行的。

        然则,在事务管理块中,提交不会含有实行。为开展精晓的付出,需求接纳COMMIT语句。

        示例:

[sql] 

mysql> start transaction;  

mysql> delete from test_inn;  

mysql> commit;  

        当COMMIT或ROLLBACK语句试行后,运转的事务会自动关闭。  

4、使用保留点

        为了扶助回落部分事务管理,必得在事务管理块中适当的量的任务放置保留点。

        创立保留点:SAVEPOINT sap_name;

        回降至保留点:ROLLBACK TO sap_name;

        释放保留点:RELEASE sp_name;

        保留点也能够在事务管理达成(推行一条ROLLBACK或COMMIT)后活动释放。

5、更动私下认可的交付行为

        SET autocommit=0;

        autocommit标记是针对性各样连接并不是服务器的。

参照:《MySQL必知必会》  

相关链接: MYSQL入门上学之一:基本操作 MYSQL入门上学之二...

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:MySQL必知必会,读书笔记4

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。