所謂主鍵沖突是指,當插入一條記錄的時候,如果插入的記錄的主鍵值,在現有的數據中已經存在,則此時,因為主鍵不能重復,因此就產生了“主鍵沖突”。
主鍵沖突的演示:
現有數據:

插入一個數據(其主鍵已經存在的情形):

那如果出現主鍵沖突,該怎么辦呢?
* 辦法1:忽略
——終止插入,數據不改變,語句不報錯。
其語法為:
```
insert ignore into 表名 ( 字段.... ) values (值.....);
```

* 辦法2:替換
——刪除原紀錄,插入新紀錄。
其語法為:
```
replace into 表名 ( 字段.... ) values (值.....);
```
說明:此replace的用法跟insert一樣,也可以插入新紀錄,只是如果新紀錄出現主鍵沖突,就會刪除原紀錄后,再插入該新紀錄。

* 辦法3:更新
——設置為去更新原有數據(而并不插入)。
語法為:
```
insert into 表名 ( 字段.... ) values (值.....) on duplicate key update XX字段=新的值;
```
更新類似“替換”(replace),區別是:
替換:是將新的數據完整覆蓋舊的數據
更新:可以預先設定需要覆蓋的舊數據


- 1、數據庫介紹
- 1.1.主流數據庫
- 1.2.MySQL數據庫概覽
- 1.3.關系數據庫
- 2、訪問mysql數據庫服務器
- 2.1.開啟/關閉數據庫服務
- 2.2.客戶端連接數據庫服務器
- 3、數據庫操作
- 3.1.查看所有數據庫
- 3.2.創建新數據庫
- 3.3.查看數據庫創建信息
- 3.4.刪除現有數據庫
- 3.5.修改現有數據庫
- 3.6.選擇(使用)某個數據庫
- 4、數據表操作
- 4.1.創建數據表初步
- 4.2.查看所有數據表
- 4.3.查看數據表結構
- 4.4.查看數據表的創建語句
- 4.5.刪除數據表
- 4.6.修改數據表
- 5、數據操作初步
- 5.1.插入數據
- 5.2.查詢數據
- 5.3.刪除數據
- 5.4.修改數據
- 6、MySQL數據類型
- 6.1.數據類型(列類型)總覽
- 6.2.整型
- 6.3.小數型
- 6.4.日期時間型
- 6.5.字符串型
- 7、列屬性
- 8、實體與實體的關系
- 8.1.基本概念
- 8.2.一對一關系
- 8.3.一對多關系
- 8.4.多對多關系
- 9、高級查詢
- 9.1.高級查詢語法概述
- 9.2.查詢結果數據及select選項
- 9.3.where子句
- 9.4.mysql運算符
- 9.5.group by子句
- 9.6.having子句
- 9.7.order by子句
- 9.8.limit 子句
- 10、高級插入
- 10.1.同時插入多行記錄
- 10.2.插入查詢的結果數據
- 10.3.set語法插入數據
- 10.4.蠕蟲復制
- 10.5.插入時主鍵沖突的解決辦法
- 11、高級刪除
- 11.1.按指定順序刪除指定數量的數據
- 11.2.truncate清空
- 12、高級更新
- 13、聯合(union)查詢
- 13.1.聯合查詢概念
- 13.2.聯合查詢語法
- 14、連接(join)查詢
- 14.1.連接查詢概述
- 14.2.交叉連接(cross join)
- 14.3.內連接(inner join)
- 14.4.外連接
- 14.5.自連接
- 15、子查詢(subquery)
- 15.1.子查詢的概念
- 15.2.標量子查詢
- 15.3.列子查詢
- 15.4.行子查詢
- 15.5.表子查詢
- 15.6.有關子查詢的特定關鍵字
- 15.7.exists子查詢
- 16、數據管理
- 16.1.數據備份
- 16.2.數據還原(數據恢復)
- 17、用戶管理:
- 17.1.查看用戶
- 17.2.創建用戶
- 17.3.刪除用戶
- 17.4.修改/設置用戶密碼
- 17.5.授予用戶權限
- 17.6.取消用戶授權