gpt4 book ai didi

mysql - 如何为用户 Z 处的余额 Y 设置默认值 X

转载 作者:行者123 更新时间:2023-11-29 10:17:08 25 4
gpt4 key购买 nike

我有下表;

CREATE TABLE `balance` (
`id` int(10) NOT NULL,
`user_id` int(10) DEFAULT NULL,
`amount` double DEFAULT NULL,
`wallet_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

现在,所有用户首次注册时所有“钱包”的默认余额都是 0,这就是我想要的。

但是,我该如何更改它,以便每个 user_id X 在首次注册时收到 1000 个 wallet_id 5,而不给他们 1000 个 wallet_id 4/6/7/8(所有其他钱包余额)?

编辑:

*************************** 1. row ***************************
Trigger: update_wallet_trigger
Event: INSERT
Table: users
Statement: BEGIN

UPDATE balance
SET amount = amount + 1000
WHERE user_id = NEW.id AND wallet_id = 1;

END
Timing: AFTER
Created: 2018-04-22 13:48:37.13
sql_mode: NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Definer: root@localhost
character_set_client: latin1
collation_connection: latin1_swedish_ci
Database Collation: latin1_swedish_ci
1 row in set (0.01 sec)

我的表格目前如下所示:

+-----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| user_id | int(10) | YES | | NULL | |
| amount | double | YES | | 0 | |
| wallet_id | int(11) | YES | | NULL | |
+-----------+---------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

使用您的触发器,它仍然不会写入任何新的余额/金额。

此外,如果在 USERS 中创建新用户,它会获得一个唯一的 ID (USER_ID),但这不会自动移植到余额表; user_id 在那里不存在。

余额表中仅列出已具有某种余额的 User_ID。

最佳答案

正如我在评论中提到的,触发器似乎很适合您的问题。您可以在用户表上创建插入后触发器,该触发器将在插入新用户记录后触发。对于 wallet_id=5,此触发器可以为该用户的余额添加 1000 的奖金。

DELIMITER //

CREATE TRIGGER update_wallet_trigger
AFTER INSERT
ON users FOR EACH ROW

BEGIN

INSERT INTO balance (user_id, amount, wallet_id)
VALUES
(NEW.id, 1000.0, 5)
ON DUPLICATE KEY UPDATE -- upsert; add 1000 if the record already exists
amount = amount + 1000.0;

END; //

DELIMITER ;

但是,您甚至可能不需要做这么多。您可以在创建新用户记录后立即通过应用程序代码进行更新。

编辑:

我注意到您目前在 balance 表中的 amount 列使用默认值 NULL。不要这样做,因为向该默认值添加任何内容也会导致 NULL。相反,使用默认值零:

CREATE TABLE balance (
id int(10) NOT NULL,
user_id int(10) NOT NULL,
amount double DEFAULT 0.0,
wallet_id int(11),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

关于mysql - 如何为用户 Z 处的余额 Y 设置默认值 X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49966481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com