MySQL實(shí)現(xiàn)數(shù)據(jù)插入操作的示例詳解
目錄
- 一、方法分類
- 二、具體方法
- 三、實(shí)例
- (1)常規(guī)插入
- (2)從另一個(gè)表導(dǎo)入
- (3)插入時(shí)數(shù)據(jù)重復(fù)
- 四、注意事項(xiàng)
- (1)不寫字段名,需要填充自增ID
- (2)按字段名填充,可以不錄入id
- 其余注意事項(xiàng)
使用MySQL插入數(shù)據(jù)時(shí),可以根據(jù)需求場(chǎng)景選擇合適的插入語句,例如當(dāng)數(shù)據(jù)重復(fù)時(shí)如何插入數(shù)據(jù),如何從另一個(gè)表導(dǎo)入數(shù)據(jù),如何批量插入數(shù)據(jù)等場(chǎng)景。本文通過給出每個(gè)使用場(chǎng)景下的實(shí)例來說明數(shù)據(jù)插入的實(shí)現(xiàn)過程和方法。
一、方法分類
二、具體方法
三、實(shí)例
students 表 (id表示主鍵,name是姓名,score是平均成績(jī))
(1)常規(guī)插入
忽略字段名
執(zhí)行后結(jié)果
按照字段插入
insert into students(name) values("孫華");
執(zhí)行后結(jié)果
一次性插入多條數(shù)據(jù)
insert into students(name, score) values("劉平", "56"),("周雨", "90");
執(zhí)行后結(jié)果
(2)從另一個(gè)表導(dǎo)入
students 表 (id表示主鍵,name是姓名,score是平均成績(jī))
導(dǎo)出users表的某些數(shù)據(jù)插入到students表
insert into students(name,score) select user_name, mobile_phone_number from users where id <> 3;
執(zhí)行結(jié)果
注意:只要對(duì)應(yīng)字段的類型一樣,字段不一樣也可以導(dǎo)入數(shù)據(jù),不會(huì)沖突。
(3)插入時(shí)數(shù)據(jù)重復(fù)
如果記錄存在報(bào)錯(cuò)
insert into students values(1, "張三", "74");
執(zhí)行結(jié)果: 報(bào)錯(cuò)
Duplicate entry '1' for key 'PRIMARY'
如果記錄存在不插入記錄
insert ignore into students(id,name,score) values(1, "張三", "74");
執(zhí)行結(jié)果:不插入不報(bào)錯(cuò)
Affected rows:0
不論記錄是否存在都要插入記錄
replace studentsvalues(1, "張三", "74");
執(zhí)行結(jié)果
如果記錄存在更新指定字段
insert into students(id)values(1) on duplicate key update name = "李明", score = "67";
執(zhí)行結(jié)果
創(chuàng)建 students 表的代碼
-- ------------------------------ Table structure for students-- ----------------------------DROP TABLE IF EXISTS `students`;CREATE TABLE `students` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT "學(xué)生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 "成績(jī)", 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");
創(chuàng)建 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 "手機(jī)號(hào)碼", 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");
四、注意事項(xiàng)
(1)不寫字段名,需要填充自增ID
[使用]:0或者null或者default,自增id默認(rèn)從1開始。
[使用]:或者沒有在自增id中出現(xiàn)的(不重復(fù))數(shù)(例如-1,-2),浮點(diǎn)型數(shù)據(jù)例如3.4,最后顯示3,會(huì)進(jìn)行四舍五入。即使定義了int類型,輸入‘3’或者浮點(diǎn)型,都會(huì)強(qiáng)制轉(zhuǎn)化為int類型,但是輸入'a'會(huì)報(bào)錯(cuò)。具體細(xì)節(jié)可以看源碼。
問題:第一個(gè)字段id為什么可以寫null?如果建表的時(shí)候?qū)懥薸d為自增id,而寫0或者null或者default或者沒有在自增id中出現(xiàn)的(不重復(fù))數(shù)(例如-1,-2),系統(tǒng)都會(huì)自動(dòng)填充id。如果建表的時(shí)候沒有寫明是自增id,那么主鍵一定是不能為空的,這個(gè)時(shí)候?qū)憂ull就會(huì)報(bào)錯(cuò)。
(2)按字段名填充,可以不錄入id
[注意]:字段要與值一一對(duì)應(yīng)。
其余注意事項(xiàng)
- 字段名可以省略,默認(rèn)所有列;
- 錄入值的類型和字段的類型要一致或兼容;
- 字段和值的個(gè)數(shù)必須一致。不能出現(xiàn)一行記錄5個(gè)值,另外一行6個(gè)值的情況;
- 如果寫了字段,即使是空值也不能空著,用null代替;
到此這篇關(guān)于MySQL實(shí)現(xiàn)數(shù)據(jù)插入操作的示例詳解的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)插入內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!
