SQL基本语句(2)
使用Insert语句插入新数据
语法:INSERT [INTO] tbl_name [(col_name,...)] VALUES (pression,...),…
INSERT [INTO] tbl_name SET col_name=expression, ...
可指定所有列值
insert into worker values(‘tom’,’tom@yahoo.com’);
使用多个值表,可以一次提供多行数据
insert into worker values(‘tom‘,‘tom@yahoo.com‘),(‘paul‘,‘paul@yahoo.com‘);
可以给出要赋值的那个列,然后再列出值
insert into worker (name) values (‘tom‘);
insert into worker (name) values (‘tom‘), (‘paul‘);
可以 col_name = value 的形式给出列和值
insert into worker set name=‘tom‘;
insert into worker set name=‘tom‘, email = ‘tom@yahoo.com’;
在 SET 子句中未命名的行都赋予一个缺省值。
使用这种形式的 INSERT 语句不能插入多行。
使用INSERT…SELECT语句插入从其他表选择的行
insert into tbl_name1(col1,col2) select col3,col4 from tbl_name2;
你也可以略去目的表的列列表,如果你每一列都有数据录入。
mysql>insert into tbl_name1 select col3,col4 from tbl_name2;
INSERT INTO ... SELECT语句满足下列条件:
查询不能包含一个ORDER BY子句。
INSERT语句的目的表不能出现在SELECT查询部分的FROM子句,因为这在ANSI SQL中被禁止让从你正在插入的表中SELECT。(问题是SELECT将可能发现在同一个运行期间内先前被插入的记录。当使用子选择子句时,情况能很容易混淆)
使用replace、replace…select语句插入
REPLACE功能与INSERT完全一样,除了如果在表中的一个老记录具有在一个唯一索引上的新记录有相同的值,在新记录被插入之前,老记录被删除。对于这种情况,insert语句的表现是产生一个错误。
REPLACE语句也可以和SELECT相配合。
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
Or:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
Or:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
SELECT ...