mysql - 导入数据库,mysql触发器未运行

标签 mysql phpmyadmin

我正在将 sql 文件导入数据库。

该sql文件是旧数据库的导出,之后添加了一些新用户。

当我导入它时,所有用户都会被导入,但是将用户添加到其他表的触发器不会运行。

编辑:如果我导入一个空白数据库,然后在后面插入名称,它就可以工作。

sql 文件的片段(带触发器的用户表):

--
-- Table structure for table `users`
--

CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL,
  `studentid` int(11) NOT NULL,
  `name` text NOT NULL,
  `team_id` int(11) NOT NULL,
  `overall_user_score` int(11) NOT NULL,
  `overall_score_workshop` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `users`
--

INSERT INTO `users`(`id`, `name`, `studentid`, `team_id`) VALUES 
(1,'User Name',1111,1); // this goes on for 127 names


--
-- Triggers `users`
--
CREATE TRIGGER `Insert Into Classes` AFTER INSERT ON `users`
 FOR EACH ROW BEGIN

INSERT INTO `ppm2`(`user_id`) VALUES (new.id);
INSERT INTO `pca`(`user_id`) VALUES (new.id);
INSERT INTO `pth1`(`user_id`) VALUES (new.id);
INSERT INTO `pth2`(`user_id`) VALUES (new.id);
INSERT INTO `pds2`(`user_id`) VALUES (new.id);

INSERT INTO `userbadges`(`user_id`, `badge_id`, `seen`) VALUES 
(new.id,1,0),
(new.id,2,0),
(new.id,3,0),
(new.id,4,0),
(new.id,5,0),
(new.id,6,0);

END
//
DELIMITER ;

最佳答案

脚本中的语句按照其出现的顺序执行。

要触发触发器,您必须在创建触发器后对 users 执行 INSERT 语句。

更改脚本文件的一部分,如下所示:

--
-- Triggers `users`
--
DELIMITER //
CREATE TRIGGER `Insert_Into_Classes` AFTER INSERT ON `users`
 FOR EACH ROW BEGIN
 -- write trigger body here
 END;
//
DELIMITER ;

INSERT INTO `users`(`id`, `name`, `studentid`, `team_id`) VALUES 
(1,'User Name',1111,1); // this goes on for 127 names

脚本文件确实是由 dump 工具自动生成的。
并且生成的文件不包含与我们大多数人期望的顺序相同的 SQL 语句。

或者,

  1. 您可以转储数据库没有数据但包含所有其他数据 数据库对象,例如触发器、函数和过程。
  2. 并且,将 DATA 语句作为显式转储。
  3. 以相同的顺序执行上述转储。
  4. 您现在可以检查触发器是否按预期触发。

关于mysql - 导入数据库,mysql触发器未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32068005/

相关文章:

php - MySQL根据另一个表中的id数据从一个表返回结果

MySQL Workbench 未连接到本地主机

php - MariaDB 错误与看似正确的事务 SQL

mysql - 使用表中的 ID,然后使用该表中的 ID 获取数据 SQL

mysql - 日期功能不起作用

php - 无法通过php脚本将csv数据插入mysql表

mysql - 在同一查询中使用 where 子句和不使用 where 子句进行选择

php - 左连接在我准备好的语句中不起作用(mysqli)

mysql 连接 2 个表 - 显示一张表中的所有行

mysql - 在 Amazon EC2 中安装 Apache、MySQL(并保护它)、PHP、phpMyAdmin