1.約束是在表上強制執行的資料檢驗規則,約束主要用於保證資料庫的完整性。
2.當表中資料有相互依賴性時,可以保護相關的資料不被刪除。
3.大部分資料庫支援下面五類完整性約束:
- not null非空
- unique key唯一值
- primary key主鍵
- foreign key外來鍵
- check檢查
4.約束作為資料庫物件,存放在系統表中,也有自己的名字
5.建立約束的時機:
-在建表的同時建立
-建表後建立(修改表)
6.可定義列級約束或表級約束
列級約束直接跟在列後面定義,不再需要指定列名,與列定義之間用空格分開
表級約束通常放在所有的列定義之後定義,要顯式指定對哪些列建立列級約束,與列定義之間採用英語逗號,隔開
如果是對多列建聯合約束,只能使用表級約束語法
非空約束(not null) 栗子:name varchar(18) not null
列級約束:只能使用列級約束語法定義;確保字段值不允許為空;只能在字段級定義;
null值:
所有資料型別的值都可以是null;
空字串不等於null;
0也不等於null;
唯一約束(unique) 栗子:name varchar(18) unique not null
唯一性約束條件確保所在的字段或者字段組合不出現重複值;
唯一性約束條件的字段允許出現多個null;
同一張表內可建多個唯一約束;
唯一約束可由多列組合而成;
建唯一約束時mysql會為止建立對應的索引;
如果不給唯一約束起名,該唯一約束預設與列名相同;
主鍵約束(primary key) 栗子:id int primary key auto increment
主鍵從功能上看相當於非空且唯一
乙個表中之允許乙個主鍵
主鍵是表中唯一確定一行資料的字段
主鍵字段可以是單字段或者是多字段組合
當建立主鍵約束時,mysql為主鍵建立對應的索引
主鍵約束名總為primary key
外來鍵約束(foreign key reference) 栗子:1>dept_id int reference tb_dept(id)
2>表內 constraint foreign key 外鍵名(建議是表名_約束名) (外來鍵) reference 主表 (字段)
constraint foreign key tb_eployee_fk (dept_id) reference tb_dept(dept_id)
3>表外 alter table 表名 add [constraint constraint] type (column);
alter table tb_emp add constraint foreign key tb_eployee_fk (dept_id) reference tb_dept(dept_id)
外來鍵是構建乙個表的兩個字段或者兩個表的兩個字段之間的關係
外來鍵確保了相關的兩個欄位的兩個關係
子(從)表外來鍵列的值必須在主表參照列值的範圍內,或者為空(也可以加非空約束,強制不允許為空)
當主表的記錄被子表參照時,主表記錄不允許被刪除
外來鍵參照的只能是主表主鍵或者唯一鍵,保證子表記錄可以準確定位到被參照的記錄
格式foreign key(外來鍵列名) reference 主表(參照列)
check約束 栗子:age int check(age>18 and age<60) 或者 *** varchar(2) (***='男' or ***='女') check約束在mysql中不起作用
既可作為列級約束,也可作為表級約束
定義在字段上的每一記錄都要滿足的條件
在check中定義檢查的條件表示式,資料需要符合設定的條件
條件表示式不允許使用
參照其他記錄的值
ii> 在建表的時候,即表內 constraint foreign key tb_eployee_fk (dept_id) reference tb_dept(dept_id)
可增加或刪除約束,但不能直接修改
可使約束啟用和禁用
非空約束必須使用modify子句增加
只要是可以使用列級約束語法來定義的約束,都可以通過modify來增加該約束
8.插入資料測試,這兩句執行一次新增一行資料
insert into tb_emp(name,***,age,addresss,email,dept_id)
value('a','男','23','gz','[email protected]',1);
9.有單列約束和多列約束
10.刪除約束
約束可被刪除,刪除約束不會對資料產生影響
當刪除被外來鍵參照的主鍵時候,應該採用cascade關鍵字來級聯刪除外來鍵,否則無法刪除主鍵
語法如下:alter table 表名 drop constraint 約束名
#刪除約束#刪除not null約束
alter
table tb_emp modify name varchar(18
)#刪除unique約束
alter
table tb_emp drop
index
#刪除primaey key約束 自動增長不能刪除
alter
table tb_emp modify id int
alter
table tb_emp drop
primary
key#刪除外來鍵約束
alter
table tb_emp drop
foreign
key tb_emp_ibfk_1
11.自動增長和預設值
auto_increment只是mysql特有的,其他資料庫裡面沒有,只能放在主鍵後面
*** varchar(2) default '男',
學習筆記 MySQL 約束
根據作用範圍 約束1.非空約束 2.唯一約束 建立表並指定使用者名稱和密碼組合不能重複 利用別名 alter table user drop index uk name pwd 1 3.主鍵約束 4.外來鍵約束 建立主表 create table dept dept id int auto incr...
MySQL學習筆記 06 約束
分類 1.主鍵約束 primary key 2.非空約束 not null 3.唯一約束 unique 4.外來鍵約束 foreign key 1.建立表時新增約束 create table stu id int,name varchar 20 not null name為非空 2.建立表完後,新增...
mysql學習筆記 常見約束
約束 1 一種限制,用於限制表中的資料的準確和可靠性 2 分類 6類 not null 非空 default 預設,保證當前欄位有預設值 primary key 主鍵 unique 唯一 check 檢查約束 mysql中不支援 foreign key 外來鍵,限制兩表外來鍵資料的一致性 4 約束的...