您好,登錄后才能下訂單哦!
今天小編給大家分享一下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是平均成績)
id | name | score |
---|---|---|
1 | 李明 | 67 |
忽略字段名
執行后結果
id | name | score |
---|---|---|
1 | 李明 | 67 |
2 | 張三 | 74 |
按照字段插入
insert into students(name) values('孫華');
執行后結果
id | name | score |
---|---|---|
1 | 李明 | 67 |
2 | 張三 | 74 |
3 | 孫華 |
一次性插入多條數據
insert into students(name, score) values('劉平', '56'),('周雨', '90');
執行后結果
id | name | score |
---|---|---|
1 | 李明 | 67 |
2 | 張三 | 74 |
3 | 孫華 | |
4 | 劉平 | 56 |
5 | 周雨 | 90 |
students 表 (id表示主鍵,name是姓名,score是平均成績)
id | user_name | mobile_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;
執行結果
id | name | score |
---|---|---|
1 | 李明 | 67 |
2 | 張三 | 74 |
3 | 孫華 | |
4 | 劉平 | 56 |
5 | 周雨 | 90 |
6 | 馬化騰 | 13800000000 |
7 | 馬云 | 13800000022 |
注意:只要對應字段的類型一樣,字段不一樣也可以導入數據,不會沖突。
如果記錄存在報錯
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
id | name | score |
---|---|---|
1 | 李明 | 67 |
2 | 張三 | 74 |
3 | 孫華 | |
4 | 劉平 | 56 |
5 | 周雨 | 90 |
6 | 馬化騰 | 13800000000 |
7 | 馬云 | 13800000022 |
不論記錄是否存在都要插入記錄
replace students values(1, '張三', '74');
執行結果
id | name | score |
---|---|---|
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';
執行結果
id | name | score |
---|---|---|
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');
[使用]: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就會報錯。
[注意]:字段要與值一一對應。
字段名可以省略,默認所有列;
錄入值的類型和字段的類型要一致或兼容;
字段和值的個數必須一致。不能出現一行記錄5個值,另外一行6個值的情況;
如果寫了字段,即使是空值也不能空著,用null代替。
以上就是“MySQL怎么實現數據插入操作”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。