在插入

时间:2018-10-18 19:44:23

标签: mysql sql database triggers insert

我目前有2张桌子

  1. 用户

    • user_id
    • 用户名
    • 密码
    • 电子邮件
  2. 钱包

    • wallet_id
    • user_id
    • 信用

现在,当我将用户插入用户表时,我还想自动为此用户创建一个钱包。 我认为使用AFTER INSERT

在MySQL中触发事件是可能的
CREATE DEFINER = CURRENT_USER TRIGGER `pay`.`user_AFTER_INSERT` AFTER INSERT ON `user` FOR EACH ROW
BEGIN
INSERT INTO wallets (wallet_id, credit)
VALUES (current_user(user_id), 0); 

)
END

我该怎么做? (我使用MySQL Workbench)

1 个答案:

答案 0 :(得分:1)

这是触发器的相关代码。

CREATE TRIGGER new_user_added 
AFTER INSERT ON Users
FOR EACH ROW 
INSERT INTO Wallets (user_id, credit)
VALUES (NEW.user_id, 0.0);

这是完整的工作代码。 https://paiza.io/projects/FIpYIdpxg660G7gutjh-mA?language=mysql

点击 Run 按钮,查看代码如何在Users表中插入2行,然后触发器将2个新的user_id与{{1}添加在一起}归入0表中。

Wallets

就像其他人在注释中建议的那样,如果您要为每个用户创建1个钱包,则应使用CREATE TABLE `Users` ( user_id varchar(50) NOT NULL, user_name varchar(50) NOT NULL, user_password varchar(50) NOT NULL, email varchar(100) NOT NULL, PRIMARY KEY (`user_id`) ); CREATE TABLE `Wallets` ( user_id varchar(50) NOT NULL, credit decimal(10,2) NULL, PRIMARY KEY (`user_id`) ); CREATE TRIGGER new_usert_added AFTER INSERT ON Users FOR EACH ROW INSERT INTO Wallets (user_id, credit) VALUES (NEW.user_id, 0.0); INSERT INTO Users (user_id, user_name, user_password, email) VALUES ('A0001', 'John', 'sdg42fbg','john@doe.com'); INSERT INTO Users (user_id, user_name, user_password, email) VALUES ('A0002', 'Jane', 'Gh5sd46bW','jane@doe.com'); SELECT * FROM Users; SELECT * FROM Wallets; 作为user_id表中的外键。