SQL (十四)插入数据(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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值