所以在我解釋我的問題之前,這裡有一些**定義,以幫助說明我的問題:
-- holds data about different memberships
create table if not exists `member_types` (
`id` int unsigned not null auto_increment,
`name` varchar(20) not null,
`description` varchar(255) not null,
`member_limit` tinyint(2) unsigned not null default '0',
primary key( `id` )
) engine=innodb default charset=latin1;
insert into `member_types` ( `id`, `name`, `description`, `member_limit` ) values
( 1, 'general member', 'description of this membership.', 00 ),
( 2, 'extended member', 'description of this membership.', 00 ),
( 3, 'premium member', 'description of this membership.', 00),
( 4, 'general administrator', 'description of this membership.', 05 ),
( 5, 'master administrator', 'description of this membership.', 01 );
-- stores the basic data about our site members
create table if not exists `member_infos` (
`id` bigint(8) unsigned zerofill not null auto_increment,
`username` varchar(30) not null unique,
`password` char(41) not null,
`emailaddr` varchar(100) not null,
`type_id` int unsigned not null,
`salt_id` bigint(8) unsigned zerofill not null,
primary key( `id` ),
foreign key( `type_id` ) references `member_types` ( `id` )
) engine=innodb default charset=latin1;
member_infos表包含繫結member_infos.type_id = member_types.id的外來鍵
member_types表有乙個member_limit列,其中包含乙個整數,表示member_infos表的最大記錄數
可以包含其type_id等於member_types.id的位置
我能夠寫乙個檢查約束,但顯然mysql不會檢查約束.
我想編寫乙個觸發器,在插入之前檢查member_infos表中的記錄數是< = member_types.member_limit.
例如:使用上面的資料,記錄4有乙個member_limit = 5.如果嘗試將新記錄插入member_infos表中
具有type_id = 4並且number_id <= 5的member_infos表中的記錄數比插入的資料多,否則它被拒絕.
任何建議將不勝感激.
解決方法:
您可以編寫自己的普通查詢來檢查插入前的「約束」,而不是觸發器.嘗試:
insert into member_infos
select 1, 'timothy', 'secret', '[email protected]', 5, 0
from dual
where (select count(*) from member_infos where type_id = 5)
(select member_limit from member_types where id = 5)
我已經習慣了在type_id = 5的情況下進行檢查.如果不滿足count條件,則忽略此條件,僅當member_info中型別為id = 5的條目成員數小於member_types表中設定的限制時才會插入
標籤:mysql,sql
mysql插入 mysql條件插入
新建表 create table t user usernamevarchar 100 gender varchar 2 帶條件插入,如果表中沒有username name1 的記錄,就插入,否則就不插入 insert into t user select name1 m from dual whe...
mysql 插入更新一條sql 搞定
插入資料時,我們經常會遇到這樣的情況 1 首先判斷資料是否存在 2 如果不存在,則插入 3 如果存在,則更新。在sql server中可以這樣處理 if not exists select 1 from t where id 1 insert into t id,update time values...
mysql插入資料寫法 mysql 批量插入資料
mysql使用insert插入多條記錄,應該如何操作呢?下面就為您詳細介紹mysql使用insert插入多條記錄的實現方法,供您參考。看到這個標題也許大家會問,這有什麼好說的,呼叫多次insert語句不就可以插入多條記錄了嗎!但使用這種方法要增加伺服器的負荷,因為,執行每一次sql伺服器都要同樣對s...