INSERT是用来插入行到数据库表的,它要求指定表名和被插入到新行中的值。
INSERT语句一般不会产生输出。
插入可以用几种方式使用:
1.插入完整的行;
2.插入行的一部分;
3.插入多行;
4.插入某些查询的结果。
举个简单例子:
insert into users VALUES(DEFAULT,'gakki','123');
各个列必须以它们在表定义中出现的次序填充。虽然这种语法简单,但不安全,高度依赖表中列的定义次序,毕竟表结构可能发生变动。
所以可以这样写:
insert into users(username,password) VALUES('aa','456');
插入语句中给出了列名,MySQL将用VALUES列表中的相应值填入列表中的对应项。并不用按照各个列在实际表中出现的次序。即使表的结构改变,此INSERT语句仍然能够工作。
insert into users(password,username) VALUES('789','bb');
如果表的定义允许,可以在INSERT操作中省略某些列。比如该列定义为允许NULL值;表定义中给出了默认值。
INSERT操作可能很耗时,特别是有很多索引需要更新时,它可能降低等待处理的SELECT语句的性能。如果数据检索更重要,可以在INSERT和INTO之间添加关键字LOW_PRIORITY,降低INSERT的优先级。此关键字同样适用于UPDATE和DELETE语句。
插入多行
插入多行可以使用多个INSERT语句,甚至一次提交它们,每条语句用一个分号结束。
insert into users(username,password) VALUES('cc','000');
insert into users(username,password) VALUES('dd','111');
insert into users(username,password) VALUES('ee','222');
insert into users(username,password) VALUES('ff','333');
只要每条INISERT语句中的列名和次序相同,可以组合各个语句。VALUES有多组值,每组用()括起来,用逗号隔开。
insert into users(username,password) VALUES('gg','444'),('hh','555'),('ii','666');
插入检索出来的数据
将一条SELECT语句的结果插入表中。
此处新建一张user表,上面的是users表。
INSERT INTO user(name,pwd) SELECT username,password FROM users;
此处将从users表中查询的数据插入了user表。MySQL不关心select返回的列名,它使用的是列的位置。上述两表列名不同,但可以插入。
此外还可以包含WHERE子句来过滤插入的数据。
此处先清空user表,再往里插入数据。
INSERT INTO user(name,pwd) SELECT username,password FROM users WHERE id IN(2,4,6);
INSERT INTO user(name,pwd) SELECT username,password FROM users WHERE username='gakki';