回覆列表
  • 1 # IT全棧工程師

    MySQL是一個關係型資料庫管理系統,目前屬於Oracle 旗下產品。MySQL 是最流行的關係型資料庫管理系統之一。

    進入正題,關於mysql主鍵問題,我將簡單從以下幾個方面來聊聊:

    資料庫主鍵的定義:

    主鍵,顧名思義,就是某一行資料的唯一標識。主鍵可以是一列也可以是多列的組合。主鍵不能為空。

    主鍵定義原則:

    主鍵應當是對使用者沒有意義的。業務上的‘主鍵’可以透過唯一鍵(Unique Key)或唯一索引(Unique Index)和其它約束條件實現

    主鍵不應包含動態變化的資料,如時間戳、建立時間列、修改時間列等

    主鍵應當由計算機自動生成。主鍵應該是單列的,以便提高連線和篩選操作的效率

    如何定義主鍵:

    Sequence ID:簡單,程式碼方便,效能可以接受,資料庫自增長序列或欄位,最常見的方式。由資料庫維護,資料庫唯一。

    UUID:簡單,程式碼方便,可以利用程式生成,一般來說不會重複

    一般我們常用的就是這兩種了,其他的我就不做介紹了。

    舉例:

    我們通常情況下,都會設定資料庫表主鍵非空:

    建表:

    create table user(

    id integer ,

    name varchar(20),

    sex char(1),

    birth date

    );

    設定自增:

    alter table user modify id integer auto_increment;

    MySql設定主鍵不能為空,還要自動增長(這裡沒有設定預設值,但是預設是1,從1開始增長):

    alter table user modify id integer default "1";

    這樣,當我們使用insert語句向資料庫插資料時,就不需要手動指定主鍵。

    最後:

    至於你提到的,mysql插入新資料時提示主鍵列不能為空,為什麼我插入的資料中就有值?

    個人建議你再檢查一下你的SQL語句,首先,如果資料庫提示主鍵不能為空,那麼肯定是插不進去資料的,可是你卻又插進去了,那麼問題來了,都報錯了,這麼可能還回執行成功呢?其次,檢查你的資料庫表,是否設定主鍵(主鍵預設非空),是否設定主鍵自增。這個要按你資料庫設計情況來看。一般不會出現你的問題所描述的情況。

  • 中秋節和大豐收的關聯?
  • 最近想換手機,看上vivo的X60,大家覺得哪種顏色好看男生?