Mysql學習筆記七:常用SQL語句

插入或替換

如果希望插入一條新記錄(INSERT),但如果記錄已經存在,就先刪除原記錄,再插入新記錄。此時,可以使用REPLACE語句,這樣就不必先查詢,再決定是否先刪除再插入:

REPLACE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99);

id=1的記錄不存在,REPLACE語句將插入新記錄,否則,當前id=1的記錄將被刪除,然後再插入新記錄。

插入或更新

如果我們希望插入一條新記錄(INSERT),但如果記錄已經存在,就更新該記錄,此時,可以使用INSERT INTO ... ON DUPLICATE KEY UPDATE ...語句:

INSERT INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99) ON DUPLICATE KEY UPDATE name='小明', gender='F', score=99;

id=1的記錄不存在,INSERT語句將插入新記錄,否則,當前id=1的記錄將被更新,更新的字段由UPDATE指定。

插入或忽略

如果我們希望插入一條新記錄(INSERT),但如果記錄已經存在,就啥事也不幹直接忽略,此時,可以使用INSERT IGNORE INTO ...語句:

INSERT IGNORE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99);

id=1的記錄不存在,INSERT語句將插入新記錄,否則,不執行任何操作。

快照

如果想要對一個表進行快照,即複製一份當前表的數據到一個新表,可以結合CREATE TABLESELECT

CREATE TABLE students_of_class1 SELECT * FROM students WHERE class_id=1;

新創建的表結構和SELECT使用的表結構完全一致。

寫入查詢結果集

如果查詢結果集需要寫入到表中,可以結合INSERTSELECT,將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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章