当我从学生表中删除时,它也会删除选民表上的项目

时间:2018-04-19 04:05:51

标签: php sql mysqli

我是新手,不知道如何编码,但我想修改系统。

TARGET:当我删除' id'从学生表中它也将删除用户ID'来自选民表。

屏幕截图:

学生表

enter image description here

选民表

enter image description here

这是我正在使用的代码。 (此代码仅删除学生表上的行) 我尝试过使用其他查询但没有任何反应。有人可以为我修复代码吗?我是新手。

<?php ob_start();
session_start();
if (!isset($_SESSION['id'])){
    header("location:../login.php");
}
?>
<?php
include('../connect.php');
$id=$_GET['id'];
$del = mysqli_query($connection,"DELETE FROM students WHERE id='$id'");

?>

2 个答案:

答案 0 :(得分:1)

当您使用任何RDBMS时,这是所需的功能。即,当有两个表之间有foreign key relationship时,第一个表的foreign key是第二个表的Primary key。然后删除第一个表记录将触发第二个表中与其关联的记录的deletion。 这称为级联删除,使用以下定义可以更好地解释。 具有级联删除的外键意味着如果删除父表中的记录,则会自动删除子表中的相应记录。这在SQL Server中称为级联删除。

答案 1 :(得分:0)

<强> MySQL的:

您可以使用JOIN这样删除:

DELETE users
  FROM users
 INNER JOIN voters
         ON users.id = voters.userid
 WHERE users.name = 'Jordan Santos';

有关数据的示例,请参阅this SQL fiddle。 (您可以使用DELETE注释掉#语句,以查看查询结果而不删除任何内容。)

<强> Postgres的: 您可以使用两个Common Table Expressions(即WITH子句)在每个表中执行删除操作:

WITH user_deletion AS (
  -- this deletes the user based on username
  DELETE
    FROM users u
   WHERE username='Dad'
  RETURNING id, username
), 

vote_deletion AS (
   -- this gets the deleted user_id from above and deletes the corresponding vote(s)
   DELETE
    FROM votes
   WHERE user_id = (SELECT id FROM user_deletion)
  RETURNING vote_id, user_id, vote
)

-- this runs the DELETE statements in the clauses above
SELECT udel.*, vdel.* 
  FROM user_deletion udel
 INNER JOIN vote_deletion vdel
    ON udel.id = vdel.user_id;

有关带数据的Postgres示例,请参阅this SQL Fiddle,并在删除之前和之后显示结果。