mysql 邏輯型字段 MySQL 字段約束

2021-10-20 22:37:15 字數 2358 閱讀 3196

字段約束

mysql的字段約束共四種:

約束名關鍵字

描述主鍵約束

primary key

字段值唯一,且不能為null

非空約束

not null

字段值不能為null

唯一約束

unique

字段值唯一,但可以為null

外來鍵約束

foreign key

保持關聯資料的邏輯性

關於主鍵約束

主鍵約束字段要求字段值的唯一性,且不能為null

建議使用數字型別的主鍵,提高檢索速度,一般設定自增主鍵或guid

create table t_emp(

id int primary key auto_increment,

關於非空約束

插入資料時,該字段值不能為null

null不是空字串

可以使用not null,但設定預設值

create table t_emp(

id int primary key auto_increment,

name varchar(20) not null,

married boolean not null default false

關於外來鍵約束

外來鍵約束主要用於保證資料的邏輯關係

t_dept:

dep_id

dep_name

tel研發部

測試部銷售部

t_emp:

emp_num

name

***dep_id張三男

李四男外來鍵約束寫在子表中:

-- 父表:

create table t_dept(

dep_id int usigned primary key,

dep_name varchar(20) not null unique,

tel char(3) unique

-- 子表:

create table t_emp(

emp_num int usigned primary key,

name varchar(20) not null,

*** char(3) enum('男','女') not null,

dep_id int usigned,

foreign key (dep_id) references t_dept(dep_id)

設定外來鍵約束後,若要刪除父表內容,必須先刪除子表相關的內容,這種約束能保證邏輯關係。

但另一方面,多表的相互外來鍵關聯,可能形成外來鍵閉環,導致無法刪除任何一張表的記錄。故可以不設定外來鍵約束,僅依靠應用程式的邏輯來保證。

關於資料庫正規化

構造資料庫需要遵循一定的規則,這種規則就是正規化。目前關係型資料庫有6種正規化,一般只需滿足第三正規化即可。

第一正規化:原子性

資料表的每一列都是不可分割的基本資料項,同一列中不能有多個值,也不能存在重複屬性。

第一正規化是資料庫的基本要求,不滿足第一正規化就不是關係型資料庫。

如下資料表不符合第一正規化:

student_id

name

class

張三一年級三班

修改後:

student_id

name

grade

class

張三一年級

三班第二正規化:唯一性

資料表中的每一條記錄必須是唯一的的,通常使用新增主鍵作為唯一標識。

第二正規化的提出是為了避免儲存重複資料,浪費空間。

如下資料不符合第二正規化:張三同一天考了兩次試,無法區分兩次記錄

student_id

name

exam_time

張三2021-02-15

張三2021-02-15

修改後:

idstudent_id

name

exam_time

張三2021-02-15

張三2021-02-15

第三正規化:關聯性

每列都與主鍵有直接關係,不存在傳遞依賴。

當滿足了第三正規化之後,就同時滿足了第一和第二正規化

按照第三正規化建立資料表,將來檢索和提取資料時會很方便。按照第三正規化,資料可以拆分儲存到不同的資料表,彼此保持關聯。

如下資料不符合第三正規化:

class

name

english_score

math_score

三班張三

修改後:

class

name

student_id

三班張三

student_id

english_score

math_score

mysql 整型 字元型 列舉型字段操作

bit m 位欄位型別。m表示每個值的位數,範圍為從1到64。如果m被省略,預設為1。tinyint m unsigned zerofill 很小的整數。帶符號的範圍是 128到127。無符號的範圍是0到255。bool,boolean 是tinyint 1 的同義詞。zero值被視為假。非zero...

mysql 邏輯型 17 邏輯運算子

資料型別 整數型別 五種 tiny small medium int big 浮點和定點小數型別 三種 float double decimal 日期與時間資料型別 五種 year 1 字串型別 二種 char m varchar m 1 二進位制字串 位欄位bit 固定binary 可變varbi...

mysql 多邏輯 MySql邏輯架構

一 mysql伺服器邏輯架構圖 每個虛線框都是一層 第二層 大多數的mysql的核心服務功能都在這一層,包括查詢解析 分析 優化 快取以及所有的內建函式 例如 日期,時間,數學和加密函式等 所有跨儲存引擎的功能都在這一層實現 儲存過程,觸發器,檢視。第三層 包含了儲存引擎。儲存引擎負責mysql中的...