MYSQL 主鍵的那些 “有意思” 故事
任何資料庫在設計之初都有主鍵,沒有主鍵的表是不完整的,尤其在MYSQL中,而MYSQL中的主鍵設計中,總有一些 “奇葩” 的行為,來讓MYSQL 在執行中,因為主鍵的奇葩設計而導致各種各樣的問題,我們今天來總結總結。
1 主鍵輸入時可以是空的
下面的表,中的確id 是主鍵,並且是自增的,但是插入的時候,的確可以在插入的位置寫入 NULL ,但這裡會實際上在上面插入對應的自增的資料。
insert into test_p (id,date) values (null,'2022-01-29');
insert into test_p (id,date) values (null,'2022-01-29');
insert into test_p (id,date) values (1,'2022-01-29');
實際上這裡的有一個問題,就是為什麼主鍵可以插入NULL,這裡利用了一個在主鍵設計中的沒有寫 NOT NULL 的漏洞,導致寫入的資料可以是NULL 因為NULL 不代表任何,是或否,代表不知道。
所以在編寫程式的時候,不要在對自增的主鍵欄位使用null 作為插入的值使用。
2 主鍵看上去可以是空的
在欄位是varchar型別的情況下,輸入的值不能為NULL,但可以為‘’,而由於 VARCHAR型別的特性,一個表中如果輸入'' 也只能有一個,在輸入各種空格,則會提示重複主鍵。
綜上所述,複合主鍵使用 on duplicate key update 應該小心注意邏輯上是否符合最初的設計要求,同時在MYSQL 的表設計中應儘量不使用複合主鍵來進行資料表的設計,避免一些未知問題的產生。
這裡也留下一個問題,如果我不使用複合主鍵,而使用複合唯一索引,又會是什麼故事。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2934378/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL主鍵的理解MySql
- MySQL 中的自增主鍵MySql
- MySQL新增自增主鍵的坑MySql
- 【Mysql】mysql主鍵的缺少導致備庫hangMySql
- 那些IP授權遊戲們的故事遊戲
- MySQL 主鍵自增也有坑?MySql
- MySQL 缺少主鍵的表的效能下降的原因MySql
- Mysql關於自增主鍵,自增主鍵優化總結MySql優化
- 深入瞭解MySQL中的自增主鍵MySql
- MyBatis + MySQL返回插入成功後的主鍵idMyBatisMySql
- mysql主鍵的缺少導致備庫hangMySql
- MySQL一個有意思的問題MySql
- MySQL 主鍵自增 Auto Increment用法MySqlREM
- mysql-刪除和新增主鍵MySql
- [精]mysql聯合主鍵應用MySql
- 區塊鏈認知過程,幾個有意思的小故事區塊鏈
- 向Mysql主鍵自增長表中新增資料並返回主鍵MySql
- 生產環境mysql主主同步主鍵衝突處理MySql
- 主鍵與主鍵索引的關係索引
- Mac上的有意思的快捷鍵(持續更新)Mac
- MYSQL INNODB主鍵使用varchar和int的區別MySql
- 【mycat】mycat中配合mysql自增主鍵的使用MySql
- MySQL8自增主鍵變化MySql
- MySQL自增主鍵跳號問題MySql
- mysql建表必須使用主鍵嗎MySql
- 磁碟、mysql、redis、hana 的故事!MySqlRedis
- github 主頁可以 DIY 了,很有意思Github
- MySQL 8 新特性之自增主鍵的持久化MySql持久化
- Mysql分庫分表的主鍵生成演算法MySql演算法
- mysql裡alter table 重定義主鍵的步驟:MySql
- [MySQL]為什麼主鍵最好是有序遞增的MySql
- Oracle主鍵與複合主鍵的效能分析Oracle
- MySQL 聚簇索引一定是主鍵嗎MySql索引
- MySQL 主鍵衝突,無法插入資料MySql
- MySQL5.5加主鍵鎖讀問題MySql
- MYSQL中的那些鎖MySql
- MySQL 預設排序真的是按主鍵來排序的嗎MySql排序
- MySQL的主鍵和欄位型別問題總結MySql型別