我在MySQL中的触发器有问题。我有一个名为"last_modified“的列,我希望在表被编辑时,它会自动更新为当前的日期和时间。使用触发器,这是我的SQL查询:
delimiter //
CREATE TRIGGER trg_update_responders BEFORE UPDATE ON survey_responders
FOR EACH ROW
BEGIN
UPDATE survey_responders
SET NEW.last_modified = CURRENT_DATETIME();
END;//
但是,当我更新表时,例如使用下面的查询:
UPDATE surve
我正在努力创造以下情况:
在更新后在“公司”表上创建一个触发器,如果该更新将公司的预算设置为0,如果该预算小于0。
但是,我与诸如无法更新、设置表等错误作斗争。我知道这是因为我需要从“更新后”改为“更新前”。但我不能忽视预期的代码。我能做什么?
我拥有的mySQL代码是:
delimiter $$
drop procedure if exists after_company_update $$
create trigger after_company_update after update on Company
for each row begin
update
我有一个工业系统,它将警报记录到远程托管的MySQL数据库中。每当警报的属性改变时(例如警报被激活、确认或关闭的时间),工业系统都会将新行插入到名为“警报”的表中。
我不希望每个警报有多个记录,所以我设置了两个数据库触发器。第一个触发器将每个新记录镜像到第二个表,根据需要创建/更新行。第二个表('alarm_display')将'Tag‘列设置为主键。“alarm”表没有主键。此触发器的代码为:
CREATE TRIGGER `mirror_alarms` BEFORE INSERT ON `alarms`
FOR EACH ROW
INSERT INTO
所以我马上就要做这个测试了,我正在做练习测试,但是不知何故我的触发器不工作了。我完全按照别人教的那样做了,但就是行不通。有人能帮我吗?
我创建了这个表:
CREATE TABLE DiscountActions(
discountID int(5) NOT NULL AUTO_INCREMENT,
dishName varchar(70) NOT NULL,
type varchar(70) NOT NULL,
discountPercentage varchar(70) NOT NULL,
startdate date NOT NULL,
enddate date NOT NULL,
PRI
我正在尝试理解触发器,我认为我完全理解它们,但我还没有能够实现它们中的任何一个。我希望这段代码删除一个名为"test“的用户。因此,如果任何人将他们的名字更新为"test“,则应该删除该用户。
我的示例代码:
CREATE TRIGGER `my_trigger`
BEFORE UPDATE ON `my_db` FOR EACH ROW
BEGIN
DELETE FROM my_table WHERE `username` = 'test';
END
我的错误:
#1064 - You have an error in your SQL syntax; che
调用表上的触发器时,可以删除表中的行吗?
例如:
insert into table1 (col1, col2, col3) values (val1, val2, val3);
CREATE DEFINER=`root`@`localhost` TRIGGER `db`.`trig_name` BEFORE INSERT ON `table1` FOR EACH ROW
BEGIN
if (new.val1 > (select val1 from table1 where val2 = new.val2 limit 1))
delete from table1 where va
DELIMITER //
CREATE TRIGGER `Salary` AFTER UPDATE ON `employee`
FOR EACH ROW BEGIN
IF OLD.time_out <> NEW.time_out THEN
UPDATE employee SET time_work=TIMEDIFF(time_out,time_in);
END IF;
END;
DELIMITER ;
我使用这个查询
更新DataBase。employee SET time_out='2014-10-22 16:41:09‘其中
嗯,我已经研究过了,还没有找到解决以下问题的方法'SQL Error (1442): Can not update table' messages' in stored function / trigger because it is already used by statement Which invoked this stored function / trigger. `
我的触发器已创建,只有当我在消息表上运行插入时,才会抛出此错误,我的触发器是
DELIMITER $$
DROP TRIGGER IF EXISTS `onMessage` ;
CREATE
我有一个带有order属性的测试表。当order改变它的值时,我需要重新计算表中的所有order值。我有以下触发器:
DELIMITER $$
USE `testing`$$
DROP TRIGGER /*!50032 IF EXISTS */ `UpdateOrder`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `UpdateOrder` AFTER UPDATE ON `upd_tst`
FOR EACH ROW BEGIN
IF (OLD.or
我必须创建一个触发器,在Quantity字段达到0时自动删除行,但是在运行一个使Quantity =0的更新之后,它会给出以下错误:
无法更新存储函数/触发器中的表,因为它已经被调用此存储函数/触发器的语句所使用。
下面是代码:
CREATE TRIGGER Deleterow
AFTER UPDATE
ON Sold
FOR EACH ROW
DELETE FROM Sold WHERE NEW.Quantity = 0
我正在处理mysql中的一个项目,但我不能在两个触发器之间工作,我想要做的是
1)创建一个触发器,该触发器在一个表中插入值后更新另一个表的数据,工作
2)创建一个触发器,在更新上述表后,删除引爆第一个触发器的行,不起作用
我搜索了文档,示例,教程,goolge,当然还有网站的不同帖子,但我没有找到任何可以指导我或帮助解决我的问题的东西:
现在我有了这个
1)
CREATE TRIGGER update1 BEFORE INSERT ON table1
FOR EACH ROW
UPDATE table2 SET table2.value = table2.value +
NEW.val
RELATIONSHIP : students (1 can have N) addresses
场景:学员可以有许多记录,但只有一个相关记录必须将'current‘字段设置为'Yes’(其他值为NULL),因此下面的查询应该始终每个学生只返回一条记录。
SELECT * FROM address WHERE student_id = 5 AND current = 'Yes'
问题:在插入或更新同一个学生之后,人员有时会将多个记录标记为“是”,所以我需要避免这样做。在MySQL中使用触发器或存储过程的最佳方法是什么?
如果更新发生在“address”表上,则应
我可以使用如下触发器在表中插入数据时强制执行数据限制:
create table com(id int);
DELIMITER ;;
CREATE TRIGGER checkage_bi BEFORE INSERT ON com FOR EACH ROW
BEGIN
DECLARE dummy,baddata INT;
SET baddata = 0;
IF NEW.id > 20 THEN
SET baddata = 1;
END IF;
IF NEW.id < 1 THEN
SET baddata = 1;
END IF;
IF b
DB: MySQL
使用: MySQL工作台
我目前正在为班级设计一个项目,我们必须设计一个机场网站,用户可以登录/注册和购买各种航班提供的机票。在这个项目工作了一段时间之后,我意识到我的触发器不起作用了。
我收到错误:Error Code: 1442. Can't update table 'reservation' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
在创建供用户选择和购买门票的表单
我正在编写我的第一个sql触发器query.So,我试图理解触发器statement.My计划的思想是--
1.将数据插入到一个称为“触发器_表”的表中;
2.插入后,从完全相同的表中获取数据,并使用PDO将其存储到php变量中;
因此,我编写了下面的触发器statement.And,在mysql工作台中执行sql时得到了此错误。
错误1415:不允许从触发器返回结果集
SQL Statement:
CREATE TRIGGER `trigger_table_AINS` AFTER INSERT ON trigger_table FOR EACH ROW
-- Edit t
我有这样的代码,如果C列等于一个特定的值,它可以防止重复
DELIMITER $$
CREATE TRIGGER special_unique_test BEFORE INSERT ON myTable
FOR EACH ROW BEGIN
IF NEW.C = 'x' AND EXISTS (
SELECT * FROM myTable WHERE A = NEW.A AND B = NEW.B AND C = 'x'
)THEN
UPDATE myTable SET D = D
我有下面的扳机,真是烦死我了。
我想在触发器中进行更新,但是MySQL不允许它,因为“触发”触发器的语句是指参与者表。
我能做些什么才能让它发挥作用?我考虑过存储过程,但在这种情况下也是禁止的。
逻辑是:我有一张有与会者参加会议的桌子。如果来自'vip‘组的人出席,那么来自'tap’组的人应该始终接受邀请这一不变条件。在这种情况下,如果有“贵宾”出席会议,我必须更新的所有“点击”出席情况,但这怎么可能?
DELIMITER $$
CREATE TRIGGER tap_meet_vip
BEFORE INSERT ON participants
FOR EACH ROW BEG
我不知道为什么我的触发器不工作,当我手动使用它时,查询可以工作,但当我想被触发器更新时,它不工作。有人能告诉我为什么吗?
这是我的触发器:
CREATE TRIGGER `upd_PTS` AFTER UPDATE ON `pos_table`
FOR EACH ROW BEGIN
IF (NEW.played_games <> OLD.played_games)
THEN
update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1));
END IF;
END
很简
我有一个mysql表,它附带了一个触发器,它将这个表中的更改记录到第二个表中。
CREATE TRIGGER log_table BEFORE UPDATE ON table1
FOR EACH ROW BEGIN
INSERT INTO log_table(filed) VALUES(NEW.field);
END;
//
现在,如果我从PHP中执行对table1的插入,那么随后调用mysqli_insert_id()。
这会返回table1中的新ID吗?还是log_table中的新ID?
我的扳机有问题。
DELIMITER $$
CREATE TRIGGER complete_transation
AFTER INSERT ON transaction
FOR EACH ROW BEGIN
DECLARE id_trans INT;
DECLARE id_stock INT;
DECLARE type_transaction BIT(1);
DECLARE id_match INT;
SET @id_trans = NEW.idTransaction;
SET @id_stock = NEW.stock_idStocks;
SET @type_transaction =
我正在尝试设置一个MySql触发器,以便在ODBC中插入/更新数据后运行。
我的扳机在下面:
CREATE TRIGGER `myTrigger`
AFTER INSERT ON `testTable` FOR EACH ROW UPDATE `testTable` SET `Field One` = CONCAT(`Field One`, ' - Trigger');
我的触发器语句在MySql工作台中运行,但当我从Microsoft数据库连接到testTable,然后尝试插入一行时,就会得到其中一个:
为了使事情更有趣,当我尝试运行以下命令时:
INSERT IN
我正在尝试更新一个特定的列,该列是通过取column_3 =值所在位置的column_1值的行的平均值来更新的
但是它给出了一个错误
我的代码
Error: Can't update table 'moving_average' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
delimiter $$
Create TRIGGER takeaverage AFTER insert ON movin
我正在尝试创建一个MySQL触发器,以禁用某人的帐户,如果他们已经登录到网站3次。我尝试使用以下代码创建此触发器,但无论times_logged_in是什么,它都不会将is_active设置为0。任何帮助都将不胜感激。
CREATE TRIGGER updateTrigger AFTER UPDATE ON users
FOR EACH ROW
BEGIN
UPDATE users SET is_active=0 WHERE NEW.is_code=1
AND NEW.times_logged_in>=3
AND NEW.user_id=user_id;
END;
我已经在互联网上寻找了很多关于mysql error #1442的原因,上面说
无法更新存储函数/触发器中的表“unlucky_table”,因为调用此存储函数/触发器的语句已经使用了它
有人说这是mysql中的一个bug,或者它没有提供的特性。
一些人声称,这是由于递归行为。
现在我不明白为什么这是递归的。我有一个例子,其中我有两个表table1和table2,我运行一个sql查询作为
update table1 set avail = 0 where id in (select id from table2 where duration < now() - interva
我对MySql中的触发器有问题。创建触发器时,会出现语法错误。
CREATE TABLE user (
id int NOT NULL,
completeName varchar(255) NOT NULL,
email varchar(255) NOT NULL,
passw_hash varchar(255) NOT NULL,
accType varchar(255) NOT NULL,
PRIMARY KEY (id)
);
create or REPLACE trigger test
AFTER insert on user
FOR EACH ROW
BEGI
让我用最简单的话说--是否可以删除实际上设置在触发器上的行,即我有一个AFTER INSERT ON <table2>触发器,触发器INSERT / UPDATE中的SQL是另一个<table1> (基于WHERE),最后倾向于删除(基本上触发触发器的行)中的条目/行。
触发器SQL:
DELIMITER ||
DROP TRIGGER IF EXISTS trg_adddata_tmp ||
CREATE TRIGGER trg_adddata_tmp
AFTER INSERT ON adddata_tmp
FOR EACH ROW
BEGIN
我有两张桌子:
具有以下属性的sanction:DriverID、Calification、Points
具有以下属性的people:pID、city、TotalPoints
我有个扳机:
DROP TRIGGER IF EXISTS updatePoints_tgr;
delimiter $$
CREATE TRIGGER
updatePoints_tgr AFTER UPDATE
ON sanctions FOR EACH ROW
BEGIN
if NEW.points > OLD.points
THEN
UPDATE peopl
我希望MySQL数据库表与相应的elasticsearch索引保持同步。我在写我自己的工作。MySQL表具有InnoDB引擎。我添加了updated_at列,即CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。我使用这个查询来执行同步:
SELECT * FROM table WHERE updated_at>=bookmark;
我对它进行了测试,发现有一些插入物丢失了。
提交前是否计算了CURRENT_TMESTAMP?
我的MySql db中有这样的MySql表。
Id Title RepeatCount
--------------------------
1 Tag1 1
2 Tag2 5
3 Tag3 8
我希望将记录插入到PDO中的表中,如果不存在相同Title的记录(Title是主键),如果存在,则增加记录RepeatCount。
就像这个例子:
prepare(
"IF (:Title IN (SELECT Title FROM tag))
THEN INSERT INTO tag (T