完全是mySQL触发幸福问题

因此,我创建了我的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; //

解决方法:

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 ;  

笔记

>请注意主键的数据类型中的更改,是的,如果您期望系统内部有大规模数据,这将是适合您的初始设置
> USER_ACCOUNT表的外键部分中的更改也应与参考表的列的相关键一致,并且还应级联进行任何更改
>将UserAccountBalence更改为UserAccountBalance,并将数据类型更改为容纳将存储在上述列中的货币值
>关于USERS表中的UserEmail列(从30变为50),您需要给应用程序一些喘息的空间,以防验证突然失败
>更新了触发区域,还保存了将在外键中使用的键

上一篇:CodeGo.net>在PSQL中为每个月创建一个存储“集合”?


下一篇:java-JPA实体应该匹配数据库约束和触发器吗?