当前位置: 首页 > 知识库问答 >
问题:

触发器确实使表发生变化

顾烨磊
2023-03-14

我在数据库中插入几个字段,我可以这样做。我已经采取了一个触发器,将数据插入到表"AFTER INSERT"事件中。

<html>
<body>

<?php
$id=$_POST['id'];
$a=$_POST['id'];
$fname=$_POST['fname'];
$lname=$_POST['lname'];
$city=$_POST['city'];

$con=mysqli_connect('127.0.0.1:3306' ,'root','root','my_db');
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$sql1="select * from table2";

$result = mysqli_query($con,$sql1);
echo "<table border='1'>

<tr>
<th>Id</th>
<th>Firstname</th>
<th>Lastname</th>
<th>City</th>
</tr>";
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))

{
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['fname'] . "</td>";
echo "<td>" . $row['lname'] . "</td>";
echo "<td>" . $row['city'] . "</td>";
echo "</tr>";
}
echo "</table>"; 

$sql3="创建触发器MySQL触发器在插入后的每一行开始插入到临时值(new.id,new.fname,new.lname,new.city,new.city);";mysqli_query($con,$sql3);

$sql5="INSERT INTO temp2 (id,fname, lname, city)
VALUES
('$_POST[id]','$_POST[fname]','$_POST[lname]','$_POST[city]')";
mysqli_query($con,$sql5);



echo "1 record added";

//--------------- Trigger started ------------------

print "<h2>CREATE MySQL Trigger In PHP</h2>";
echo "<table border='1'>
<tr>
<th>Id</th>
<th>Firstname</th>
<th>Lastname</th>
<th>City</th>
<th>Status</th>
</tr>";
$sql4="select * from temp";
$res = mysqli_query($con,$sql4);
while($row = mysqli_fetch_array($res,MYSQLI_ASSOC))

{
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['fname'] . "</td>";
echo "<td>" . $row['lname'] . "</td>";
echo "<td>" . $row['city'] . "</td>";
echo "<td>" . $row['stat'] . "</td>";
echo "</tr>";
}
echo "</table>"; 

mysqli_close($con);

?>
</body>
</html>

这将成功地将数据插入temp2表,但触发器中的事件不会对temp表进行任何更改。

我哪里出错了?

共有1个答案

丘华翰
2023-03-14

从mySQL手册

delimiter |

CREATE TRIGGER testref BEFORE INSERT ON test1
  FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
  END;
|

delimiter ;

你错过了delimeters和扳机的末端

你到底为什么要用php创建触发器?您不能在MySQL工作台上使用phpMyAdmin创建它吗?触发器应该位于数据库中。。。如果它不应该是永久性的,那么应该在php代码的末尾删除它。。。

 类似资料:
  • 本文向大家介绍Oracle触发器表发生了变化 触发器不能读它的解决方法(必看),包括了Oracle触发器表发生了变化 触发器不能读它的解决方法(必看)的使用技巧和注意事项,需要的朋友参考一下 出现原因,是因为在更新的的表和读取的表是同一个表。 出现错误时,是因为触发器在T_userupdateT在T_user上,触发器内部有读取了T_user所以有错误。 修改如下 多了PRAGMA AUTONOM

  • userNotesTable: 用户提醒表: 插入触发器: 更新触发器: 这是数据库的当前代码,以及提醒表的特定触发器。我遇到的困难是,从提醒表中的specific中的user notes表中选择特定的名称和额外的内容,所有这些都在更新触发器中。 插入时,和会被插入到提醒和搜索表中,但我希望能够使用特定名称和用户注释表中的额外内容更新搜索表,这可能吗?

  • 我只需要在更新容器中的所有4行时运行函数。我还没有在网上找到任何关于这是否可能的信息。如果你能告诉我这是否可能,如果可能的话,怎么做,那就太好了。

  • Apex触发器类似于在特定事件发生时执行的存储过程。 在记录事件发生之前和之后执行触发器。 语法 (Syntax) trigger triggerName on ObjectName (trigger_events) { Trigger_code_block } 执行触发器 以下是我们可以触发的事件 - insert update delete merge upsert undelete 触发示

  • 我有一个dynamoDb表,它设置为两个区域之间的全局(2019版)。 我在表上分配了一个lambda函数作为触发器。当一条记录插入到表的东版本中时,就会触发lambda的东版本。然后将记录复制到表的西版本,并触发lambda的西版本。 我想要一个λ触发。但是我也希望两个触发器都启用,以防一个区域出现故障。 我怎样才能做到这一点?我宁愿不使触发器逻辑幂等。

  • 如果我只在生产者端发送一条记录并等待,生产者何时将记录发送给经纪人?在Kafka文档中,我找到了名为“linger.ms”的配置,它说: 一旦我们得到 根据以上文件,我有两个问题。 > 如果生产者收到的数据达到batch.size,它会立即触发发送一个只包含一个批次的请求给代理?但是正如我们所知,一个请求可以包含许多批次,那么它是如何发生的呢? 这是否意味着即使是收到的数据也不足以批量处理。大小,