標籤:style blog http color ar os 使用 sp strong
mysql 插入/更新資料
INSERT 語句
1、一次性列出全部欄位的值,例如:
INSERT INTO student VALUES(‘Chenqi‘,‘M‘, 29);INSERT INTO student VALUES(‘Bush‘,‘M‘, 60),(‘Obama‘, ‘M‘, 45);
允許同時插入多個資料行;
2、只對部分欄位賦值
INSERT INTO student(name, sex) VALUES (‘Abby‘, ‘F‘),(‘Joseph‘, ‘M‘);
沒有在INSERT語句中出現的欄位將被賦予預設值。允許同時插入多個資料行;
3、使用SET子句
INSERT INTO student SET name=‘Stein‘, sex=‘M‘;
沒有在SET子句裡出現的欄位被賦予預設值。這種形式的ISNERT語句不允許一次插入多個資料行。
REPLACE 語句
REPLACE語句和INSERT語句用法非常相似,唯一的區別就是,在一個UNIQUE索引或PRIMARY KEY中出現重複值的時候,REPLACE會先刪除舊行後再插入新行,INSERT語句則報錯。
如果資料表沒有使用PRIMARY KEY或UNIQUE索引,則REPLACE與INSERT語句完全一樣。
INSERT ... ON DUPLICATE KEY UPDATE Syntax
如果在INSERT語句末尾指定了ON DUPLICATE KEY UPDATE,並且插入行後會導致在一個UNIQUE索引或PRIMARY KEY中出現重複值,則在出現重複值的行執行UPDATE;如果不會導致唯一值列重複的問題,則插入新行。
例如,如果列 a 為擁有UNIQUE索引,並且包含值1,
CREATE TABLE t (id INT AUTO_INCREMENT,a INT, b INT, c INT, PRIMARY KEY(id), UNIQUE KEY(a));INSERT INTO t (a,b,c) VALUES (1,9,11);
則以下兩個語句具有相同的效果:
INSERT INTO t (a, c) VALUES (1, 3) ON DUPLICATE KEY UPDATE c=c+1;
UPDATE table SET c=c+1 WHERE a=1;
如果行作為新記錄被插入,則受影響行(affected-rows)的值顯示1;如果原有的記錄被更新,則受影響行的值顯示2。
也可以INSERT多行記錄:
INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=c+1;
執行後,c 的值會變為 13 (c 在原值上+1).
使用VALUES函數:
INSERT INTO t(a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=VALUES(c)+1;
執行後,c 的值會變為 8 (c 在插入值上+1).
LOAD DATA LOCAL INFILE
file_name INTO TABLE
table_name
預設情況下,LOAD DATA語句假設各欄位的值以‘\t‘分隔,資料行以‘\n‘分隔,資料值的排列順序與欄位在資料表裡的先後順序一致。
LOCAL關鍵字可以使客戶程式讀取資料檔案並發送到伺服器以載入,如果省略LOCAL關鍵字,就表示資料檔案是儲存在伺服器主機上的,而你必須擁有相應的FILE伺服器存取權限才能把檔案裡的資料載入到資料表裡去。
載入資料檔案的另一種方法是使用mysqlimport工具,例如:
mysqlimport -r -L -u username -p passwd -h hostname -P port db_name file_name
該命令將產生一條把file_name檔案裡的資料值載入到db_name的指定資料表裡去的LOAD DATA語句。
注意:mysqlimport 程式是根據資料檔案的名字來確定與之對應的資料表的,例如:
mysqlimport -L sampdb member.txt
就是將member.txt資料檔案載入到sampdb.member資料表的。
mysqlimport 的選項:
-r:--replace,對於unique key上的重複記錄,使用新行取代舊記錄;
-i:--ignore,對於unique key上的重複記錄,忽略不處理;
-L:--local,從用戶端本地主句讀取輸入檔案;
-c,--columns,指定輸入資料檔案中的欄位列表(有序);
-D,--delete,在匯入新資料檔案之前,清空資料表;
參考文檔:
http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html
mysql 插入/更新資料