读书笔记2 MYSQL必知必会



// 第十六章 创建高级联结

// 使用表别名 缩短SQL语句
SELECT cust_name,cust_contact FROM customers AS c, orders AS o, orderitems AS oi
 WHERE c.cust_id = o.cust_id AND oi.order_num = o.order_num AND prod_id = 'TNT2';
// 自联结
SELECT p1.prod_id, p1.prod_name, FROM products AS p1, products AS p2 WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'DTNTR';
// 外部联结
SELECT customers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id;
// 使用带聚集函数的联结
SELECT customers.cust_name customers.cust_id, COUNT(orders.order_num) AS num_ord FROM customers INNER JOIN orders ON customers.cust_id = orders.cust_id GROUP BY customers.cust_id;


// 第十七章 组合查询

// 使用UNION 并集 变大
SELECT vend_id,prod_id,prod_price FROEM WHERE products <= 5 UNION SELECT vend_id,prod_id,prod_price FROM products WHERE vend_id IN (1001,1002);


// 第十八章 全文本搜索

// MyISAM和InnoDB 前者支持 或者不支持
// 启用全文本支持
CREATE TABLE productnotes (
 note_id int NOT NULL AUTO_INCREMENT,
 prod_id char(10) NOT NULL,
 note_data datetime NOT NULL,
 note_text text NULL,
 PRIMARY KEY(note_id),
 FULLTEXT(note_text)
)ENGINE = MyISAM;
// 进行全文本搜索 MAtch()指定被搜索的列,Against()指定要使用的搜索表达式
SELECT note_text FROM productnotes WHERE MAtch(note_text) Against('rabbit');
// 查询扩展
SELECT note_text FROM productnotes WHERE Match(note_text) Against('anvils' WITH QUERY EXPANSION);
// 布尔文本搜索
SELECT note_text FROM productnotes WHERE Match(note_text) Against('heavy' IN BOOLEAN MODE);
// 包含heavy但不包含任何以rope开始的词的行
SELECT note_text FROM productnotes WHERE Match(note_text) Against('heavy -rope*' IN BOOLEAN MODE);


// 第十九章 插入数据

// 插入完整的行
INSERT INTO Customers VALUES(NULL, 'Pep', '100sa', 'sa');
INSERT INTO customers(cust_name,cust_city,cust_zip) VALUES('hang','baoding','xian');
// 插入多行数据
INSERT INTO customers(cust_name,cust_city,cust_zip) VALUES
 ('miqi','yanan','xian'),('laoniu','xian','xian');
// 插入检索出的数据
INSERT INTO customers(cust_id,cust_contact,cust_email,cust_name) SELECT cust_id,cust_contact,cust_email,cust_name FROM custnew;


// 第二十章 更新和删除数据

// 更新一行数据
UPDATE customers SET cust_eamil = '[email protected]' WHERE cust_id = 10005;
// 更新多行数据
UPDATE customers SET cust_name = 'zhang', cust_email = '[email protected]' WHERE cust_id = 10005;
// 为了删除某个列的值 可设置它为NULL
UPDATE custmoers SET cust_eaml = NULL WHERE cust_id = 10005;
// 删除数据
DELETE FROM customers WHERE cust_id = 10006;


// 第二十一章 创建和操纵表

扫描二维码关注公众号,回复: 1619769 查看本文章

// 创建表
CREATE TABLE customers (
 cust_id int NUO NULL AUTO_INCREMENT,
 cust_name char(50) NOT NULL,
 cust_city char(50) NOT NULL,
 PRIMARY KEY(cust_id)
) ENGINE = InnoDB;
// 引擎类型
// InnoDB是一个可靠的事务处理引擎,不支持全文搜索;
// MEMORY在功能等同于MyISAM,但由于数据存储在内存中,速度很快,特别适合临时表;
// MyISAM是一个性能极高的引擎,支持全文搜索,但不支持事务处理;
// 更新表格
// 给表添加一个列
ALERT TABLE vendors ADD vend_phone CHAR(20);
// 删除刚刚添加的列
ALERT TABLE vendors DROP COLUMN vend_phone;
// 定义外键
ALERT TABLE orderitems ADD CONSTRAINT fk_orderitems_orders FOREGIN KEY (order_num) REFERENCE orders(order_num);
// 删除表
DROP TABLE customers2;
// 重命名表
RENAME TABLE customers2 TO customers;


// 第二十二章 使用视图

// 视图就是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询
SELECT cust_name,cust_contact FROM customers, orders, orderitems WHERE
customers.cust_id = orders.cust_id AND orderitems.order_num = orders.order_num AND prod.id = 'TNT2';
// 视图 productcustomers
SELECT cust_name,cust_contact FROM productcustomers WHERE prod_id = 'TNT2';
// 使用试图 创建:CREATE VIEW 查看创建视图的语句:SHOW CREATE VIEW viewname  删除视图:DROP VIEW viewname 
// 更新视图:可以先DROP再CREATE 或者 CREATE OR REPLACE
// 利用视图简化复杂的联结
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;
// 为检索订购了产品TNT2的客户
SELECT cust_name,cust_contact FROM productcustomers WHERE prod_id = 'TNT2';
// 用视图重新格式化检索出的数据
SELECT Concat(RTrim(vend_name),'(',RTrim(vend_country),')') AS vend_title FROM vendors ORDER BY vend_name;
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 customermaillist AS
SELECT cust_id,cust_name,cust_email FROM customers WHERE cust_eamil IS NOT NULL;
// 使用该视图
SELECT * FROM customeremaillist;
// 使用视图与计算字段
SELECT prod_id,quantity,item_price quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 2005;
CREATE VIEW orderitemsexpanded AS SELECT prod_id,quantity,item_price quantity*item_price AS expanded_price FROM orderitems;
// 使用该视图
SELECT * FROM orderitemsexpanded WHERE order_num = 200005;
// 更新视图
// 视图为虚拟表,他们包含的不是数据而是根据需要检索数据的查询,提供一种对mysql的select语句层次的封装,可用来
// 简化数据处理以及重新格式话基础数据或保护基础数据


// 第二十三章 使用存储过程

// 执行存储过程
CALL productpricing(@pricelow,@priceheight,@priceaverage);
// 创建存储过程
CREATE PROCEDURE productpricing() BEGIN SELECT Avg(prod_price) AS priceaverage FROM products END;
// 使用存储过程
CALL productpricing();
// 删除存储过程
DROP PROCEDURE productpricing;
// 使用参数
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;
// 使用该参数存储过程
CALL productpricing(@pricelow,@priceheight,@priceaverage);
// 使用in out 参数
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;
// 使用该存储过程
CALL ordertotal(20005,@total);
// 建立智能化存储,就是添加if语句
// 检查存储过程
SHOW CREATE PROCEDURE ordertotal;


// 第二十四章 使用游标

// 游标智能用于存储过程
// 游标的使用规则 1使用游标前必须声明它 2声明后必须打开游标以供使用  3对于填有数据的游标,根据需要取出各行
// 4游标结束后,必须关闭游标
// 创建游标
CREATE PROCEDURE processorders()
BEGIN
 DECLARE ordernumbers CURSOR
 FOR
 SELECT order_num FROM orders;
END;
// 打开和关闭游标
OPEN ordernumbers; CLOSE ordernumbers;


// 第二十五章 使用触发器

// 创建触发器
// 1唯一的触发器名;2触发器关联的表;3触发器应该响应的活动(DELETE\INSERT\UPDATA);4触发器何时执行
CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'Product added';
// 删除触发器
DROP TRIGGER newproduct;
// 使用触发器


// 第二十六章 事务管理
// ROLLBACK COMMIT 使用保留点SAVEPOINT


猜你喜欢

转载自blog.csdn.net/dote2r/article/details/78387931