【问题标题】:Ignore MySQL foreign key constraints in PHP忽略 PHP 中的 MySQL 外键约束
【发布时间】:2011-05-15 04:54:53
【问题描述】:

有没有办法在 php 脚本中覆盖 mysql 外键约束?

我有一个从 php 传递给 mysql 的查询,但是它没有通过外键约束,有没有办法在不改变数据库架构的情况下解决这个问题?

我只是在做一些测试,所以我会在完成后删除该行。

【问题讨论】:

    标签: php mysql testing foreign-keys


    【解决方案1】:
    $pdo->query('SET foreign_key_checks = 0');
    //do some stuff here
    $pdo->query('SET foreign_key_checks = 1');
    

    【讨论】:

      【解决方案2】:

      我的 sn-p 收藏中有这样的东西:

      SET @BACKUP_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS; 
      SET @@FOREIGN_KEY_CHECKS=0;
      
      -- Do stuff here
      
      SET @@FOREIGN_KEY_CHECKS=@BACKUP_FOREIGN_KEY_CHECKS;
      SET @BACKUP_FOREIGN_KEY_CHECKS=NULL;
      

      【讨论】:

      • 这是正确答案。不过我不记得需要双“@@”。
      • 这是会话变量的语法之一:SET SESSION FOO=1、SET @@SESSION.FOO=1 或 SET @@FOO=1。
      【解决方案3】:

      运行查询:set FOREIGN_KEY_CHECKS=0;

      mysql> insert into bar values(1);
      ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`bar`, CONSTRAINT `bar_ibfk_1` FOREIGN KEY (`foo_id`) REFERENCES `foo` (`foo_id`) ON UPDATE CASCADE)
      mysql> set FOREIGN_KEY_CHECKS=0;
      Query OK, 0 rows affected (0.00 sec)
      mysql> insert into bar values(1);
      Query OK, 1 row affected (0.00 sec)
      

      【讨论】:

      • OP 要求提供 PHP 脚本,而不是终端命令
      【解决方案4】:

      您可以执行该 MySQL 查询来禁用外键检查:

      SET FOREIGN_KEY_CHECKS=0;
      

      完成后别忘了启用它:

      SET FOREIGN_KEY_CHECKS=1;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-12
        • 1970-01-01
        • 2021-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-21
        • 2019-08-06
        相关资源
        最近更新 更多