mysql - Select in Trigger 返回超过 1 个值?

标签 mysql triggers mariadb

我为学校的足球数据库编写了一个触发器:

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/

相关文章:

php - 暴露用户ID有危险吗?

MySQL 触发器 IF 语句错误(不会创建)

MySQL 连接表中连接列中有多个重复值

php - 使用 Eloquent 查询耗尽了允许的内存限制

mysql - 尝试将 Play 应用程序连接到 mysql 数据库时出现 SQL 语法错误

mysql - 在 Symfony 中打印 Sql 查询

MySql错误: Can't update table in stored function/trigger because it is already used by statement which invoked this stored function/trigger

sql - 确定 Postgresql 中触发器的来源

mysql - MariaDB 不允许主机连接或拒绝用户访问

sql - 关于如何替换MariaDB语句中的UNION子句的思考