Mysql筆記(二) check約束字

2021-10-05 06:12:12 字數 1250 閱讀 3928

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 表名 列名 資料型別 ...