MySQL中建立一个update触发器,如果某字段变为0则删去该行

作者&投稿:歧裘 (若有异议请与网页底部的电邮联系)
在update 某字段 后 我想判断 update后的字段是否为0 ,如果为0则删除该记录 SQL语句怎么写?~

你不如先检查count是不是会变0,如会执行删除,否,执行update,这样开销少些

触发器就是讲的触发,根据时间也是触发形式的,你可以获取系统时间,Oracle里有个sysdate获取系统时间的,你触发的时候判断这个时间就好了。如果你要实时不断的,那就不知道了

mysql> CREATE TABLE t (id INT, count INT);
Query OK, 0 rows affected (0.05 sec)

mysql> DELIMITER //
mysql> CREATE TRIGGER BeforeUpdateT
-> AFTER UPDATE ON t
-> FOR EACH ROW
-> BEGIN
-> IF new.count = 0 THEN
-> DELETE FROM t WHERE id = new.id;
-> END IF;
-> END;
-> //
Query OK, 0 rows affected (0.06 sec)

mysql> INSERT INTO t VALUES(1, 100) //
Query OK, 1 row affected (0.01 sec)

mysql> UPDATE t SET `count` = 0 //
ERROR 1442 (HY000): Can't update table 't' in stored function/trigger because it
is already used by statement which invoked this stored function/trigger.

建了一个,结果失败了。
原因是 MySQL 触发器里面,不让你更新被触发的表。

mysql> delimiter //
mysql> CREATE TRIGGER t_trigger AFTER UPDATE ON t
-> FOR EACH ROW
-> BEGIN
-> DELETE FROM t WHERE count=0 AND id =NEW.id;
-> END;//
mysql> delimiter ;

希望能帮到你

create trigger deletecount
on t for insert, update
as begin
delete t from t,deleted
where t.[id]=deleted.[id] and t.count=0
end

使用更新前触发器:
create trigger Mytrg
on 表t
instead of update
as
declare @count int,@id int
begin
select @id=id,@count=count from inserted
if(@count <>0)
update 表t set count=@count where id=@id
else
delete from 表t where id=@id
end


mysql中建立一个表提示这样的错误ERROR 1046(3D000): No Database Sele...
如果没表的话要先建表:create database 库名;如果有表的话那要先使用对应的数据库,然后再在里面建表:use database 库名;create table...建表语句

mysql如何创建新用户,例如创建一个sss 密码为123的用户
1、登录:mysql -u root -p 2、查看现有用户,select host,user,authentication_string from mysql.user;3、新建用户,create user "sss"@"host" identified by "123";4、再次查看用户列表,可以看到sss用户已创建,select host,user,authentication_string from mysql.user;...

如何新建立一个mysql实例?
这里有一些关于克隆过程的重要注意事项。不克隆 MySQL 配置参数,并且受体保留所有原始配置参数,如克隆之前。这样做是因为许多配置可能特定于节点(例如 PORT),因此保留它们似乎是一个不错的选择。另一方面,一些存储配置确实需要在供体和受体之间匹配(例如 innodbpagesize),如果这样的配置参数不匹配,...

CS利用MySQL建立连接一个新的可能性cs连接mysql
安装完成后,在要使用MySQL连接的代码文件的头部,添加以下代码以引用所需的命名空间:using MySql.Data.MySqlClient;接着,我们需要使用以下代码创建一个MySQL数据库连接:MySqlConnection conn = new MySqlConnection(“server=localhost;user=root;database=mydatabase;port=3306;password=mypassword&#...

Mysql建立数据库如和在一个指定的位置建立数据库,如何指定数据库默认...
工具\/材料:Management Studio。1、首先在桌面上,点击“Management Studio”图标。2、然后在该界面中,右键点击“新建数据库”。3、之后在该界面中,输入数据库名称。4、接着在该界面中,点击数据库文件里,test的存储路径选择按钮。5、然后在该界面中,选中指定存储位置,点击“确定”按钮。6、继续在该...

mysql如何建立一个序列,和创建序列后,序列的名称是什么
create table t111 (id int auto_increment primary key, \/\/自动增长 remark varchar(50));不是Oracle一样可以建立sequence。

mysql如何创建新用户
“SSL 类型”下拉字段映射到 mysql.user 表的 ssl_type 列,该列仅接受某些值:ANY、SPECIFIED 和 X509(以及 '' 表示 NONE)。此外,MySQL GRANT 语句还接受 ISSUER、SUBJECT 和 CIPHER 选项。这些选项可以按任何顺序组合在一起,而且如果你使用它们中的任何一个,则 REQUIRE X509 是隐式的。这是...

怎么在MySql里添加一个自动增长的ID字段
以插入语句的方法来解决此问题。如下参考:1.在添加字段之前,第一个zd应该首先检查tb1表的当前结构。2.将字段列instance添加到表中,如下图。3.再次查看表结构,比较添加字段之前和之后的情况。4.最后,插入新的数据行,看看它是什么样子,最后就加入了自动增长字段如下图。注意事项:MySQL使用的SQL...

Mysql。 现有表A,里面有很多字段,现在需要建立一个表B,与A的字段一模...
create table B LIKE A 这种方法建立,会不带任何数据,但是会带着表A的主键,约束等 create table B select * from A 这种方法建立,会带着数据,但是不会带着表A的主键,约束等

我在Navicat for Mysql中建立了一个表怎样把它拷贝到U盘
选择表,右键 “转储SQL文件”就可以了。将你的sql文件保存到你的U盘,搞定。

让胡路区19319615735: MySQL中建立一个update触发器,如果某字段变为0则删去该行 -
夹斌尤尼: create trigger deletecount on t for insert, update as begindelete t from t,deleted where t.[id]=deleted.[id] and t.count=0 end

让胡路区19319615735: mysql中一个update语句如何去写 -
夹斌尤尼: 首先,单表的UPDATE语句:UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] [ORDER BY ...] [LIMIT row_count] 其次,多表的UPDATE语句:UPDATE [LOW_PRIORITY] ...

让胡路区19319615735: SQL语句创建update触发器 -
夹斌尤尼: create trigger up_salary on employee INSTEAD OF update as if update (salary)begin declare @newSalary numeric(10,2) declare @oldSalary numeric(10,2) select @newSalary = salary from updated select @oldSalary = salary from employee ...

让胡路区19319615735: mysql触发器中UPDATE的应用 -
夹斌尤尼: 你改一下试一试 mysql> CREATE TRIGGER test AFTER INSERT ON ast_cdr-> FOR EACH ROW-> UPDATE ast_cdr SET billing=NEW.userfield-> where userfield=NEW.userfield; 但要保证userfield是唯一的!

让胡路区19319615735: SQL Server能否给表创建一个触发器,使其自动生成操作表的SQL语句 -
夹斌尤尼: 感觉上是无解.原因:mysql 中 for each row 的触发器(也就是 行级触发器,每一行触发一次的) 触发器代码中,不能 select /update/delete 被触发的表.你的触发器是 after insert on `datapoints` 那么,在触发器的代码里面,select count(`id`) from datapoints 与 delete from datapoints 应该都没法执行了.你这个情况,oracle 可以用 语句级的触发器,来实现.sql server 是没有行级,只有语句级的触发器,也能实现.但是 mysql 好像没有 语句级的触发器. 所以你这个功能, 可能用触发器实现不了.

让胡路区19319615735: sql中如何建立一个触发器,使插入或删除某条记录时,系统能自动进行相关的提示? -
夹斌尤尼: create or replace trigger trg_limit_monitor after insert on tf_b_rule_limit--某表 for each row declare begin insert into tf_t_cache_refresh values('alllimitrules',sysdate,'0',null,null); -- 这里是要执行的语句,可以有进行各种insert,update,delete等操作.切记不要写commit和rollback end trg_limit_monitor;

让胡路区19319615735: 在mysql中怎么创建触发器!要完整代码!谢谢~!
夹斌尤尼: CREATE TABLE test1(a1 INT); CREATE TABLE test2(a2 INT); CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE TABLE test4( a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0 ); ...

让胡路区19319615735: MYSQL创建一个触发器,用于24小时刷新一下数据库的表. -
夹斌尤尼: 1.从语法上来说,你这样写是没有问题的,因为这里把new当成表名.编译自然是成功的,但是当插入数据用到触发器的时候,就会报找不到new表的错误了.2.列出每一个字段是可以的,但是写起来比较麻烦,要这样:insert into ct_master1 value (new.c1,new.c2,new.c3); 简洁的方法,就是插入的时候设定一个唯一性的值,比如id 然后就可以把insert改成:insert into ct_master1 select * from ct_master where ct_master.id=NEW.id; 这样就可以了.

让胡路区19319615735: SQL:建立一个DML类UPDATE 触发器,
夹斌尤尼: 触发器一般用在check约束更加复杂的约束上面.例如在执行update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器.SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句.

让胡路区19319615735: mysql创建触发器,怎么获得改动数据的其中的一个值作为变量 -
夹斌尤尼: create trigger auto_degree before update on `db_user` FOR EACH ROW begin set @point=(select points from `db_user` where user_id = old.user_id); if @point>100 and @point<=300 then update `db_user` set degree=2; end if; end 可以试试.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网