2012-10-16 109 views
0

我真的是一个初学mysql的人。在oracle中,我们可以使用触发器,它可以检测到插入元素,并允许在出现错误时完全中断插入命令。我发现mysql也支持触发器,但我们如何使用它们来检测插入参数,如果它们不符合规则,就停止插入它们。有条件地插入mysql

e.g. INSERT INTO accounts (userId, balance) VALUES ('12','450'); // Valid 
    INSERT INTO accounts (userId, balance) VALUES ('12','-574'); // Invalid 

if(balance<0){ 
    Do not insert; 
} 
else{ 
    Insert; 
} 

注意:我处理并发事务,所以严格需要触发,即最低级错误检测,以便没有人能破解。 任何帮助将不胜感激。谢谢,

+1

问题在哪里,它是j关于你如何在PHP中描述它。你检查“$ balance”变量的否定性,并采取适当的行动。 –

+0

你会在PHP脚本或纯粹的MySQL中执行此操作吗? –

+0

我正在处理并发事务,因此严格需要触发,即最低级别的错误检测,以便没有人能够进行破解。 –

回答

2

或者使用BEFORE INSERT触发器

DELIMITER $$ 

CREATE TRIGGER au_a_each BEFORE INSERT ON accounts FOR EACH ROW 
BEGIN 
IF new.balance > 0 THEN 
    BEGIN 
    INSERT INTO b (id,balance) VALUES (new.id, new.balance); 
    END 
END $$ 
DELIMITER ; 

MySQL文档中更多信息:http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

PS:编程课程编号1(一个大写“o”) - 交朋友编程/脚本语言的文档

+0

谢谢这是我的错..... –

1

您可以使用INSERT忽略,并设置ALTER TABLE字段约束在MySQL

+0

正如我所说我最近切换到MySQL,请提供一个体面的例子。 –

+0

我假设你有INSERT INTO语句形式的批量数据。创建表格时,可以为余额字段设置字段属性UNSIGNED。然后将您的slq语句更改为INSERT IGNORE INTO。将插入平衡字段值大于或等于零的数据。其他人不会给出错误,但也不会插入,即他们将被忽略。 –