MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
插入数据
SELECT是最常用的SQL语句。但是,还有其他3个经常使用的SQL语句需要学习。第一个就是INSERT。INSERT是用来插入或添加行到数据库表的。插入可以用几种方式使用:
(1)插入完整的行;
(2)插入行的一部分;
(3)插入多行;
(4)插入某些查询的结果。
一、插入完整的行
把数据插入表中的最简单的方法就是使用基本的INSERT语法,它要求指定表名和被插入到新行中的值。例如:
INSERT INTO customers VALUES(NULL ,
'Pep E.LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA',
NULL,
NULL);
存储在每个表列中的数据在VALUES子句中给出,对每个列必须提供一个值。如果一个列没有值,应该使用NULL值(假定表允许对该列指定空值)。各个列必须以它们在表定义中出现次序填充。
虽然这种语法简单但是不安全。上面的SQL语句高度依赖于表中列的定义次序,并且还依赖于其次序容易获得的信息。即使可得到这种次序信息,也不能保证下次表结构变动后各个列保持完全相同的次序。因此,编写依赖于特定列次序的SQL语句是很不安全的。
编写INSERT语句的更安全(不过更繁琐)的方法如下:
INSERT INTO customers(cust_name,
cust_contact,
cust_email,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(
'Pep E.LaPew',
NULL,
NULL,
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA');
不管使用哪种INSERT语法,都必须给出VALUES的正确数目。如果不提供列名,则必须给每个表列提供一个值。如果提供列名,则必须对每个列出的列给出一个值。如果不这样,将产生一条错误消息,相应的行插入不成功。
二、插入多个行
INSERT可以插入一行到一个表中,但如果插入多行,可以使用多条INSERT语句,甚至一次提交它们,每条语句用一个分号结束,如下所示:
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(
'Pep E.LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA');
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(
'M.Martian',
'42 Galaxy Way',
'New York',
'NY',
'11213',
'USA');
或者,只要每条INSERT语句中的列名(和次序)相同,可以如下组合各语句:
INSERT INTO customers(cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(
'Pep E.LaPew',
'100 Main Street',
'Los Angeles',
'CA',
'90046',
'USA'),
(
'M.Martian',
'42 Galaxy Way',
'New York',
'NY',
'11213',
'USA');
此语句的输出如下图所示:
三、插入检索出的数据
INSERT一般用来给表插入一个指定列值的行。但是,INSERT还存在另一种形式,可以利用它将一条SELECT语句的结果插入表中,这就是INSERT SELECT。
下边的例子把一个名为custnew的表中的数据导入customers表中。为了试验这个例子,首先应该创建和填充custnew表。custnew表的结构与customers表的相同。在填充custnew时,不应该使用已经在customers中使用过的cust_id值(如果主键值重复,后续的INSERT操作将会失败)。
INSERT INTO customers(cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
SELECT cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
FROM custnew;
这个例子在INSERT和SELECT语句中使用了相同的列名。但是,不一定要求列名匹配。事实上,MySQL甚至不关心SELECT返回的列名。它使用的是列的位置。INSERT SELECT中SELECT语句可包含WHERE子句以过滤插入的数据。