1.数据插入
使用INSERT将行插入到数据库表。
插入有几种方式:
插入完整的行
插入行的一部分
插入某些查询的结果
提示:插入及系统安全
使用INSERT语句可能需要客户端/服务器DBMS中的特定安全权限。
在你试图使用INSERT前,应该保证自己有足够的安全权限。
1.1插入完整的行
INSERT INTO Customers
VALUES(1000000006,
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
NULL,
NULL);
"INSERT INTO songs VALUES(26958,'78fedfdf13fc820e363e39dadf91e94','03c6699ea836decbc5c8fc2dbae7ad1d3b','201109230',871,1,1 )"
提示:INTO关键字
在某些SQL实现中,跟在INSERT之后的INTO关键字是可选的。
但是,即使不一定需要,最好还是提供这个关键字,这样做将保证SQL代码在DBMS之间可移植。
编写INSERT语句的更安全的方法
INSERT INTO Customers(
cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_email)
VALUES(1000000007,
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
NULL,
NULL);
因为提供了列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各列出现在表中的实际次序。
其优点是,即使表的结构改变,这条INSERT语句仍然能正确工作。
1.2插入部分行
INSERT INTO Customers(
cust_id,
cust_name,
cust_state,
cust_zip,)
VALUES(1000000007,
'Toy Land',
'NY',
'11111',
'USA');
"INSERT INTO songs(publish_time,song_init_plays,`language`,gender) VALUES('201109230',871,1,1 )"
1.3插入检索出的数据
INSERT一般用来给表插入具有指定列值的行。
INSERT还存在另一种形式,可以利用它将SELECT语句的结果插入表中,这就是所谓的INSERT SELECT
假如想把另一表中的顾客列合并到Customers表中,不需要每次读取一行再将它用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_state,
cust_zip,
cust_country
FROM CustNew;
//这个例子使用INSERT SELECT从CustNew中将所有数据导入Customers
提示:INSERT SELECT中的列名
为简单起见,这个例子在INSERT和SELECT语句中使用了相同的列名。
但是,不一定要求列名匹配。
事实上,DBMS一点也不关心SELECT返回的列名。
它使用的是列的位置。
INSERT通常只插入一行。INSERT SELECT除外,它可以用一条INSERT插入多行。
2.从一个表复制到另一个表
有一种数据插入不使用INSERT语句。
要将一个表的内容复制到一个全新的表,可以使用CREATE SELECT语句(或者在SQL Server也可用SELECT INTO语句)
与INSERT SELECT 将数据添加到一个已经存在的表不同,CREATE SELECT将数据复制到一个新表
CREATE TABLE CustCopy AS SELECT * FROM Customers
若是使用SQL Server,可以这样写
SELECT * INTO CustCopy FROM Customers
在使用SELECT INTO时,需要知道一些事情:
- 任何SELECT 选项和子句都可以使用,包括WHERE和GROUP BY
- 可利用联结从多个表插入数据
- 不管从多少个表中检索数据,数据都只能插入到一个表中。
提示:进行表的复制
SELECT INTO 是试验新SQL语句前进行表复制的很好工具。
先进行复制,可在复制的数据上测试SQL代码,而不会影响实际的数据。