SQL (十四)插入数据(insert语句,把数据插入表中)

不念不忘少年蓝@ 2023-02-22 03:49 229阅读 0赞

文章目录

  • 插入完整的行:values子句
    • 不安全写法
    • 安全写法:在表名后的括号明确给出列名
    • 小结
  • 插入行的一部分:简单
  • 插入某些查询的结果(即检索出的数据):insert select
    • 示例:把另一个表的某几列合并到一个表中
  • 从一个表复制到另一个表:select into语句(不用insert语句实现数据的插入)
    • 示例
    • 小结
  • 总结

在这里插入图片描述

插入完整的行:values子句

不安全写法

在这里插入图片描述

  1. insert into Customers
  2. values('1000000006',
  3. 'Toy Land',
  4. '123 Any Street',
  5. 'New York',
  6. 'NY',
  7. '11111',
  8. 'USA',
  9. NULL,
  10. NULL);

在这里插入图片描述
总之就是次序很重要,但是次序很容易输入出错,所以这样写不安全

安全写法:在表名后的括号明确给出列名

也更繁琐,有个明确的对应关系,出错的概率就小很多
在这里插入图片描述

  1. insert into Customers(cust_id,
  2. cust_name,
  3. cust_address,
  4. cust_city,
  5. cust_state,
  6. cust_zip,
  7. cust_country,
  8. cust_contact,
  9. cust_email)
  10. values('1000000006',
  11. 'Toy Land',
  12. '123 Any Street',
  13. 'New York',
  14. 'NY',
  15. '11111',
  16. 'USA',
  17. null,
  18. null);

由于我前面已经插入了这一行,所以这次插入同样的数据,出错了,但是代码本身没错哦
在这里插入图片描述

这种写法,可以换values列表的输入次序,只要把前面表名后括号中的项的顺序也改一改就好了,保证对应关系正确

  1. insert into Customers(cust_id,
  2. cust_contact,
  3. cust_email,
  4. cust_name,
  5. cust_address,
  6. cust_city,
  7. cust_state,
  8. cust_zip,
  9. cust_country)
  10. values('1000000006',
  11. null,
  12. null,
  13. 'Toy Land',
  14. '123 Any Street',
  15. 'New York',
  16. 'NY',
  17. '11111',
  18. 'USA');

当然还是报duplicate entry错误啦

小结

在这里插入图片描述

  • 不要用第一种不安全写法,因为表结构一旦变化,前面的代码就都完犊子。。。
  • 不管用第一种还是第二种,最起码的一点一定要保证:values列表的值的数目是对的,这样才是提供完整一行呀。否则就会出错。

插入行的一部分:简单

在这里插入图片描述
在这里插入图片描述
即只给某些列提供值,其他列不给值就行了。但是必须保证不给值的那些列允许是null值或者有默认值才可以

  1. insert into Customers(cust_id,
  2. cust_contact,
  3. cust_email,
  4. cust_name,
  5. cust_address,
  6. cust_city,
  7. cust_state)
  8. values('1000000006',
  9. null,
  10. null,
  11. 'Toy Land',
  12. '123 Any Street',
  13. 'New York',
  14. 'NY');

当然还是报duplicate entry错误啦

插入某些查询的结果(即检索出的数据):insert select

在这里插入图片描述

示例:把另一个表的某几列合并到一个表中

示例代码

  1. insert into Customers(cust_id,
  2. cust_contact,
  3. cust_email,
  4. cust_name,
  5. cust_address,
  6. cust_city,
  7. cust_state,
  8. cust_zip,
  9. cust_country)
  10. select cust_id,
  11. cust_contact,
  12. cust_email,
  13. cust_name,
  14. cust_address,
  15. cust_city,
  16. cust_state,
  17. cust_zip,
  18. cust_country
  19. from CustNew;

这个代码会报错,因为我们的数据库没有CustNew这个表。但是不影响学习这个知识
在这里插入图片描述

在这里插入图片描述

  • insert select可以用一个select语句插入多行
  • 不要求insert into后表名括号中的列名和后面select后的列名一样,因为DBMS操作的是列的位置,列名只是给出位置而已,他可以正确解析。
  • insert select中的select语句可以包含where子句。

从一个表复制到另一个表:select into语句(不用insert语句实现数据的插入)

在这里插入图片描述

  • select into语句完全和insert无关,但也是用于实现数据插入的
  • select into 语句把数据导入到的新表是运行时创建的,之前并不存在
  • 而insert select是把一个表中导出的数据导入到另一个之前就存在的表。

示例

  1. select *
  2. into CustCopy
  3. from Customers;

mysql不支持这种语法。。。
在这里插入图片描述
它要这么写:

  1. CREATE table CustCopy as
  2. select * from Customers;

但我觉得还是select into更好,很易懂

小结

在这里插入图片描述

  • select inro可以用很多select选项,但是我这里用mysql不支持这种语法也没法做实验
  • 可以用联结从多个表插入数据,我觉得这个很难,两个复杂功能一起用,,,
  • 数据可以来自多个不同的表,但是去向只有一个,只能被插入到一个表

总结

在这里插入图片描述
关键字

  • into
  • values
  • select into:把行导入到一个
  • insert select:从其他表导入行
  • create table

发表评论

表情:
评论列表 (有 0 条评论,229人围观)

还没有评论,来说两句吧...

相关阅读