【问题标题】:cascading updates in mysql tablesmysql表中的级联更新
【发布时间】:2011-11-03 13:57:58
【问题描述】:

一直在尝试解决这个问题,但没有成功。

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

User ID
Username
Password
First Name
Last Name

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

User ID
Vote 1
Vote 2
Vote 3

等等。等等

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

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

非常感谢 编辑

【问题讨论】:

    标签: php mysql key cascade relational


    【解决方案1】:

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

    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;
    

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

    注意使用加盐哈希密码。

    【讨论】:

      【解决方案2】:

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

      每次在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');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-08
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-23
        • 1970-01-01
        相关资源
        最近更新 更多