資料完整性
為了確保資料的完整性和唯一性,關係型資料庫通過約束機制來實現目的。
可靠性 + 準確性 = 資料完整性
資料完整性通常有三種形式:
實體完整性:即表中有乙個主鍵。
域完整性:資料值滿足指定的條件。
引用完整性:表示與引用表的關係和資料約束,即外來鍵。
資料存放在表中
「資料完整性的問題大多是由於設計引起的」
建立表的時候,就應當保證以後資料輸入是正確的
錯誤的資料、不符合要求的資料不允許輸入
建立表:保證資料的完整性=實施完整性約束
列值要求(約束)
輸入的型別是否正確?
年齡欄位的資料型別必須是數字
輸入的格式是否正確?
身份證號碼必須是18位
是否在允許的範圍內?
性別只能是」男」或者」女」
整行要求(約束)
是否存在重複輸入?
學員資訊輸入了兩次
是否符合其他特定要求?
信譽值大於5的使用者才能夠加入會員列表
實體完整性
約束方法:唯一約束、主鍵約束、標識列
域完整性
約束方法:限制資料型別、檢查約束、外來鍵約束、預設值、非空約束
引用完整性
約束方法:外來鍵約束
約束(constraint)
常見的約束條件有6種
主鍵(primary key)約束
外來鍵(foreign key)約束
唯一性(unique)約束
預設值(default)約束
非空(not null)約束
檢查(check)約束
mysql不支援check約束,寫了沒有作用,但不會報錯
約束的詳細介紹
非空約束:用not null約束的字段不能為null值,必須給定具體的資料
例如:建立表,給字段新增非空約束(建立使用者表,使用者名稱不能為空)
create table t_user(
id int(10),
name varchar(32) not null
); --如果沒有插入name欄位資料,則會報錯
取消非空約束:
alter table t_user modify name varchar(32)
建表後新增非空約束
alter table t_user modify id int not null
唯一性(unique)約束:unique約束的字段,具有唯一性,不可重複,但可以為null
create table test_unique(
id int(10),
name varchar(32) not null,
email varchar(128) unique
); #如果email欄位重複插入,則會報錯,但是該欄位可以為null
刪除唯一性約束:
語法:alter table 表名 drop index 欄位名;
例:alter table test_unique drop index email;
建表後新增唯一性約束:
語法:alter table 表名 add unique(欄位名)
例:alter table test_unique add unique(id)
主鍵約束:
主鍵約束相當於非空約束和唯一約束。
每個表只允許擁有乙個主鍵,但是這個主鍵可以由多個資料列組成,這些列組合不能重複
例:建立表test_primary 設定id為主鍵;
create table test_primary(
id int not null primary key,
name varchar(50)
例:建立表test2_primary 設定id為主鍵;
create table test2_primary (
id int not null,
name varchar(50),
constraint test_pk primary key(id)
# 指定主鍵約束為 test_pk ,對大部分資料庫有效 但對於mysql無效,此主鍵約束名仍為primary
主鍵不僅可以是一列,也可以由表中的兩列或多列來共同標識。——復合主鍵
例:建立表test3_primary 設定id和name為復合主鍵;
create table test3_primary(
id int not null,
name varchar(50) not null,
primary key(id,name)
刪除主鍵約束:
語法:alter table 表名 drop primary key;
例:alter table test3_primary drop primary key;
建表後新增主鍵約束:
語法:alter table 表名 add primary key(欄位名)
例:alter table test3_primary add primary key(id) ; --將字段設定為主鍵
預設值約束:
當插入時沒有插入值時,會自動插入預設值
例:建立表test1_default設定name的預設值;
create table test1_default(
id int not null,
name varchar(50) default 'abc'
插入資料的時候,如果不寫入name的值,則預設顯示填入abc
也可以使用自增長的方式來給字段填充值
例:建立表auto_test設定id的值為自增長;
create table auto_test(
id int not null auto_increment primary key,
name varchar(25)
刪除預設值約束
語法:alter table 表名 alter 列名 drop default;
例:alter table test1_default alter name drop default;
建表後新增預設值約束:
語法:alter table 表名 alter 列名 set default '預設值';
例:alter table test1_default alter name set default 'abc';
MySQL(18) 之 常見約束
含義 一種限制,用於限制表中的資料,為了保證表中的資料的準確和可靠性 分類 六大約束 not null 非空,用於保證該字段的值不能為空 比如姓名 學號等 default 預設,用於保證該字段有預設值 比如性別 primary key 主鍵,用於保證該字段的值具有唯一性,並且非空 比如學號 員工編號...
mysql建立約束 MySQL 建立表及其約束
create table tb name 1 建立表的主鍵約束 主鍵是唯一標識某字段的作用,當該字段為主鍵的時候,其值必須是唯一的,且不能為空。mysql create table student id int primary key,stu id int,course id int id為主鍵,所...
mysql 檢查約束 替代 MySQL之檢查約束
定義 mysql檢查約束 check 可以通過 create table 或 alter table 語句實現,根據使用者實際的完整性要求來定義。它可以分別對列或表實施 check 約束。檢查約束使用 check 關鍵字,具體的語法格式如下 check 表示式即為sql 表示式,用於指定需要檢查的限...