INSERT语句
插入数据
INSERT使用来插入(或添加)行到数据库表的,可以用集中方式使用:
- 插入完整的行
- 插入行的一部分
- 插入多行
- 插入某些查询的结果
插入及系统安全
MySQL的安全机制可针对每个表或每个用户,禁止使用INSERT语句
插入完整的行
INSERT语法要求指定表名和被插入到新行中的值
- 例1
INSERT INTO customers
VALUES
( NULL,"Pep E. LaPew", "100 Main Street", "Los Angeles", "CA", "90046", "USA", NULL, NULL );
此例子插入一个新客户到customers表
虽然这种语法很简单,但并不安全,应该尽量避免使用。其高度依赖于表中列的定义次数,并且还依赖于其次序容易获得的信息。
- 例2
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 );
因为提供了列名字,VALUES只需要一起指定的次序匹配指定的列名,不需要按照各个列出现在实际表中的次序,即使表的结构改变,此INSERT语句仍然能够正确工作
注意
- 总是使用列的列表
应该总是使用列的列表,使用列的列表能使SQL代码继续发挥作用(即使表结构发生了变化) - 仔细地给出值
不管使用哪种INSERT语法,都必须给出VALUES的正确数目 - 省略列
如果表的定义允许,可以在INSERT操作中省略某些列,列需满足:
1.允许为NULL值
2.给出默认值,如果不给出值,将使用默认值 - 提高整体性能
INSERT操作可能很耗时,特别是有很多索引需要更新时,其可能降低等待处理的SELECT语句的性能
可以通过在INSERT和INTO之间添加 关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级。INSERT LOW_PRIORITY INTO
插入多个行
插入多个行可以使用多条INSERT语句或只使用一次,每条语句用一个分号结束。
1.使用多条INSERT语句
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" );
INSERT INTO customers ( cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country )
VALUES
( "M. Martian", "42 Galaxy Way", "New York", "NY", "11213", "USA" );
2.使用一条INSERT语句
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语句有多组只,每组值用一堆圆括号扩起来,用逗号分隔
- 提高MySQL的性能
MySQL用单条INSERT语句处理多个插入比使用多条INSERT语句更快
插入检索出的数据
还可以用INSERT将一条SELECT语句的结果插入表中,即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;
其使用INSERT SELECT从custnew中将所有数据导入customers表中。
这个丽日导入了cust_id(如果能确保cust_id不重复),也可以省略这行,这样MySQL就会生成新值。
- INSERT SELECT中SELECT语句可包含WHERE子句以过滤插入的数据
INSERT SELECT中的列名
在INSERT和SELECT语句中使用了相同的列名。但是不一定要求列名匹配。MySQL甚至不关心SELECT返回的列名。
Comments | 0 条评论