欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL實(shí)現(xiàn)數(shù)據(jù)插入操作的示例詳解

 更新時(shí)間:2023年02月21日 14:53:34   作者:酸菜魚土豆大俠  
使用MySQL插入數(shù)據(jù)時(shí),可以根據(jù)需求場(chǎng)景選擇合適的插入語句。本文通過給出每個(gè)使用場(chǎng)景下的實(shí)例來說明數(shù)據(jù)插入的實(shí)現(xiàn)過程和方法,希望對(duì)大家有所幫助

使用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)過程和方法。

一、方法分類

二、具體方法

使用場(chǎng)景作用語句注意
常規(guī)插入忽略字段名insert into 表名 values (值1, 值2,...,值n)默認(rèn)value中的值依次填充所有字,如果出現(xiàn)唯一性沖突,就會(huì)拋出異常
按照字段插入insert into 表名(字段1, 字段2,...,字段n) values (值1, 值2,...,值n)字段和值一一對(duì)應(yīng)
一次性插入多條數(shù)據(jù)insert into 表名(字段1, 字段2,...,字段n) values (值a1, 值a2,...,值an),(值b1, 值b2,...,值bn)多行之間用逗號(hào)隔開,不需要再次寫insert into語句
從另一個(gè)表導(dǎo)入導(dǎo)出A表的某些數(shù)據(jù)插入到B表insert into 表名B(字段B1, 字段B2,...,字段Bn) select 字段A1, 字段A2,...,字段An from 表名A where [執(zhí)行條件]字段A和B可以字段名稱不一樣,但是數(shù)據(jù)類型必須一致
插入時(shí)數(shù)據(jù)重復(fù)如果記錄存在報(bào)錯(cuò)insert into 表名(字段1, 字段2,...,字段n) values (值1, 值2,...,值n)如果插入的數(shù)據(jù)記錄存在,報(bào)錯(cuò)并捕獲異常,不存在則直接新增記錄
如果記錄存在不插入記錄insert ignore into 表名(字段1, 字段2,...,字段n) values (值1, 值2,...,值n)如果插入的數(shù)據(jù)記錄存在就保存舊記錄忽略新記錄,不存在則直接新增記錄
不論記錄是否存在都要插入記錄replace 表名(字段1, 字段2,...,字段n) values (值1, 值2,...,值n)如果插入的數(shù)據(jù)記錄存在就先刪除再更新,不存在則直接新增記錄
如果記錄存在更新指定字段insert into … on duplicate key update如果插入的數(shù)據(jù)記錄存在就更新指定字段,不存在則直接新增記錄

三、實(shí)例

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

idnamescore
1李明67

(1)常規(guī)插入

忽略字段名

執(zhí)行后結(jié)果

idnamescore
1李明67
2張三74

按照字段插入

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

執(zhí)行后結(jié)果

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

一次性插入多條數(shù)據(jù)

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

執(zhí)行后結(jié)果

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

(2)從另一個(gè)表導(dǎo)入

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

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

導(dǎo)出users表的某些數(shù)據(jù)插入到students表

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

執(zhí)行結(jié)果

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

注意:只要對(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

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

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

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

執(zhí)行結(jié)果

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';

執(zhí)行結(jié)果

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

創(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論