我为学校的足球数据库编写了一个触发器:
SELECT * FROM bundesliga.tippscheine;
delimiter |
drop trigger if exists control_tip_konto|
create trigger control_tip_konto after insert on tippscheine
for each row
begin
declare temp INT;
set temp = (select new.TPS_Einsatz from tipper join tippscheine where TP_ID=TPS_Tipper_ID);
if(new.TPS_Einsatz>temp)
then
update tippscheine join tipper on TP_ID=TPS_Tipper_ID set new.TPS_Einsatz = temp where TP_ID=TPS_Tipper_ID and new.TPS_Tipper_ID=TPS_Tipper_ID;
end if;
end |
delimiter ;
它应该查看用户的帐户余额,如果他想投注比当前拥有的更多的钱,触发器应该将赌注设置为帐户余额。(即某人的帐户余额为 20 美元,并且想要下注 22 美元,触发器应将赌注设置回 20 美元)
问题是选择查询返回的值多于 1 个。如果我用"new"。在变量之前,它应该只选择触发器解析后当前添加的数据?
这是用于触发器的两个表:
+--------+--------------+---------------+--------------------+------------------+-----------------+-------------+------------+---------------+---------------+
| TPS_ID | TPS_SpieleID | TPS_Tipper_ID | TPS_HeimM. | TPS_Ausw.M. | TPS_Getippt auf | TPS_Einsatz | TPS_Gewinn | TPS_Tore Heim | TPS_Tore Aus. |
+--------+--------------+---------------+--------------------+------------------+-----------------+-------------+------------+---------------+---------------+
| 1 | 1 | 1 | FC Bayern Muenchen | SV Werder Bremen | 1 | 5 | 10 | L | L |
| 2 | 1 | 2 | FC Bayern Muenchen | SV Werder Bremen | L | 5 | 10 | 3 | 0 |
| 3 | 1 | 3 | FC Bayern Muenchen | SV Werder Bremen | 1 | 5 | 10 | L | L |
| 4 | 1 | 4 | FC Bayern Muenchen | SV Werder Bremen | L | 10 | 20 | 5 | 0 |
| 5 | 2 | 1 | Borussia Dortmund | 1. FSV Mainz 05 | 1 | 5 | 10 | L | L |
| 6 | 2 | 2 | Borussia Dortmund | 1. FSV Mainz 05 | 2 | 10 | 20 | L | L |
| 7 | 3 | 3 | 1. FC Koeln | SV Darmstadt 98 | X | 5 | 10 | 2 | 2 |
| 8 | 3 | 4 | 1. FC Koeln | SV Darmstadt 98 | L | 10 | 20 | 1 | 2 |
| 9 | 4 | 1 | Hamburger SV | FC Ingolstadt 04 | 1 | 5 | 10 | L | L |
+--------+--------------+---------------+--------------------+------------------+-----------------+-------------+------------+---------------+---------------+
还有:
+-------+-------------------+-------------------+--------------------------------+--------------------+--------------------+----------+
| TP_ID | TP_Synonym | TP_Beigetreten am | TP_Email | TP_Gewonnene Tipps | TP_Verlorene Tipps | TP_Konto |
+-------+-------------------+-------------------+--------------------------------+--------------------+--------------------+----------+
| 1 | Adil_Abi | 08.09.2016 | adil.abi@live.de | 0 | 0 | 0 |
| 2 | IterranI | 08.09.2016 | IterranI@zz.de | 0 | 0 | 0 |
| 3 | Ich1212 | 08.09.2016 | Ich1212@hiluaaa.de | 0 | 0 | 0 |
| 4 | Die_Weiße_Gefahr | 08.09.2016 | Die_Weiße_Gefahr@black.org | 0 | 0 | 0 |
| 5 | G0tt | 08.09.2016 | G0tt@outlook.com | 0 | 0 | 0 |
| 6 | Grandfire | 08.09.2016 | Grandfire@web.de | 0 | 0 | 0 |
| 7 | test123testem | 08.09.2016 | not_available@notgive.nogiven | 0 | 0 | 0 |
| 8 | OliOberkrass | 08.09.2016 | deroberkrasseoli@olvie.de | 0 | 0 | 0 |
| 9 | SwaggimacSwagson | 08.09.2016 | name@zuschwer.com | 0 | 0 | 0 |
| 10 | Betonmicha | 08.09.2016 | betonmicha@vodka.ru | 0 | 0 | 0 |
| 11 | kekm8 | 08.09.2016 | cptdashsuperhengst@hotmail.biz | 0 | 0 | 0 |
| 12 | Duffman | 08.09.2016 | Duffman@simpsons.com | 0 | 0 | 0 |
| 13 | Bielzer | 08.09.2016 | Bielzer@Bielzer.biezler | 0 | 0 | 0 |
| 14 | ares | 08.09.2016 | ares@greece.de | 0 | 0 | 0 |
| 15 | spidi | 08.09.2016 | spidi@zinker.de | 0 | 0 | 0 |
| 16 | AkaNixon | 08.09.2016 | Akanixon@31er.de | 0 | 0 | 0 |
| 17 | Besserwisserin | 08.09.2016 | Besserwisserin@amk.de | 0 | 0 | 0 |
+-------+-------------------+-------------------+--------------------------------+--------------------+--------------------+----------+
我希望有人可以向我解释这一点,我对数据库还很陌生,还没有收集太多经验。
最佳答案
应该更简单;类似的东西
SELECT OLD.bet = LEAST(OLD.bet, account_balance) FROM ...;
没有更新
等
关于mysql - Select in Trigger 返回超过 1 个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40296557/