MySQL CHECK約束功能如何實現

2021-09-24 14:52:08 字數 1993 閱讀 7590

在我們使用 mysql 插入資料時,假如我們插入性別,就只能插入『男』、『女』,或者插入資料控制在一定範圍內,我們都會使用 check 檢查約束來實現。

問題:mysql 所有的儲存引擎都不支援 check 約束,mysql中可以寫 check 約束,但會忽略它的作用,因此 check 並不起作用,因此實現對資料約束有兩種方法:

在這裡我們主要解釋第一種的 enum 型別或者觸發器如何實現 check約束作用;

enum 控制選項:

具體用法講解可參考 mysql 資料型別 enum

create

table

person

( id tinyint(4

)not

null

auto_increment

, name varchar(16

)not

null

, *** enum

('男'

,'女'

)not

null

primary

key(id)

)engine

=innodb default

charset

=utf8;

insert

into

person

(name, ***)

values

('luchi1'

,'男');

insert

into

person

(name, ***)

values

('luchi2'

,'女');

insert

into

person

(name, ***)

values

('luchi3'

,'中'

如圖所示,*** 只能插入男,女;

觸發器控制範圍:

在這裡我們把錶加上乙個字段年齡

alter

table person add age tinyint(4

)not

null

;

建立觸發器,控制當年齡 <0 或者 >120 時不能插入:

delimiter $$

create

trigger before_age_insert

before

insert

on person for

each

rowbeginif(

new.age <0or

new.age>

120)

then

delete

from person where age =

new.age;

endif

;end$$

delimiter

;

測試:

truncate

table person;

--清空表

insert

into

person

(name, ***, age)

values

('luchi1'

,'男'

,'21');

insert

into

person

(name, ***, age)

values

('luchi2'

,'女'

會發現當插入資料不符合資料範圍時插入不會成功;

SpringCloud Zuul閘道器功能實現解析

簡介 api gateway,時系統的唯一對外的入口,介於客戶端和服務端之間的中間層,處理非業務功能,提供路由請求,鑑權,監控,快取,限流等功能 1.新增依賴 注意springboot和springcloud版本相容 org.springframework.cloud spring cloud st...

青軟實訓1 約束

oracle約束,一般是在重要主鍵約束用的,但是使用約束得考慮實際的情況,因為是要影響到效能的問題,使用不當會影響到資料的使用。oracle約束有五種,分別是 主鍵約束 primary key 乙個表中只有乙個主鍵,而且主鍵是唯一的,不可重複,其實也相當於唯一性約束 unique 和非空約束 not...

Mongodb分片 Sharding 功能實現

在mongodb裡面存在另一種集群,就是分片技術,可以滿足mongodb資料量大量增長的需求。當mongodb儲存海量的資料時,一台機器可能不足以儲存資料,也可能不足以提供可接受的讀寫吞吐量。這時,我們就可以通過在多台機器上分割資料,使得資料庫系統能儲存和處理更多的資料。下圖展示了在mongodb中...