完全是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),您需要给应用程序一些喘息的空间,以防验证突然失败
>更新了触发区域,还保存了将在外键中使用的键
标签:sql-insert,cascade,mysql,database,triggers 来源: https://codeday.me/bug/20191118/2031737.html