17.基础-插入数据(INSERT)
数据插入
INSERT是用来插入(添加)行到数据库表的,有以下几种情况:
1.插入完整的行;
2.插入行的一部分;
3.插入多行;
4.插入某些查询的结果;
插入及系统安全 :可针对每个表或每个用户,利用MySQL的安全机制禁止使用INSERT语句;
插入完整的行
输入:INSERT INTO Customers //指定表名
VALUES(NULL, //被插入新行中的值
'Pep E. LaPew',
'100 Main Street'
'Los Angeles'
'CA'
'90046',
NULL,
NULL);
输出:INSERT语句不会产生输出;第一列为NULL,是因为该列由MySQL自动增量,如果你不想给出一个值,但又不能省略该列,所以指定一个NULL值;
上面的SQL语句高度依赖于表中列的定义次序,并且还依赖于其次序容易获得的信息。即使可得到这种次序信息,也不能保证下一次表结构变动后各个列保持完全相同的次序。因此,编写依赖于特定列次序的SQL语句是很不安全的。
输入:INSERT INTO Customers (cust_name, //指定列名顺序
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email)
VALUES(NULL, //被插入新行中的值
'Pep E. LaPew',
'100 Main Street'
'Los Angeles'
'CA'
'90046',
NULL,
NULL);
输出:因为指定了列名顺序,所以即便改变了表的结构,此INSERT语句依然能正确执行。
总是使用列的列表:一般不要使用没有明确给出列的列表的INSERT语句。使用列的列表能使SQL代码继续发挥作用,即使表结构发生了变化。
仔细地给出值:不管使用哪种INSERT语法,都必须给出VALUES的正确数目。如果不提供列名,则必须给每个表列提供一个值。如果提供列名,则必须对每个列出的列给出一个值。如果不这样,将产生一条错误消息,相应的行插入不成功。
插入多个行
可以使用多条INSERT语句,每条语句用分号结束;
提高INSERT的性能:此技术可以提高数据库处理的性能,因为MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句快。
插入检索出的数据
可以利用INSERT将一条SELECT语句的结果插入表中。这就是所谓的INSERT SELECT,顾名思义,它是由一条INSERT语句和一条SELECT语句组成的。
INSERT SELECT中的列名:为简单起见,这个例子在INSERT和SELECT语句中使用了相同的列名。但是,不一定要求列名匹配。事实上,MySQL甚至不关心SELECT返回的列名。它使用的是列的位置,因此SELECT中的第一列(不管其列名)将用来填充表列中指定的第一个列,第二列将用来填充表列中指定的第二个列,如此等等。这对于从使用不同列名的表中导入数据是非常有用的。