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;