【MySQL必知必会(十六)】【插入数据】

上一篇:【MySQL必知必会(十五)】【全文本搜索】

+++++++++++++开始线++++++++++++++++

一、 数据插入

INSERT是用来插入或添加行到数据的。
插入可以用几种方式使用:
1.插入完整的行
2.插入行的一部分
3.插入多行
4.插入某些查询的结果

二、 插入完整的行

把数据插入表中的最简单的方法是使用基本的INSERT语法,它要求指定表名和被插入到新行中的值

mysql> INSERT INTO Customers
    -> VALUES(NULL,
    -> 'Pep E. LaPew',
    -> '100 Main Street',
    -> 'Los Angeles',
    -> 'CA',
    -> '90046',
    -> 'USA',
    -> NULL,
    -> NULL);

在这里插入图片描述

没有输出

INSERT语句一般不会产生输出

分析

这种语法简单,但是并不安全,应该避免使用。上面的SQL语句高度依赖于表中列的定义次序,并且还依赖与其次序容易获得的信息。即使可得到这种次序信息,也不能包装呢个下一次表结构变动后各列保持完全相同的次序

编写INSERT语句的更安全的方法

mysql> INSERT INTO customers(cust_name,
    -> cust_address,
    -> cust_city,
    -> cust_state,
    -> cust_zip,
    -> cust_country,
    -> cust_contact,
    -> cust_email)
    -> VALUES('Pep E. LaPew',
    -> '100 Main Street',
    -> 'Los Angeles',
    -> 'CA',
    -> '90046',
    -> 'USA',
    -> NULL,
    -> NULL);

填充所有列,次序可以改变

仔细地给出值

不管使用哪种INSERT语法,都必须给出VALUES的正确数目。如果不提供列名,则必须给每个表列提供一个值。如果提供列名,则必须对每个列出的列给出一个值。如果不这样将产生一条错误信息,相应的行插入不成功

三、 插入多个行

插入多行可以使用多条INSERT语句,甚至一次提交它们,每条语句用一个分号结束。
或者只要每条INSERT语句中的列名(和次序)相同

mysql> INSERT INTO customers(cust_name,
    -> cust_address,
    -> cust_city,
    -> cust_state,
    -> cust_zip,
    -> cust_country)
    -> VALUES(
    -> 'Pep E. LaPew',
    -> '100 Main Street',
    -> 'Los Angeles',
    -> 'CA',
    -> '90046',
    -> 'USA'
    -> ),
    -> (
    -> 'M. Martian',
    -> '42 Galaxy Way',
    -> 'New York',
    -> 'NY',
    -> '11213',
    -> 'USA'
    -> );

分析

其中单条INSERT语句有多组值,每组值用一对圆括号括起来,用逗号分隔

提高INSERT的性能

此技术可以提高数据库处理的性能,因为MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句块

四、 插入检索出的数据

INSERT一般用来给表插入一个指定列值的行。但是,INSERT在存在另一种形式,可以利用它将一条SELECT语句的结果插入表中。这就是所谓的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;

分析

SELECT语句从custnew检索出要插入的值,而不是要列它们。SELECT中列出的每个列对应于customers表名后所跟得列表中的每个列。这条语句将插入多少行有赖于custnew表中有多少行。如果这个表为空,则没有行被插入(也不产生错误,因为操作仍然是合法)。如果这个表确实含有数据,则所有数据将被插入到customers

+++++++++++++结束线++++++++++++++++

猜你喜欢

转载自blog.csdn.net/qq_42893334/article/details/108901620