+++++++++++++开始线++++++++++++++++
一、 数据插入
INSERT是用来插入或添加行到数据的。
插入可以用几种方式使用:
1.插入完整的行
2.插入行的一部分
3.插入多行
4.插入某些查询的结果
二、 插入完整的行
把数据插入表中的最简单的方法是使用基本的INSERT语法,它要求指定表名和被插入到新行中的值
mysql> INSERT INTO Customers
-> VALUES(NULL,
-> 'Pep E. LaPew',
-> '100 Main Street',
-> 'Los Angeles',
-> 'CA',
-> '90046',
-> 'USA',
-> NULL,
-> NULL);
没有输出
INSERT语句一般不会产生输出
分析
这种语法简单,但是并不安全,应该避免使用。上面的SQL语句高度依赖于表中列的定义次序,并且还依赖与其次序容易获得的信息。即使可得到这种次序信息,也不能包装呢个下一次表结构变动后各列保持完全相同的次序
编写INSERT语句的更安全的方法
mysql> INSERT INTO customers(cust_name,
-> cust_address,
-> cust_city,
-> cust_state,
-> cust_zip,
-> cust_country,
-> cust_contact,
-> cust_email)
-> VALUES('Pep E. LaPew',
-> '100 Main Street',
-> 'Los Angeles',
-> 'CA',
-> '90046',
-> 'USA',
-> NULL,
-> NULL);
填充所有列,次序可以改变
仔细地给出值
不管使用哪种INSERT语法,都必须给出VALUES的正确数目。如果不提供列名,则必须给每个表列提供一个值。如果提供列名,则必须对每个列出的列给出一个值。如果不这样将产生一条错误信息,相应的行插入不成功
三、 插入多个行
插入多行可以使用多条INSERT语句,甚至一次提交它们,每条语句用一个分号结束。
或者只要每条INSERT语句中的列名(和次序)相同
mysql> 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的性能
此技术可以提高数据库处理的性能,因为MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句块
四、 插入检索出的数据
INSERT一般用来给表插入一个指定列值的行。但是,INSERT在存在另一种形式,可以利用它将一条SELECT语句的结果插入表中。这就是所谓的INSERT SELECT。
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;
分析
SELECT语句从custnew检索出要插入的值,而不是要列它们。SELECT中列出的每个列对应于customers表名后所跟得列表中的每个列。这条语句将插入多少行有赖于custnew表中有多少行。如果这个表为空,则没有行被插入(也不产生错误,因为操作仍然是合法)。如果这个表确实含有数据,则所有数据将被插入到customers
+++++++++++++结束线++++++++++++++++