文档章节

《MySQL必知必会》笔记2

fxdhdu
 fxdhdu
发布于 2016/03/01 11:33
字数 2037
阅读 41
收藏 5

2016/2/26-27

第二十一章创建和操纵表


创建表

CREATE TABLE语句


IF NOT EXISTS:查看表名是否存在,并且仅在表名不存在时创建它。


NULL列和NOT NULL列。(NULL为默认设置)


PRIMARY KEY:定义主键(可以单个列作为主键,也可以多个列组成主键)


主键中只能使用不允许NULL值的列。


AUTO_INCREMENT:(每个表只允许一个AUTO_INCREMENT列)

last_insert_id()函数:返回最后一个AUTO_INCREMENT值。


DEFAULT:指定默认值。MySQL不允许使用函数作为默认值,它只支持常量。


使用默认值而不是NULL值。


MySQL有多种引擎。

InnoDB:事务处理

MEMORY:功能同MyISAM,数据存储在内存。

MyISAM:全文本搜索


外键不能跨引擎:使用一个引擎的表不能引用具有使用不同引擎的表的外键。


ALTER TABLE语句:更新表

ALTER TABLE vendors
ADD vend_phone CHAR(20);

删除列

ALTER TABLE vendors
DROP COLUMN vend_phone;


ALTER TABLE的一种常见用途是定义外键。


删除表:DROP TABLE语句。删除表没有确认,也不能撤销。


重命名表:RENAME TABLE语句



第二十二章使用视图


视图:虚拟的表。视图仅仅是用来查看存储在别处的数据的一种设施。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。


利用视图简化复杂的联结

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;

SELECT cust_name, cust_contact
FROM productcustomers
WHERE prod_id = 'TNT2';


用视图重新格式化检索出的数据

CREATE VIEW vendorlocations AS
SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') AS vend_title
FROM vendors
ORDER BY vend_name;

SELECT *
FROM vendorlocations;


用视图过滤不想要的数据

CREATE VIEW customeremaillist AS
SELECT cust_id, cust_name, cust_email
FROM customers
WHERE cust_email IS NOT NULL;

SELECT *
FROM customeremaillist;


使用视图与计算字段

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

SELECT *
FROM orderitemsexpanded
WHERE order_num = 20005;



第二十三章使用存储过程


创建存储过程

DELIMITER //

CREATE PROCEDURE productpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverage
FROM products;
END //

DELIMITER ;

DELIMITER //    临时更改命令行实用程序的语句分隔符。

(mysql命令行实用程序使用;作为语句分隔符。如果命令行实用程序要解释存储过程自身内的;字符,则它们最终不会成为存储过程的成分,

这会使存储过程中的SQL出现句法错误)

DELIMITER ;      恢复。


执行存储过程(存储过程实际上是一种函数)

CALL productpricing();


删除存储过程

DROP PROCEDURE productpricing;


变量:内存中一个特定的位置,用来临时存储数据。

一般存储过程并不显示结果,而是把结果返回给你指定的变量。

DELIMITER //

CREATE PROCEDURE productpricing(
OUT p1 DECIMAL(8,2),
OUT ph DECIMAL(8,2),
OUT pa DECIMAL(8,2)
)
BEGIN
SELECT Min(prod_price)
INTO p1
FROM products;
SELECT Max(prod_price)
INTO ph
FROM products;
SELECT Avg(prod_price)
INTO pa
FROM products;
END //

DELIMITER ;

OUT:指出相应的参数用来从存储过程传出一个值(返回给调用者)

IN:传递给存储过程

INOUT:

INTO:保存到相应变量。


调用存储过程,及变量显示。

(所有MySQL变量必须以@开头)

CALL productpricing(	@pricelow,
@pricehigh,
@priceaverage);

SELECT @priceaverage;

SELECT @pricehigh, @pricelow, @priceaverage;



使用IN和OUT参数

DELIMITER //

CREATE PROCEDURE ordertotal(
IN onumber INT,
OUT ototal DECIMAL(8,2)
)
BEGIN
SELECT Sum(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO ototal;
END //

DELIMITER ;

CALL ordertotal(20005, @total);
SELECT @total;

CALL ordertotal(20009, @total);
SELECT @total;


建立智能存储过程

-- Name: ordertotal
-- Parameters: onumber = order number
--             taxable = 0 if not taxable, 1 if taxable
--             ototal  = order total variable

DELIMITER //

CREATE PROCEDURE ordertotal(
IN onumber INT,
IN taxable BOOLEAN,
OUT ototal DECIMAL(8,2)
)COMMENT 'Obtain order total, optionally adding tax'

BEGIN

-- Declare variable for total
DECLARE total DECIMAL(8,2);
-- Declare tax percentage
DECLARE taxrate INT DEFAULT 6;

-- Get the order total
SELECT Sum(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO total;

-- Is this taxable?
IF taxable THEN
-- Yes, so add taxrate to the total
SELECT total+(total/100*taxrate) INTO total;
END IF;

-- And finally, save to out variable
SELECT total INTO ototal

END//

DELIMITER ;

CALL ordertotal(20005, 0, @total);
SELECT @total;

CALL ordertotal(20005, 1, @total);
SELECT @total;

-- :注释

DECLARE语句:定义局部变量

COMMENT关键字:在SHOW PROCEDURE STATUS 的结果中显示的内容。


检查存储过程

显示用来创建一个存储过程的CREATE语句。

SHOW CREATE PROCEDURE ordertotal;


SHOW PROCEDURE STATUS LIKE 'ordertotal';



第二十四章使用游标


游标的使用原因:在检索出来的行中前进或后退一行或多行。


游标:一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。


游标主要用于交互式应用。


MySQL游标只能用于存储过程。


对游标结果进行循环以及逐行处理的技术。

DELIMITER //

CREATE PROCEDURE processorders()
BEGIN
-- Declare local variables
DECLARE done BOOLEAN DEFAULT 0;
DECLARE o INT;
DECLARE t DECIMAL(8,2);

-- Declare the cursor
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;

-- Declare continue handler
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;

-- Create a table to store the results
CREATE TABLE IF NOT EXISTS ordertotals
(order_num INT, total DECIMAL(8,2));


-- Open the cursor
OPEN ordernumbers;

-- Loop through all rows
REPEAT

-- Get order number
FETCH ordernumbers INTO o;

-- Get the total for this order
CALL ordertotal(o, 1, t);

-- Insert order and total into ordertotals
INSERT INTO ordertotals(order_num, total)
VALUES(o,t);


-- End of loop
UNTIL done END REPEAT;

-- Close the cursor
CLOSE ordernumbers;
END//

DELIMITER ;

CALL processorders();

SELECT *
FROM ordertotals;



第二十五章使用触发器


触发器是MySQL响应一下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句)

    DELETE;

    INSERT;

    UPDATE。



2016/2/28 

最新版本的MySQL无法执行书上的代码。



第二十六章管理事务处理


事务处理:维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。

(用来管理成批执行的MySQL操作,以保证数据库不包含不完整的操作结果)


事务:指一组SQL语句;

回退:

提交:

保留点:


SELECT * FROM ordertotals;
START TRANSACTION;
DELETE FROM ordertotals;
SELECT * FROM ordertotals;
ROLLBACK;
SELECT * FROM ordertotals;

START TRANSACTION语句标识事务的开始

ROLLBACK语句回退START TRANSACTION之后的所有语句。ROLLBACK只能在一个事务处理内使用。


事务处理用来管理INSERT、UPDATE和DELETE语句。

不能回退SELECT语句、CREATE或DROP操作。


隐含提交:一般的MySQL语句都是直接针对数据库表执行和编写的。提交(写或保存)操作时自动进行的。


事务处理块中,提交不会隐含地进行。进行明确提交。


使用COMMIT语句进行明确提交。

START TRANSACTION;
DELETE FROM orderitems WHERE order_num = 20010;
DELETE FROM orders WHERE order_num = 20010;
COMMIT;


COMMIT或ROLLBACK语句执行后,事务会自动关闭。


使用保留点:部分提交或回退;占位符;可以设置任意多的保留点。


释放保留点:事务处理完成后自动释放;或使用语句明确释放。


可设置MySQL不自动提交。



第二十七章全球化和本地化


字符集

编码

校对


SHOW CHARACTER SET; #查看所支持的字符集的完整列表

SHOW COLLATION; #查看所支持校对的完整列表

SHOW VARIABLES LIKE 'character%'; #确定所用的字符集和校对
SHOW VARIABLES LIKE 'collation%';

CREATE TABLE mytable #给表指定字符集和校对
(
columnn1 INT,
columnn2 VARCHAR(10)
)DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;

DROP TABLE mytable; #删除表

CREATE TABLE mytable
(
columnn1 INT,
columnn2 VARCHAR(10),
columnn3 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci #对某列单独设置字符集和校对
)DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;

SELECT *
FROM customers
ORDER BY lastname, firstname COLLATE latin1_general_cs; #用与创建表时不同的校对顺序排序特定的SELECT语句。



第二十八章安全管理


USE mysql;
SELECT user FROM user; #获得所有用户账号列表

CREATE USER ben IDENTIFIED BY 'p@$$w0rd'; #创建一个新的用户账号,并给出了一个口令

RENAME USER ben TO bforta; #重新命名一个用户账户

DROP USER bforta; #删除用户账户

SHOW GRANTS FOR bforta; #查看赋予用户账户的权限

GRANT SELECT ON crashcourse.* TO bforta; #设置权限;bforta用户对crashcourse数据库中的所有数据具有只读访问权限
#GRANT语句至少需要的信息
#要授予的权限
#被授予访问权限的数据库或表
#用户名

REVOKE SELECT ON crashcourse.* FROM bforta; #撤销特定权限

GRANT SELECT, INSERT ON crashcourse.* TO bforta; #赋予多条权限

SET PASSWORD FOR bforta = Password('n3w p@$$w0rd'); #更改用户口令

SET PASSWORD = Password('n3w p@$$w0rd'); #更改当前登入用户口令






© 著作权归作者所有

fxdhdu
粉丝 6
博文 50
码字总数 38322
作品 0
杭州
程序员
私信 提问
程序猿成长计划--growing-up

程序猿成长计划 程序员成长计划包含了作为一名程序猿成长过程中的所学,我把这些以教程的形式开源出来,供大家一起学习、补充,共同成长。 三十分钟学会AWK Docker学习笔记-基础命令 一小时学...

mylxsw
2016/11/30
973
0
程序员开发必知必会之正则表达式学习资料

正则表达式30分钟入门教程(https://deerchao.net/tutorials/regex/regex.htm) 本教程目标:30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用...

崔庆才
07/26
0
0
前端必知必会HTTP请求系列(二)简单一点的HTTP协议

http协议用户客户端和服务器之间的通信 http协议和TCP/IP协议族内的其他众多协议相同,用于客户端和服务器之间的通信。 那么问题来个如果两台服务器之间一台服务器向另一台服务器进行接口请求...

前端技术小哥
01/03
0
0
推荐《高性能MYSQL(第3版)》及 { MySQL性能管理及架构设计 }

最近项目所在服务器经常当机,我怀疑是不是数据库的问题,却不知从哪下手优化。 MySQL的性能优化一直是非常有必要学习的! 考虑 购买:《高性能MYSQL(第3版)》 同学福利:电子版终于找到:放...

phpervip
2017/09/30
0
0
《MySQL必知必会》笔记1

2016/2/21 数据库:保存有组织的数据的容器(通常是一个文件或一组文件) 数据库管理系统(DBMS):用于访问数据库。 表:某种特定类型数据的结构化清单。相同的数据库中表的名字是唯一的 模...

fxdhdu
2016/03/01
19
0

没有更多内容

加载失败,请刷新页面

加载更多

Tensorflow 2.0安装

Tensorflow2.0安装环境: Ubuntu 16.04或更高(64位) Windows 7或者更高(64位,且支持python3) 安装Tensorflow 2.0 GPU版本的需要安装NVIDIA相关软件包: NVIDIA驱动 :版本必须410.x或更...

JosiahMg
25分钟前
4
0
TL138/1808/6748F-EasyEVM开发板硬件、CPU、FLASH、RAM

TL138/1808/6748F-EasyEVM是广州创龙基于SOM-TL138/SOM-TL1808/SOM-TL6748F核心板开发的一款开发板。由于SOM-TL138/SOM-TL1808/SOM-TL6748核心板管脚兼容,所以此三个核心板共用同一个底板。...

Tronlong创龙
32分钟前
4
0
百度嵌入式AI解决方案EdgeBoard之内存驱动设计介绍

1. 背景介绍 由于 FPGA 具备可编程和高性能计算的特点,基于FPGA硬件的AI计算加速,正广泛地应用到计算机视觉处理领域。其中极具代表性的部署方式之一就是使用FPGA和CPU组合构成异构计算系统...

AI君
38分钟前
6
0
开放应用模型(OAM):全球首个云原生应用标准定义与架构模型

Kubernetes 项目作为容器编排领域的事实标准, 成功推动了诸如阿里云 Kubernetes (ACK)等云原生服务的迅速增长。但同时我们也关注到,Kubernetes 的核心 API 资源比如 Service、Deploymen...

Mr_zebra
41分钟前
4
0
《Linux操作系统-Exynos4412》编译和安装Busybox

开发环境:Exynos4412-iTOP-4412开发板 现在 Busybox 的配置已经完成了,接下来开始编译 Busybox,在 Ubuntu 的终端输入 “make”命令开始编译 Busybox,如下图。 下图为编译过程中的截图。 ...

书白
44分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部