MySQL 批量模式
Peter
什麼是批量模式
•從文件中讀取標準SQL 命令
•經過交互模式進行詢問
•爲何須要使用批量模式
–重複進行相同詢問
–能夠經過管道, 詳細查詢返回結果
–能夠把查詢結果輸出到文件中
–能夠很方便把腳本分配給其餘用戶
–cron job
以批量模式創建表單
•mysql>CREATE TABLE my_address ( first_name varchar(20), last_name varchar(20), email varchar(50), birth DATE )
•批量模式創建方法
CREATE TABLE my_address
(
first_name varchar(20) NOT NULL,
last_name varchar(20) NOT NULL,
email varchar(50) NULL,
birth DATE DEFAUTL 「1970-01-01」
)
批量模式查詢
•mysql>SELECT pet.name, pet.species, pet.sex,
->event.type, event.remark
-> FROM pet, event
-> WHERE pet.name = event.name AND
-> ( pet.name=「Fluffy」or pet.name=「Buffy」);
•製做批量模式
SELECT pet.name, pet.species, pet.sex, event.type, event.remark
FROM pet, event
WHERE pet.name = event.name AND ( pet.name=「Fluffy」or pet.name=「Buffy」);
使用批量模式
•shell 下的批量模式
shell> mysql -h host -p root my_db < create_table.sql
shell> mysql -h host -p root my_db < query_table.sql
•shell 下得返回結果與mysql 下的返回結果略有區別
•使用-t 參數能夠獲得mysql 下的相同結果
•mysql 下的批量模式
mysql> source /query_table.sql
mysql> \. /query_table.sql
經常使用計算
•目標: 用於比較當前數據庫中商品價格
•創建商品數據庫
mysql> CREATE TABLE shop (
-> article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
-> dealer CHAR(20) DEFAULT '' NOT NULL,
-> price DOUBLE(16,2) DEFAULT '0.00' NOT NULL,
-> PRIMARY KEY(article, dealer));
通常操做
•插入數據並進行普通查詢
mysql> INSERT INTO shop VALUES
-> (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),
-> (3,'C',1.69),(3,'D',1.25),(4,'D',19.95);
•驗證數據
mysql>SELECT * FROM shop;
獲得當前表單最大值
•目標一: 獲得當前表單最大值
mysql> SELECT MAX(article) AS article FROM shop;
•AS 做爲表單數據輸出COLUMN 標題重命名
高級應用(例一)
•要獲得當前最大值的詳細信息, 如最貴的商品
mysql> SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop);
# 注意, 只可以在4.1 版本後使用
高級應用(例二)
•要獲得當前最大值的詳細信息, 如最貴的商品
•MySQL 4.1 前能夠經過兩步完成
第一步:
mysql> SELECT MAX(price) FROM shop;
第二步
mysql> SELECT article, dealer, price
-> FROM shop
-> WHERE price=19.95;
高級應用(例三)
•要獲得當前最大值的詳細信息, 如最貴的商品
mysql> SELECT article, dealer, price FROM shop ORDER BY price DESC LIMIT 1;
•缺點: LIMIT 只可以返回一個值, 存在多個價錢相同的商品的時候只會返回一個
高級應用(例四)
•目的: 查詢每種貨物價錢最貴的商品
•mysql> SELECT article, MAX(price) AS price FROM shop GROUP BY article;
高級應用(例五)
•使用組比較,獲得最大值, 並同時輸出其餘信息
mysql> SELECT article, dealer, price FROM shop s1 WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article);
•# 這個方法只可以用於MySQL 4.1 或之後版本
高級應用(例六)
•針對MySQL 4.1 以前版本的解決方法:
•第一步,獲得產品最大價錢配對
•第二步,爲每一個產品得到相對應行,得到最大值
mysql> CREATE TEMPORARY TABLE tmp (
article INT(4) UNSIGNED ZEROFILL
DEFAULT '0000' NOT NULL,
price DOUBLE(16,2) DEFAULT '0.00' NOT NULL);
mysql> LOCK TABLES shop READ;
高級應用(例六續)
mysql> INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;
mysql>SELECT shop.article, dealer, shop.price FROM shop, tmp WHERE shop.article=tmp.article AND shop.price=tmp.price;
mysql> UNLOCK TABLES;
Mysql> DROP TABLE tmp;
高級應用(變量使用)
•特別的例子方法:
•變量的使用
mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;
mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price; mysql
下載 sql