Mysql插入數(shù)據(jù)方式(insert into 、replace into解析)
1、插入數(shù)據(jù)方法
mysql中常用的三種插入數(shù)據(jù)的語句:
- insert into:正常的插入數(shù)據(jù),插入數(shù)據(jù)的時候會檢查主鍵或者唯一索引,如果出現(xiàn)重復(fù)就會報錯;
- replace into:表示插入并替換數(shù)據(jù),若表中有primary key或者unique索引,在插入數(shù)據(jù)的時候,若遇到重復(fù)的數(shù)據(jù),則用新數(shù)據(jù)替換,如果沒有數(shù)據(jù)效果則和insert into一樣;
- insert ignore into:插入并忽略數(shù)據(jù),如果中已經(jīng)存在相同的記錄,則忽略當前新數(shù)據(jù)。這樣不用校驗是否存在了,有則忽略,無則添加
2、語法介紹
2.1 insert into
每個字段與其值是嚴格一一對應(yīng)的。
也就是說:每個值、值的順序、值的類型必須與對應(yīng)的字段相匹配。
但是,各字段也無須與其在表中定義的順序一致,它們只要與 VALUES中值的順序一致即可。
語法如下:
# 表中有些字段有默認值,則可以直接根據(jù)字段插入數(shù)據(jù) INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...); # 按照表中所有字段進行插入數(shù)據(jù),一定要與字段在表中定義的順序一致 INSERT INTO 表名 VALUES (值 1,值 2,...);
2.2 insert ignore into
這種方式的語法跟insert into 是一樣的,只不過在遇到重復(fù)的數(shù)據(jù)時做出的處理不一致,有重復(fù)的就忽略該條數(shù)據(jù)的插入
語法如下:
# 表中有些字段有默認值,則可以直接根據(jù)字段插入數(shù)據(jù) INSERT IGNORE INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...); # 按照表中所有字段進行插入數(shù)據(jù),一定要與字段在表中定義的順序一致 INSERT IGNORE INTO 表名 VALUES (值 1,值 2,...);
題外:
MySQL 自4.1版以后開始支持INSERT … ON DUPLICATE KEY UPDATE語法,對于插入數(shù)據(jù)時候遇到重復(fù)的primary key 時候,可以進行數(shù)據(jù)的更新,就避免了insert ignore into遇到重復(fù)的數(shù)據(jù)直接忽略的不足。
但是一定要保證使用的時候是想要更新重復(fù)數(shù)據(jù)哦,不然就尷尬啦~~
INSERT … ON DUPLICATE KEY UPDATE
2.3 replace into
3、使用示例
初始表準備:
創(chuàng)建一個study 表, id 是自增主鍵
CREATE TABLE study( ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT , NAME VARCHAR(20) NOT NULL, AGE INT(10) );
首先插入一些為方便測試的數(shù)據(jù):
INSERT INTO study VALUES(1 , 'a' , 10); INSERT INTO study VALUES(2 , 'b' , 11); INSERT INTO study VALUES(3 , 'c' , 12); INSERT INTO study VALUES(4 , 'd' , 13); INSERT INTO study VALUES(5 , 'e' , 14); INSERT INTO study VALUES(6 , 'f' , 15);
此時查詢:
select * from study
開始測試:
(一)測試insert into
例如,現(xiàn)在再插入id 為 1 的數(shù)據(jù)與id為7的數(shù)據(jù)
INSERT INTO study VALUES(1 , 'a' , 11); INSERT INTO study VALUES(7 , 'g' , 16);
結(jié)果:
INSERT INTO study VALUES(1 , 'a' , 11); /* SQL錯誤(1062):Duplicate entry '1' for key 'PRIMARY' */ /* 受影響記錄行數(shù): 0 已找到記錄行: 0 警告: 0 持續(xù)時間 0 的 2 條查詢: 0.000 秒. */
報錯。此時表中的數(shù)據(jù):id 為 7的數(shù)據(jù)是沒有插入成功的
(二)測試insert ignore into
例如,做同樣的事情,現(xiàn)在再插入id 為 1 的數(shù)據(jù)與id為7的數(shù)據(jù)
INSERT INTO study VALUES(1 , 'a' , 11); INSERT INTO study VALUES(7 , 'g' , 16);
結(jié)果:
INSERT IGNORE INTO study VALUES(1 , 'a' , 11); INSERT IGNORE INTO study VALUES(7 , 'g' , 16); /* 受影響記錄行數(shù): 1 已找到記錄行: 0 警告: 1 持續(xù)時間 3 條查詢: 0.062 秒. */ SHOW WARNINGS LIMIT 5;
插入成功。此時表中的數(shù)據(jù):id 為 7的數(shù)據(jù)是插入成功,而id為1的數(shù)據(jù)也并沒有更新
(三)測試 INSERT … ON DUPLICATE KEY UPDATE
例如,做同樣的事情,現(xiàn)在再插入id 為 1 的數(shù)據(jù)與id為8的數(shù)據(jù)
INSERT INTO study VALUES(1 , 'a' , 11) ON DUPLICATE KEY UPDATE age = 12; INSERT INTO study VALUES(8 , 'h' , 16) ON DUPLICATE KEY UPDATE age = 13;
結(jié)果:
INSERT INTO study VALUES(1 , 'a' , 11) ON DUPLICATE KEY UPDATE age = 12; INSERT INTO study VALUES(8 , 'h' , 16) ON DUPLICATE KEY UPDATE age = 13; /* 受影響記錄行數(shù): 3 已找到記錄行: 0 警告: 0 持續(xù)時間 2 條查詢: 0.015 秒. */
插入成功。此時表中的數(shù)據(jù):id 為 1 的 因為存在所以數(shù)據(jù)被更新了,而id為8 之前并沒有,所以其數(shù)據(jù)也并沒有更新
(四)測試 replace into
經(jīng)過上面的操作,目前的表數(shù)據(jù)由上圖所示。
例如,做同樣的事情,現(xiàn)在再插入id 為 1 的數(shù)據(jù)與id為9的數(shù)據(jù)。
REPLACE INTO study VALUES(1 , 'a' , 11); REPLACE INTO study VALUES(9 , 'i' , 18);
結(jié)果:
REPLACE INTO study VALUES(1 , 'a' , 11); REPLACE INTO study VALUES(9 , 'i' , 18); /* 受影響記錄行數(shù): 3 已找到記錄行: 0 警告: 0 持續(xù)時間 3 條查詢: 0.000 秒. */
插入成功。此時表中的數(shù)據(jù):id 為 1 的 因為存在所以數(shù)據(jù)被更新為了11,而id為9 之前并沒有,所以其數(shù)據(jù)也并沒有更新
注意的是:
插入數(shù)據(jù)的表必須有主鍵或者是唯一索引!
否則的話,replace into 會直接插入數(shù)據(jù),這將導(dǎo)致表中出現(xiàn)重復(fù)的數(shù)據(jù)。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Can''t connect to MySQL server的解決辦法
ERROR 2003 (HY000): Can't connect to MySQL server on '*.*.*.*' (113)的解決辦法2010-06-063步搞定純真IP數(shù)據(jù)導(dǎo)入到MySQL的方法詳解
免編程,3步搞定純真IP數(shù)據(jù)導(dǎo)入到MySQL詳解,好多做ip地址查詢的朋友用的到。2009-10-10MySQL查詢數(shù)據(jù)庫中某個庫、表、索引等所占空間的大小
MySQL是一個非常流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它的查詢操作是非常強大和靈活的。查詢的效率不僅取決于表的大小,而且還取決于索引的大小,本文主要介紹了MySQL查詢數(shù)據(jù)庫中某個庫、表、索引等所占空間的大小,感興趣的可以了解一下2024-01-01MySQL explain根據(jù)查詢計劃去優(yōu)化SQL語句
MySQL是一種常見的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),常被用于各種應(yīng)用程序中存儲數(shù)據(jù),當涉及到大量的數(shù)據(jù)時,就需要MySQL的explain功能來幫助優(yōu)化,本文將詳細介紹MySQL的explain功能,感興趣的朋友可以參考閱讀2023-04-04