MySQL是一個關係型資料庫管理系統,目前屬於Oracle 旗下產品。MySQL 是最流行的關係型資料庫管理系統之一。
進入正題,關於mysql主鍵問題,我將簡單從以下幾個方面來聊聊:
資料庫主鍵的定義:
主鍵,顧名思義,就是某一行資料的唯一標識。主鍵可以是一列也可以是多列的組合。主鍵不能為空。
主鍵應當是對使用者沒有意義的。業務上的‘主鍵’可以透過唯一鍵(Unique Key)或唯一索引(Unique Index)和其它約束條件實現
主鍵不應包含動態變化的資料,如時間戳、建立時間列、修改時間列等
主鍵應當由計算機自動生成。主鍵應該是單列的,以便提高連線和篩選操作的效率
Sequence ID:簡單,程式碼方便,效能可以接受,資料庫自增長序列或欄位,最常見的方式。由資料庫維護,資料庫唯一。
UUID:簡單,程式碼方便,可以利用程式生成,一般來說不會重複
一般我們常用的就是這兩種了,其他的我就不做介紹了。
舉例:
我們通常情況下,都會設定資料庫表主鍵非空:
建表:
create table user(
id integer ,
name varchar(20),
sex char(1),
birth date
);
設定自增:
MySql設定主鍵不能為空,還要自動增長(這裡沒有設定預設值,但是預設是1,從1開始增長):
這樣,當我們使用insert語句向資料庫插資料時,就不需要手動指定主鍵。
至於你提到的,mysql插入新資料時提示主鍵列不能為空,為什麼我插入的資料中就有值?
個人建議你再檢查一下你的SQL語句,首先,如果資料庫提示主鍵不能為空,那麼肯定是插不進去資料的,可是你卻又插進去了,那麼問題來了,都報錯了,這麼可能還回執行成功呢?其次,檢查你的資料庫表,是否設定主鍵(主鍵預設非空),是否設定主鍵自增。這個要按你資料庫設計情況來看。一般不會出現你的問題所描述的情況。
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語句,首先,如果資料庫提示主鍵不能為空,那麼肯定是插不進去資料的,可是你卻又插進去了,那麼問題來了,都報錯了,這麼可能還回執行成功呢?其次,檢查你的資料庫表,是否設定主鍵(主鍵預設非空),是否設定主鍵自增。這個要按你資料庫設計情況來看。一般不會出現你的問題所描述的情況。