在可以使用数据库完成许多操作之前,必须在其中保存一些数据。完成此操作的方法通常是使用SQL的INSERT语句。
回忆一下,RDBMS都包含表,这些表都包含按列组成行的多行数据。通常,表中的每一行都描述了现实世界中的一些对象或关系,而一行中的列值则存储关于现实世界对象的信息。我们可以用INSERT语句插入一行数据到数据库中。
INSERT语句通常格式如下所示:
INSERT[INTO]table[(column1,column2,column3,...)]VALUES
(value1,value2,value3,...);
例如,要在Book-O-Rama的customers表中插入一个记录,可以输入如下所示命令:
insert into customers values
(NULL,'Julie Smith','25 Oak Street','Airport West');'''
可以看到,我们用插入数据的实际表名称代替了"table",而用特定值代替了"values"。在这个例子中,所有值都包含在双引号中。MySQL中的字符串应该包含在一对单引号或双引号中。(在本书中,我们将使用这两种情况)。数字和日期并不需要引号。
使用INSERT语句需要注意一些有趣的事情。我们所指定的值将按出现顺序添加到表中的列。如果只针对一些列添加内容,或者如果按不同的顺序来指定它们,那么可以在语句中列部分给出指定的列。例如:
insert into customers(name,city)values
('Melissa Jones','Nar Nar Goon North');
如果只有特定记录的部分数据或记录中的某些字段有可选项时,这种方法非常有用。也可以通过如下所示的语法实现此功能:
insert into customers
set name='Michael Archer',
address='12 Adderley Avenue',
city='Leeton';
此外,还需要注意的是,在添加Julie Smith用户的时候,我们将customerid列指定为NULL,而添加其他顾客的时候则忽略了该列。我们可能还记得,在创建该数据库的时候,我们将customerid创建为customers表的主键,因此这看起来可能有些奇怪。但是,我们已经将该字段指定为AUTO_INCREMENT。这就意味着,如果在该列中给出了NULL或者没有为该列指定任何值,MySQL将自动生成自动增加数字序列中的下一个数字值数字,并将其赋值给该列。这是非常有用的。
也可以一次将多行插入到一个表中。而每一行应该出现在自己的括号里,每组括号之间要用逗号分开。
INSERT只能带有少数几个关键字。在INSERT后面,可以添加LOW_PRIORITY或DELAYED关键字。LOW_PRIORITY关键字意味着当数据不是从表格读出时,系统必须等待并且稍后再插入。DELAYED关键字意味着插入的数据将被缓存。如果该服务器繁忙,我们可以继续运行其他查询,而不是等待这个INSERT操作的完成。
这两个关键字以后,可以指定IGNORE(可选的)。这意味着如果尝试插入任何可能导致重复唯一键的记录行,这些记录行将被自动忽略。另一种办法是在INSERT语句的末尾指定ON DUPLICATE KEY UPDATE expression。这可以使用一个常规的UPDATE语句(稍后详细介绍)修改重复值。
我们已经将一些简单的样本数据保存到数据库中,因此可以开始使用该数据库。这只是一系列使用该多行插入方法的简单的INSERT语句。可以在本书附带的光盘中找到这个脚本文件,该文件位于/chapter10/book_insert.sql。程序清单10-1也给出了该脚本。
程序清单10-1 book_insert.sql——操作Book-O-Rama数据库表的SQL脚本
use books;
insert into customers values
(3,'Julie Smith','25 Oak Street','Airport West'),
(4,'Alan Wong','1/47 Haines Avenue','Box Hill'),
(5,'Michelle Arthur','357 North Road','Yarraville');
insert into orders values
(NULL,3,69.98,'2007-04-02'),
(NULL,1,49.99,'2007-04-15'),
(NULL,2,74.98,'2007-04-19'),
(NULL,3,24.99,'2007-05-01');
insert into books values
('0-672-31697-8','Michael Morgan',
'Java 2 for Professional Developers',34.99),
('0-672-31745-1','Thomas Down','Installing Debian GNU/Linux',24.99),
('0-672-31509-2','Pruitt,et al.','Teach Yourself GIMP in 24 Hours',24.99),
('0-672-31769-9','Thomas Schenk',
'Caldera OpenLinux System Administration Unleashed',49.99);
insert into order_items values
(1,'0-672-31697-8',2),
(2,'0-672-31769-9',1),
(3,'0-672-31769-9',1),
(3,'0-672-31509-2',1),
(4,'0-672-31745-1',3);
insert into book_reviews values
('0-672-31697-8','The Morgan book is clearly written and goes well beyond
most of the basic Java books out there.');
可以通过MySQL输入如下命令运行该脚本:
>mysql-h host-u bookorama-p books</path/to/book_insert.sql