首頁 > 軟體

MySQL實現資料插入操作的範例詳解

2023-02-24 06:02:52

使用MySQL插入資料時,可以根據需求場景選擇合適的插入語句,例如當資料重複時如何插入資料,如何從另一個表匯入資料,如何批次插入資料等場景。本文通過給出每個使用場景下的範例來說明資料插入的實現過程和方法。

一、方法分類

二、具體方法

使用場景作用語句注意
常規插入忽略欄位名insert into 表名 values (值1, 值2,...,值n)預設value中的值依次填充所有字,如果出現唯一性衝突,就會丟擲異常
按照欄位插入insert into 表名(欄位1, 欄位2,...,欄位n) values (值1, 值2,...,值n)欄位和值一一對應
一次性插入多條資料insert into 表名(欄位1, 欄位2,...,欄位n) values (值a1, 值a2,...,值an),(值b1, 值b2,...,值bn)多行之間用逗號隔開,不需要再次寫insert into語句
從另一個表匯入匯出A表的某些資料插入到B表insert into 表名B(欄位B1, 欄位B2,...,欄位Bn) select 欄位A1, 欄位A2,...,欄位An from 表名A where [執行條件]欄位A和B可以欄位名稱不一樣,但是資料型別必須一致
插入時資料重複如果記錄存在報錯insert into 表名(欄位1, 欄位2,...,欄位n) values (值1, 值2,...,值n)如果插入的資料記錄存在,報錯並捕獲異常,不存在則直接新增記錄
如果記錄存在不插入記錄insert ignore into 表名(欄位1, 欄位2,...,欄位n) values (值1, 值2,...,值n)如果插入的資料記錄存在就儲存舊記錄忽略新記錄,不存在則直接新增記錄
不論記錄是否存在都要插入記錄replace 表名(欄位1, 欄位2,...,欄位n) values (值1, 值2,...,值n)如果插入的資料記錄存在就先刪除再更新,不存在則直接新增記錄
如果記錄存在更新指定欄位insert into … on duplicate key update如果插入的資料記錄存在就更新指定欄位,不存在則直接新增記錄

三、範例

students 表 (id表示主鍵,name是姓名,score是平均成績)

idnamescore
1李明67

(1)常規插入

忽略欄位名

執行後結果

idnamescore
1李明67
2張三74

按照欄位插入

insert into 
	students(name) 
values('孫華');

執行後結果

idnamescore
1李明67
2張三74
3孫華

一次性插入多條資料

insert into 
	students(name, score) 
values('劉平', '56'),('周雨', '90');

執行後結果

idnamescore
1李明67
2張三74
3孫華
4劉平56
5周雨90

(2)從另一個表匯入

students 表 (id表示主鍵,name是姓名,score是平均成績)

iduser_namemobile_phone_number
1馬化騰13800000000
2任正非13800000011
3馬雲13800000022

匯出users表的某些資料插入到students表

insert into 
	students(name,score) 
select 
	user_name,
	mobile_phone_number 
from users where id <> 3;

執行結果

idnamescore
1李明67
2張三74
3孫華
4劉平56
5周雨90
6馬化騰13800000000
7馬雲13800000022

注意:只要對應欄位的型別一樣,欄位不一樣也可以匯入資料,不會衝突。

(3)插入時資料重複

如果記錄存在報錯

insert into 
	students 
values(1, '張三', '74');

執行結果: 報錯

Duplicate entry '1' for key 'PRIMARY'

如果記錄存在不插入記錄

insert ignore into 
	students(id,name,score) 
values(1, '張三', '74');

執行結果:不插入不報錯

Affected rows:0

idnamescore
1李明67
2張三74
3孫華
4劉平56
5周雨90
6馬化騰13800000000
7馬雲13800000022

不論記錄是否存在都要插入記錄

replace 
	students
values(1, '張三', '74');

執行結果

idnamescore
1張三74
2張三74
3孫華
4劉平56
5周雨90
6馬化騰13800000000
7馬雲13800000022

如果記錄存在更新指定欄位

insert into 
	students(id)
values(1) on duplicate key 
update 
	name = '李明',
	score = '67';

執行結果

idnamescore
1李明67
2張三74
3孫華
4劉平56
5周雨90
6馬化騰13800000000
7馬雲13800000022

建立 students 表的程式碼

-- ----------------------------
-- Table structure for students
-- ----------------------------
DROP TABLE IF EXISTS `students`;
CREATE TABLE `students`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '學生id',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `score` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '成績',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of students
-- ----------------------------
INSERT INTO `students` VALUES (1, '李明', '67');

建立 users 表的程式碼

-- ----------------------------
-- Table structure for students
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '使用者id',
  `user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '使用者名稱',
  `mobile_phone_number` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手機號碼',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of students
-- ----------------------------
INSERT INTO `users` VALUES (1, '馬化騰', '13800000000');
INSERT INTO `users` VALUES (2, '任正非', '13800000011');
INSERT INTO `users` VALUES (3, '馬雲', '13800000022');

四、注意事項

(1)不寫欄位名,需要填充自增ID

[使用]:0或者null或者default,自增id預設從1開始。

[使用]:或者沒有在自增id中出現的(不重複)數(例如-1,-2),浮點型資料例如3.4,最後顯示3,會進行四捨五入。即使定義了int型別,輸入‘3’或者浮點型,都會強制轉化為int型別,但是輸入'a'會報錯。具體細節可以看原始碼。

問題:第一個欄位id為什麼可以寫null?如果建表的時候寫了id為自增id,而寫0或者null或者default或者沒有在自增id中出現的(不重複)數(例如-1,-2),系統都會自動填充id。如果建表的時候沒有寫明是自增id,那麼主鍵一定是不能為空的,這個時候寫null就會報錯。

(2)按欄位名填充,可以不錄入id

[注意]:欄位要與值一一對應。

其餘注意事項

  • 欄位名可以省略,預設所有列;
  • 錄入值的型別和欄位的型別要一致或相容;
  • 欄位和值的個數必須一致。不能出現一行記錄5個值,另外一行6個值的情況;
  • 如果寫了欄位,即使是空值也不能空著,用null代替;

到此這篇關於MySQL實現資料插入操作的範例詳解的文章就介紹到這了,更多相關MySQL資料插入內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com