Php mysql表中的级联更新

Php mysql表中的级联更新,php,mysql,key,cascade,relational,Php,Mysql,Key,Cascade,Relational,我一直在想这个问题,但都没有成功 基本上,我试图创建一个只包含两个表的数据库。 第一个表是logins表,包含以下列: User ID Username Password First Name Last Name User ID Vote 1 Vote 2 Vote 3 第二个表是投票表,包含以下列: User ID Username Password First Name Last Name User ID Vote 1 Vote 2 Vote 3 等等等等 我是否可以将这些表与用户I

我一直在想这个问题,但都没有成功

基本上,我试图创建一个只包含两个表的数据库。 第一个表是logins表,包含以下列:

User ID
Username
Password
First Name
Last Name
User ID
Vote 1
Vote 2
Vote 3
第二个表是投票表,包含以下列:

User ID
Username
Password
First Name
Last Name
User ID
Vote 1
Vote 2
Vote 3
等等等等

我是否可以将这些表与用户ID关联为主键,从而可以级联更新/删除,以便在登录表中添加条目时,它会自动在投票表中创建具有相同用户ID的条目,并为所有投票列创建默认值

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

非常感谢
Eds

您可以在
登录
表中指定插入

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

比如:

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');

如果要级联更新,则需要使用事务:

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;
确保在投票表的表定义中设置了默认值

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