mysql表中的级联更新

时间:2011-11-03 13:57:59

标签: php mysql key cascade relational

试图绕过这一个,但一直没有成功。

基本上我正在尝试创建一个只包含两个表的数据库。 第一个表是登录表,包含列:

User ID
Username
Password
First Name
Last Name

第二个表是投票表,包含列:

User ID
Vote 1
Vote 2
Vote 3

等。等

无论如何,我可以将这些表与用户ID作为主键关联,可以级联更新/删除,这样当我在登录表中添加一个条目时,它会自动在投票表中创建一个条目相同的用户ID和所有投票列的默认值?

我可以将投票添加到主表中,但希望尽可能地将它们分开,因为不是每个人都会创建投票。

非常感谢 编

2 个答案:

答案 0 :(得分:0)

您可以在logins表格上指定插入trigger

每次将行插入logins表时都会执行此操作。您可以指定触发器要执行的操作。在这种情况下,您可以创建触发器,使用刚刚在vote表中创建的ID以及默认值将单行插入login表。

类似于:

CREATE TRIGGER logins_default_vote AFTER INSERT ON logins
FOR EACH ROW
INSERT INTO vote (UserID,Vote1,Vote2,Vote3) 
VALUES (NEW.UserId,'vote1 default','vote2 default','vote3 default');

答案 1 :(得分:0)

如果您想要级联更新,则需要使用交易:

START TRANSACTION;

INSERT INTO logins (username, passhash, salt, `first name`, `last name`)
  VALUES ('$username', SHA2(CONCAT('$salt','$password'),512), '$salt',
          '$firstname', '$lastname');
SELECT @userid:= LAST_INSERT_ID();
INSERT INTO votes (userid) VALUES (@userid);

COMMIT;

确保在投票表的表定义中设置了默认值。

请注意使用盐渍哈希密码。