完全是mySQL触发幸福问题

时间:2016-03-23 02:36:53

标签: mysql database triggers sql-insert cascade

所以我创建了我的lil DB,然后使用了这个东西。我添加了两个表,现在我想做的就是这样:当用户插入USERS表时,还将一些默认信息插入到USER_ACCOUNT表中,该表对应于新插入的用户。显然,我做错了什么,但我不知道是什么......提前谢谢。 =)

CREATE DATABASE REST_PROJECT;
USE REST_PROJECT;

CREATE TABLE USERS (
    UserID              INT Primary Key AUTO_INCREMENT NOT NULL,
    UserEmail           VARCHAR(30),
    UserPassword        VARCHAR(30)
);

CREATE TABLE USER_ACCOUNT (
    UserAccountID         INT Primary Key AUTO_INCREMENT NOT NULL,
    OwnerUserID           INT,
    UserAccountName       VARCHAR(30),
    UserAccountType       VARCHAR(10) NOT NULL,
    UserAccountBalence    INT,
    FOREIGN KEY (OwnerUserID) REFERENCES USERS(UserID)
);

DELIMITER //
 CREATE TRIGGER makeDefaultUserAccount
 AFTER INSERT ON USERS
 For each row
 BEGIN
    INSERT INTO USER_ACCOUNT 
    (UserAccountName, UserAccountType, UserAccountBalence) 
    values ('Default Account','default', 100);
END; //

2 个答案:

答案 0 :(得分:3)

CREATE DATABASE REST_PROJECT;
USE REST_PROJECT;

CREATE TABLE `USERS` (
    UserID              BIGINT(20) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
    UserEmail           VARCHAR(50),
    UserPassword        VARCHAR(30)
);

CREATE TABLE `USER_ACCOUNT` (
    UserAccountID         BIGINT(20) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
    UserID                BIGINT(20) UNSIGNED NOT NULL,
    UserAccountName       VARCHAR(30),
    UserAccountType       VARCHAR(10) NOT NULL,
    UserAccountBalance    DECIMAL(19,6),
    CONSTRAINT `fk_USER_ACCOUNT_UserID` FOREIGN KEY (`UserID`)
        REFERENCES `USERS`.`UserID` (`UserID`)
        ON DELETE CASCADE
        ON UPDATE CASCADE
);

DELIMITER //
CREATE TRIGGER `makeDefaultUserAccount`
AFTER INSERT ON `USERS`
FOR EACH ROW BEGIN
    INSERT INTO USER_ACCOUNT (OwnerUserID, UserAccountName, UserAccountType, UserAccountBalance) 
    VALUES (NEW.UserID, 'Default Account','default', 100);
END//
DELIMITER ;  

备注

  • 请注意datatype的{​​{1}}中的更改,是的,如果您希望系统内的primary keys缩放数据是适合您的large < / LI>
  • initial setup部分foreign key部分的更改也应符合USER_ACCOUNT的相关密钥,并且还应reference table's column进行任何更改
  • cascade更改为UserAccountBalence,将UserAccountBalance更改为将保存在上述列中的datatype
  • 关于currency value表格中的UserEmail列,已从USERS更改为50,您需要为应用程序提供一些呼吸空间30突然失败
  • 更新了触发区域,同时保存了您将在validation
  • 中使用的key

答案 1 :(得分:0)

如果没有看到错误消息,我只是在猜测,但我怀疑你不满足于FK约束的事实应该受到指责。您的触发器代码应该是

DELIMITER //
  CREATE TRIGGER makeDefaultUserAccount
    AFTER INSERT ON USERS
    For each row
    BEGIN
      INSERT INTO USER_ACCOUNT 
          (OwnerUserID, UserAccountName, UserAccountType, UserAccountBalence) 
        values (NEW.UserID, 'Default Account','default', 100);
    END; //
DELIMITER ;

USER_ACCOUNT.OwnerUserID设置为刚刚插入的USERS.UserID的值。