mysql常用插入sql
阿新 • • 發佈:2021-10-21
insert into、insert ignore into、replace into區別
指令 | 不存在 | 已存在 | 舉例 |
insert | 插入 | 報錯 | insert into stu(name, age) values('小明', 23); |
insert ignore | 插入 | 忽略 | insert ignore into stu(name, age) values('小明', 23); |
replace into | 插入 | 刪除原記錄後插入 | replaceinto stu(name, age) values('小明', 23); |
表要求:有PrimaryKey,或者unique索引
測試
建表語句:
create table if not exists stu ( id int auto_increment primary key, name varchar(32) not null, age int not null, address varchar(64) null, constraint stu_name_uindex unique (name) );
插入幾條資料
insert into stu (name, age, address) values ('wang', 32, '南京'), ('zhang', 30, '西安'), ('liu', 27, '武漢');
查詢後:
insert
因為name列為唯一索引,所以如果後面再插入的記錄與資料庫中已經存在的記錄存在名稱相同的則會報錯,不存在執行插入。
replace
已存在替換,刪除原來的記錄,新增新的記錄。
執行該語句後
replace into stu (name, age) values ('wang', 35);
會發現name為wang的資料已經變更為新的資料了,也就是先將原來的name為wang的記錄刪除後,再插入新的記錄。可以看到id=1的記錄已經不在了,現在name為wang的是id=6的記錄
insert igonre
使用insert ignore into執行插入時,如果該記錄已經存在則會忽略,不存在則執行插入。
insert ignore into stu (name, age, address) values ('wang', 23, '北京');
該語句執行後,再次查詢發現數據集並沒有發生變化
如果插入庫中不存在的記錄,則會執行插入操作
可以看到name='du'的記錄已經插入到庫中了。
ON DUPLICATE KEY UPDATE
該語法的用法是針對如果插入的記錄,資料庫中唯一約束列的該值不存在則執行插入操作,如果資料庫中已經存在該記錄,則修改該記錄。
還以上面的資料集舉例:
現在使用該語法插入幾條記錄:
insert into stu (name, age, address) values ('wang', 50, '烏魯木齊'), ('liu', 66, '重慶'), ('zhao', 44, '拉薩') on duplicate key update age = VALUES(age), address = VALUES(address);
按照上面講解的意思,執行該語句後,因為name為唯一約束,所以name='wang'的記錄,id=6的age和address將會分別修改為50和烏魯木齊,name='liu'的記錄,id=3的age和address將會修改為66和重慶,而name='zhao'的因為資料集中不存在該記錄,所以該記錄將會插入。現在執行下看下效果
執行後的結果集:
可以看到,已經成功了,實現了想要的效果,不存在的記錄插入,已經存在的記錄執行修改。