实用的SQL语句
插入或替换
如果我们希望插入一条新纪录,但是如果记录已经存在,就先删除原纪录.此时可以使用REPLACE语句,这样就不必先查询,再决定是否先插入再删除. (可以看到name字段变色了, 尽量不要使用这种关键字.)
REPLACE INTO students (id,class_id,name,gender,score) VALUES (1,1,'小明','M',90);
插入或更新
如果我们希望插入一条新纪录,但如果记录已经存在,那么更新该记录,此时,就可以使用INSERT INTO ... ON DUPLICATE KEY UPDATE ...语句
INSERT INTO students ( id, class_id, NAME, gender, score )
VALUES
( 1, 1, '小明', gender = 'F', score = 90 )
ON DUPLICATE KEY UPDATE NAME = "小明",
gender = 'F',
score = 90;
插入或忽略
如果我们希望插入一条新纪录(INSERT), 但如果记录已经存在, 就啥也不干直接忽略, 此时可以使用 INSERT IGNORE... 语句.
INSERT IGNORE INTO students ( id, class_id, NAME, gender, score )
VALUES
( 1, 1, '小明', 'F', 99 );
创建快照
如果想要对一个表创建快照,即复制一份当前表的数据到一个新表, 即可以结合CREATE TABLE 和 SELECT:
CREATE TABLE students_of_class1 SELECT * FROM students WHERE class_id=1;
写入查询结果集
如果查询结果集需要写入到表中,可以结合INSERT和SELECT,将SELECT语句的结果集直接插入到指定表中,例如创建一个统计成绩的表statistics,记录各班的平均成绩.
CREATE TABLE statistics ( id BIGINT NOT NULL AUTO_INCREMENT, class_id BIGINT NOT NULL, average DOUBLE NOT NULL, PRIMARY KEY ( id ) );
INSERT INTO statistics ( class_id, average ) SELECT
class_id,
AVG( score )
FROM
students
GROUP BY
class_id;