[英]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指出的那样,您不应复制数据。 ,在属于唯一的列teacherTable
, mentorTable
和studentTable
是因为这是唯一的那些角色的信息。 因此,例如,教师可能具有员工编号和部门编号以及状态级别(“正式教授等”),而学生可能具有甚至可能与员工ID编号重叠的学生ID。
但是回到使用存储过程...不仅可以将其插入到多个表中,还可以避免SQL注入的问题。 请注意,在插入到userTable
,您将希望存储过程保存使用SELECT LAST_INSERT_ID()
输入的最后一个ID,以便使用该ID在第二个表条目中创建记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.