• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql限制表的字段的值在每次插入时只能大于下一条记录的值

mysql 搞代码 7年前 (2018-06-05) 132次浏览 已收录 0个评论

mysql限制表的字段的值在每次插入时只能大于上一条记录的值
假设有一个表 tb_test
里面有4个字段,分别是ID int,ValueTime datetime,fValue1 float(11,1),fValue1 float(11,1)

上一条记录是:1,2012-08-31 09:09:12 33.4,56.7
当插入新的一行是:1,2012-08-31 09:33:15 44.5 67.9 — 成功
当插入新的一行是:2,2012-08-31 09:33:15 20.5 77.9 — 20.5<44.5
则插入的一行变成: 2,2012-08-31 09:33:15 44.5 77.9
即这个字段的最后一次插入的值小于上条记录的值时,此字段的值保持原值。
不知道有没有人理解我说的?

——解决方案——————–
你可以在触发器中实现这个检查。

http://blog.csdn.net/acmain_chm/article/details/4380183
 MySQL 中如何在触发器里中断记录的插入或更新?
MySQL 不象其它有些数据库可以在触发器中抛出异常来中断当然触发器的执行以阻止相应的SQL语句的执行。在MySQL的目录版本中还无法直接抛出异常。这样我们如何实现呢? 下面是一种实现的方法。思路就是想办法在触发器中利用一个出错的语句来中断代码的执行。 mysql> create table t_control(id int primary key);Query OK, 0 row…

——解决方案——————–

SQL code

 如果表的ID 不是自增的: root@localhost : test 10:00:21>select * from tb_test; +------+---------------------+--------+--------+ | id | time | value1 | value2 | +------+---------------------+--------+--------+ | 1 | 2012-09-01 09:41:00 | 33.4 | 56.7 | +------+---------------------+--------+--------+ 1 row in set (0.00 sec) root@localhost : test 09:59:37>delimiter $$ root@localhost : test 10:00:17>create trigger insert_tb -> before insert on tb_test -> for each row -> begin -> select max(value1) into @a from tb_test; -> if new.value1 < @a then set new.value1= @a; -> end if; -> end $$ Query OK, 0 rows affected (0.07 sec) root@localhost : test 10:00:36>insert into tb_test values(1,now(),'12.4','56.7'); Query OK, 1 row affected (0.03 sec) root@localhost : test 10:00:51>select * from tb_test; +------+---------------------+--------+--------+ | id | time | value1 | value2 | +------+---------------------+--------+--------+ | 1 | 2012-09-01 09:41:00 | 33.4 | 56.7 | | 1 | 2012-09-01 10:00:51 | 33.4 | 56.7 | +------+---------------------+--------+--------+ 2 rows in set (0.00 sec) root@localhost : test 10:00:54>insert into tb_test values(1,now(),'55.4','56.7'); Query OK, 1 row affected (0.00 sec) root@localhost : test 10:01:03>select * from tb_test; +------+---------------------+--------+--------+ | id | time | value1 | value2 | +------+---------------------+--------+--------+ | 1 | 2012-09-01 09:41:00 | 33.4 | 56.7 | | 1 | 2012-09-01 10:00:51 | 33.4 | 56.7 | | 1 | 2012-09-01 10:01:03 | 55.4 | 56.7 | +------+---------------------+--------+--------+ 3 rows in set (0.00 sec) 是自增的话,修改下赋值这行就可以了。

欢迎大家阅读《mysql限制表的字段的值在每次插入时只能大于下一条记录的值》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql限制表的字段的值在每次插入时只能大于下一条记录的值
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址