插入数据库

利用INSERT语句将数据插入表中

数据插入

用来插入(添加)行到数据库。

  • 插入完整的行
  • 插入行的一部分
  • 插入某些查询结果

    插入完整的行

指定表名和被插入到新行中的值

编写依赖与特定列次序的SQL语句,这样做有时会出错,但编写方便。

  1. mysql> 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);
  11. Query OK, 1 row affected (0.01 sec)

解释: 插入一个新客户到Customers表,存储到每个表列的数据VALUES子句中给出,对每个表必须提供一个值,如果某列没值,就应该使用NULL值。

养成指定顺序插入数据,虽然写起来繁琐,但不容易发生错误。注意每个列,都必须提供一个值。

  1. mysql> 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. -> VALUES('1000000009',
  10. -> NULL,
  11. -> NULL,
  12. -> 'Toy Land',
  13. -> '123 Any Street',
  14. -> 'New York',
  15. -> 'NY',
  16. -> '11111');

插入部分行

指定某列提供值,其他的不提供值

  1. mysql> INSERT INTO Customers(cust_id,
  2. -> cust_name,
  3. -> cust_address,
  4. -> cust_city,
  5. -> cust_state,
  6. -> cust_zip,
  7. -> cust_country)
  8. -> VALUES('1000000008',
  9. -> 'Toy Land',
  10. -> '123 Any Street',
  11. -> 'New York',
  12. -> 'NY',
  13. -> '11111',
  14. -> 'USA');
  15. Query OK, 1 row affected (0.01 sec)

解释:忽略表中cust_ontact 与cust_email 值。

插入部分值,前提条件是表允许

  • 改列定义为允许NULL值
  • 表改成默认值,如果不给,将使用默认
    如果没有这两个前天条件,就服务插入部分值。

插入检索出的数据

利用SELECT 语句的输出结果插入表中,INSERT SELECT两条结合。

新键一个表

  1. mysql> CREATE TABLE CustomersNew
  2. -> (
  3. -> cust_id char(10) NOT NULL ,
  4. -> cust_name char(50) NOT NULL ,
  5. -> cust_address char(50) NULL ,
  6. -> cust_city char(50) NULL ,
  7. -> cust_state char(5) NULL ,
  8. -> cust_zip char(10) NULL ,
  9. -> cust_country char(50) NULL ,
  10. -> cust_contact char(50) NULL ,
  11. -> cust_email char(255) NULL
  12. -> );
  13. Query OK, 0 rows affected (0.06 sec)

插入是注意主键值不能重复。

  1. mysql> INSERT INTO CustomersNew(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 Customers;

解释:将CustomersNew所有的数据导入Customers

从一个表复制到另一个表

只复制表结构,不复制数据。

  1. mysql> CREATE TABLE Customers_New like Customers;
  2. Query OK, 0 rows affected (0.03 sec)

创建一个CustCopy 表,并把Customers表中的数据复制过来。

  1. mysql> CREATE TABLE CustCopy AS
  2. -> SELECT *
  3. -> FROM Customers;
  4. Query OK, 8 rows affected (0.03 sec)
  5. Records: 8 Duplicates: 0 Warnings: 0

查看一个表是如果创建的

  1. mysql> SHOW CREATE TABLE Customers;

查看表的结构

  1. mysql> DESC Customers

注意:

  • 任何SELECT 选择的子句都可以使用。WHERE ,GROUP BY等
  • 可以利用链接从多个表插入数据
  • 不过从多少个表检索出来的数据,数据都只能插入一个表中。
    SELECT INTO 可以用来测试SQL语句前,复制一个表出来测试,避免影响原来的表。

原文: https://cxiaodian.gitbooks.io/mysql/content/chapter14.html