1、check約束:
check約束用於限制列中的值的範圍。
如果對單個列定義check約束,那麼該列只允許特定的值。
如果對乙個表定義check約束,那麼此約束會在特定的列中對值進行限制。
2、check在mysql中不會被呼叫,不同於sql,在 mysql中,check只是一段可呼叫但無意義的子句,mysql會直接忽略。
解決這個問題的兩個方法:
如果需要設定的check約束的字段範圍小,並且比較容易列舉全部的值,就可以考慮將該字段的型別設定為列舉型別enum()或集合型別set()。
create table student(name varchar(30) not null,*** enum('男','女'),age int not null);
這樣在insert的時候就會在***這一列限制。
觸發器:
enum僅僅對離散的取值奏效,當需要限定資料範圍的時候,enum則不能使用,因此可以使用觸發器來實現約束。
觸發器會在insert ,delete和update命令之前或者之後自動呼叫sql命令或儲存過程。
建立觸發器命令:
create
[definer
= ]trigger trigger_name before|
after
insert
|update
|delete
l_name for each row trigger_stmt;
delimiter $$ //定義界定符
mysql>
create
trigger before_age_insert //建立trigger,命名
-> before insert
//觸發方法 for/before/after update|delete|insert
->
on ttck for each row
->
begin
->
if(new.age<
0or new.age>
120)
then
->
delete
from ttck where age=new.age;
->
endif;-
>
end$$
MySQL檢查約束(CHECK)
mysql 檢查約束 check 可以通過 create table 或 alter table 語句實現,根據使用者實際的完整性要求來定義。它可以分別對列或表實施 check 約束。檢查約束使用check關鍵字,具體的語法格式如下 check 表示式 其中 表示式 指的就是 sql 表示式,用於指...
MySQL中CHECK約束無效
今天才知道在mysql中check約束是無效的,例如下面一段 在建立表table1時新增了check約束,要求field1欄位的值大於零,隨後向field1欄位插入 1,這明顯違反check約束,但這段 在mysql中卻可以執行成功。create table table1 field1 int,ch...
MySQL筆記(二)約束
1.1主鍵 主鍵 primary key 用於約束表中的一行,作為這一行的唯一識別符號 在一張表中通過主鍵就能準確定位到一行。主鍵不能有重複並且不能為空。一般可以這樣定義主鍵 create table 表名 列名 資料型別 primary key 或者create table 表名 列名 資料型別 ...