首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》10.2 在数据库中插入数据

关灯直达底部

在可以使用数据库完成许多操作之前,必须在其中保存一些数据。完成此操作的方法通常是使用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