SQL (十四)插入数据(insert语句,把数据插入表中)
文章目录
- 插入完整的行:values子句
- 不安全写法
- 安全写法:在表名后的括号明确给出列名
- 小结
- 插入行的一部分:简单
- 插入某些查询的结果(即检索出的数据):insert select
- 示例:把另一个表的某几列合并到一个表中
- 从一个表复制到另一个表:select into语句(不用insert语句实现数据的插入)
- 示例
- 小结
- 总结
插入完整的行:values子句
不安全写法
insert into Customers
values('1000000006',
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
NULL,
NULL);
总之就是次序很重要,但是次序很容易输入出错,所以这样写不安全
安全写法:在表名后的括号明确给出列名
也更繁琐,有个明确的对应关系,出错的概率就小很多
insert into Customers(cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email)
values('1000000006',
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
null,
null);
由于我前面已经插入了这一行,所以这次插入同样的数据,出错了,但是代码本身没错哦
这种写法,可以换values列表的输入次序,只要把前面表名后括号中的项的顺序也改一改就好了,保证对应关系正确
insert into Customers(cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
values('1000000006',
null,
null,
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA');
当然还是报duplicate entry错误啦
小结
- 不要用第一种不安全写法,因为表结构一旦变化,前面的代码就都完犊子。。。
- 不管用第一种还是第二种,最起码的一点一定要保证:values列表的值的数目是对的,这样才是提供完整一行呀。否则就会出错。
插入行的一部分:简单
即只给某些列提供值,其他列不给值就行了。但是必须保证不给值的那些列允许是null值或者有默认值才可以
insert into Customers(cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state)
values('1000000006',
null,
null,
'Toy Land',
'123 Any Street',
'New York',
'NY');
当然还是报duplicate entry错误啦
插入某些查询的结果(即检索出的数据):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;
这个代码会报错,因为我们的数据库没有CustNew这个表。但是不影响学习这个知识
- insert select可以用一个select语句插入多行
- 不要求insert into后表名括号中的列名和后面select后的列名一样,因为DBMS操作的是列的位置,列名只是给出位置而已,他可以正确解析。
- insert select中的select语句可以包含where子句。
从一个表复制到另一个表:select into语句(不用insert语句实现数据的插入)
- select into语句完全和insert无关,但也是用于实现数据插入的
- select into 语句把数据导入到的新表是运行时创建的,之前并不存在
- 而insert select是把一个表中导出的数据导入到另一个之前就存在的表。
示例
select *
into CustCopy
from Customers;
mysql不支持这种语法。。。
它要这么写:
CREATE table CustCopy as
select * from Customers;
但我觉得还是select into更好,很易懂
小结
- select inro可以用很多select选项,但是我这里用mysql不支持这种语法也没法做实验
- 可以用联结从多个表插入数据,我觉得这个很难,两个复杂功能一起用,,,
- 数据可以来自多个不同的表,但是去向只有一个,只能被插入到一个表
总结
关键字
- into
- values
- select into:把行导入到一个新表
- insert select:从其他表导入行
- create table
还没有评论,来说两句吧...