1. 向表中加载数据
创建表之后,需要向其中填充数据,可以用LOAD DATA 和 INSERT 语句做这件事。
假设你的宠物记录如下表所示:
name | owner | species | sex | birth | death |
Fluffy | Harold | cat | f | 1993-02-04 | |
Claws | Gwen | cat | m | 1994-03-17 | |
Buffy | Harold | dog | f | 1989-05-13 | |
Fang | Benny | dog | m | 1990-08-27 | |
Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
Chirpy | Gwen | bird | f | 1998-09-11 | |
Whistler | Gwen | bird | 1997-12-09 | ||
Slim | Benny | snake | m | 1996-04-29 |
因为开始是一张空表,一种简单的填充数据方式就是创建一个文本文件,每个动物对应一行信息,然后用一条语句将文件内容加载到表中。
例如:可以创建一个pet.txt 文件,文件中每行包含一条记录信息,每条记录中各值以TAB键分隔,值的内容按照CREATE TABLE语句中创建列指定的顺序给出,对于缺失的值(例如未知的性别或者活着的动物的死亡日期)可以设置NULL值,在文本文件中用\N(反斜杠加大写N),例如:
Whistler Gwen bird \N 1997-12-09 \N
要将文本文件pet.txt中的内容加载到pet表中,使用如下语句:
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
如果文件是在Windows系统中创建,编辑器使用的是\r\n换行符,则应使用如下语句:
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet LINES TERMINATED BY '\r\n'; |
(在运行MacOS的苹果机器上,应该使用LINES TERMINATED BY '\r')
可以在LOAD DATA语句中明确指定列分隔符和行结束符,默认值是tab和换行符。
对于用语句正确读取pet.txt文件来说,以上信息就足够了。
如果语句执行失败,可能是你的MySQL安装程序并没有默认启用本地文件功能。
如果需要每次添加一条新记录,这时可以用INSERT语句。简单的使用形式就是按照创建表时提供的列顺序为每列赋值,例如:
mysql> INSERT INTO pet VALUES ('Puffball', 'Diane', 'hamster', 'f', '1999-03-30', NULL); |
字符值和日期用引号包含,用INSERT语句可以直接插入NULL表示缺失数据,不需要LOAD DATA 中使用的\N。
2. 从表中检索数据
SELECT 语句用于从表中检索数据,该语句的通用格式如下:
SELECT what_to_select FROM which_table WHERE conditions_to_satisfy; |
what_to_select 表示需要查什么信息,可以是多个列,或者用 * 表示所有列。
which_table 指定查询的表,WHERE 子句是可选的,用于指定各个行需要满足的条件。
2.1 选择全部数据
SELECT 语句的最简单形式就是从表中查询全部数据:
当查询数据后,如果发现有些数据错了,这时该怎么处理呢?有2种方法可供选择:
·编辑pet.txt文件,改正错误信息,清空pet表,重新加载数据:
mysql> DELETE FROM pet; mysql> LOAD DATA LOCAL INFILE 'pet.txt' INTO TABLE pet; |
·使用UPDATE 语句修复错误记录
mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser'; |
2.2 选择特定行
前面讲过,如果不加WHERE子句查询将返回全部信息,但是一般来说,我们不需要查看全表信息,尤其是当表数据量很大的时候更是如此。下面看一些选择查询例子。
验证刚刚修改过的 Bowser 的生日:
字符串比较通常是不区分大小写的,因此指定名字为 ‘bowser’或者’BOWSER’ 结果是相同的。
查询时可以在任何列上指定条件,例如:
还可以使用组合条件:
之前的查询使用了AND逻辑操作符,还可以使用 OR 操作符:
AND 和 OR 也可混合使用,当然,混合使用时最好使用括号以明确指定条件分组情况:
2.3 选择特定列
查询信息时可以只查特定列,列名间以逗号分隔,例如仅查询动物名称和出生日期:
如只想查出动物主人:
上例中我们发现有的主人因有多个宠物多次出现,如果我们想让每个主人都不重复,则可以使用关键字 DISTINCT :
可以使用WHERE子句将行选择与列选择结合起来查询:
2.4 行排序
大家可能注意到了,之前例子中的查询结果并没有以特定顺序排序,如果以某种有意义的方式对结果排序,更利于我们检查结果,要对结果排序,可以使用ORDER BY子句:
可以对多个列进行排序,每个列可以指定不同的排序方式,例如,可以对动物种类进行升序排序,然后对同种类内的动物生日进行降序排序(幼小的动物排在前面),查询示例如下:
DESC 关键字仅影响它前面紧跟的列(birth),对species没有影响。