mysql 动态插入_MySql条件插入动态值

所以在我解释我的问题之前,这里有一些表格定义,以帮助说明我的问题:

-- 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', 'me@myself.com', 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

来源: https://codeday.me/bug/20190620/1246998.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值