繁体   English   中英

在注册表单上INSERT->更新另一个表中的相应值

[英]On signup form INSERT -> update corresponding values in another table

从usersTable中有userRoles。 -老师,导师,学生。

当用户提交注册表单时,它们是三者之一。

我还有另外三个表,即TeacherTable,mentorTable,studentTable。

这三个表具有“ userID”的FK,即userRoles中的PK。

有没有一种方法可以将INSERT名称,姓氏,电子邮件等自动插入到教师,指导者或学生表中(取决于userRole),以使名称,姓氏,电子邮件等与主userTable中的“ userID”相匹配?

我想要某种有效地做到这一点的方法,而不是必须多次使用INSERT并使其变得很长。 谁能告诉我如何做到这一点,因为我对此还很陌生。

CREATE TABLE userTable (
    userID int NOT NULL PRIMARY KEY AUTO_INCREMENT,
    userRole enum('admin','teacher','mentor','student') NOT NULL DEFAULT 'student',
    houseID enum('1','2','3','4') NOT NULL,
    firstName varchar(100) NOT NULL,
    lastName varchar(100) NOT NULL,
    gender enum('Male','Female') NOT NULL,
    yearLevel int,
    emailAddress varchar(100) NOT NULL,
    user_username varchar(100),
    user_password varchar(100) NOT NULL,
    userTS timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE teacherTable (
    teacherID int NOT NULL PRIMARY KEY AUTO_INCREMENT,
    userID int NOT NULL,
    firstName varchar(100) NOT NULL,
    lastName varchar(100) NOT NULL,
    emailAddress varchar(100) NOT NULL
);

CREATE TABLE mentorTable (
    mentorID int NOT NULL PRIMARY KEY AUTO_INCREMENT,
    userID int NOT NULL,
    firstName varchar(100) NOT NULL,
    lastName varchar(100) NOT NULL,
    emailAddress varchar(100) NOT NULL,
    gender enum('Male','Female') NOT NULL,
    yearLevel int NOT NULL
);

CREATE TABLE studentTable (
    studentID int NOT NULL PRIMARY KEY AUTO_INCREMENT,
    userID int NOT NULL,
    firstName varchar(100) NOT NULL,
    lastName varchar(100) NOT NULL,
    emailAddress varchar(100) NOT NULL,
    gender enum('Male','Female') NOT NULL,
    yearLevel int NOT NULL
);

ALTER TABLE teacherTable
    ADD CONSTRAINT teacherTable_fk_1 FOREIGN KEY (userID) REFERENCES userTable (userID);

ALTER TABLE mentorTable
    ADD CONSTRAINT mentorTable_fk_1 FOREIGN KEY (userID) REFERENCES userTable (userID),
    ADD CONSTRAINT mentorTable_fk_2 FOREIGN KEY (gender) REFERENCES userTable (gender);

ALTER TABLE studentTable
    ADD CONSTRAINT studentTable_fk_1 FOREIGN KEY (userID) REFERENCES userTable (userID),
    ADD CONSTRAINT studentTable_fk_2 FOREIGN KEY (gender) REFERENCES userTable (gender);

使用存储过程。 但是正如@Barmar指出的那样,您不应复制数据。 ,在属于唯一的列teacherTablementorTablestudentTable是因为这是唯一的那些角色的信息。 因此,例如,教师可能具有员工编号和部门编号以及状态级别(“正式教授等”),而学生可能具有甚至可能与员工ID编号重叠的学生ID。

但是回到使用存储过程...不仅可以将其插入到多个表中,还可以避免SQL注入的问题。 请注意,在插入到userTable ,您将希望存储过程保存使用SELECT LAST_INSERT_ID()输入的最后一个ID,以便使用该ID在第二个表条目中创建记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM