字段約束
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中的...