【问题标题】:MySQL automaticly insert data in to other table after insertMySQL在插入后自动将数据插入到其他表中
【发布时间】:2018-10-18 19:44:23
【问题描述】:

我目前有 2 张桌子

  1. 用户

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

    • wallet_id
    • user_id
    • 学分

现在,当我将用户插入用户表时,我还想自动为该用户创建一个钱包。 我认为这可以通过 MySQL 中的触发事件使用AFTER INSERT

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)

【问题讨论】:

  • 阅读触发器中的NEWOLD
  • 另外,查看您的表架构,您应该将 wallet_id 从 user 表中移出,而在 wallet 表中有一个 user_id 字段(用于规范化)
  • @MadhurBhaiya 是的,你是对的,这只是一个真正快速简单的设置。但我会改变它!

标签: mysql sql database triggers insert


【解决方案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 行,然后触发器将带有 0 信用的 2 个新 user_ids 添加到 @987654326 @表。

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;

就像其他人在 cmets 中建议的那样,如果您要为每个用户创建 1 个钱包,您应该使用 user_id 作为 Wallets 表中的外键。

【讨论】:

  • 非常感谢!!你帮了大忙!
猜你喜欢
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 2022-10-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多