仅当存在所有值时,才插入新的MYSQL行

时间:2015-08-27 20:25:54

标签: mysql

我试图找出一个只在所有字段都存在值的情况下只向现有表添加新行的MySQL查询,否则应该删除/忽略它。

我目前的查询如下:

 INSERT INTO markers (`name`, `address`, `details`, `date`, `link`, `lat`, `lng`, `type`)
    VALUES ("{1}", "{2}", "{3}", "{15}", "{4}", "{11}", "{12}", "{5}")

如果我的表单将{15}留空,那么我不希望将任何其他值添加到表格中。

希望有意义!

由于

3 个答案:

答案 0 :(得分:3)

我建议你做几个不同的解决方案。

你可以设置你的数据库不允许空值,然后当你去插入时,处理你的空错误(虽然可能不是最好的解决方案)。如果您需要具有空值,则必须在代码中处理此问题。

另一件事是实现表单验证。您可以使用JavaScript,代码隐藏,甚至两者兼而有之。两者都被建议,因为有些人可能在浏览器上禁用了JavaScript。

答案 1 :(得分:1)

我说用Java,C#,Swift等来检查前端的输入。然后,如果条目为空,只需弹出一条消息,让您的用户知道填写每个字段,或者您的应用程序只是跳过该记录。

答案 2 :(得分:0)

如果要直接在MySQL中执行此操作,可以创建一个在插入值之前检查值的触发器,如果​​未满足某些验证规则则抛出错误。

示例:

delimiter $$
create trigger no_emtpy_values before insert into markers
for each row
begin
    declare msg varchar(255);
    declare condition_fail int default 0;
    -- Write the appropriate validations and set condition_fail to 1
    -- if the validations are not fulfilled. For example:
    if NEW.`date` IS NULL then
        set condition_fail = 1;
    end if;
    -- That "NEW" refers to the row about to be inserted

    -- If the validation rules are not fulfilled, throw an error:
    if condition_fail then
        set msg = "You can't insert the data!";
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg;
    end if;
end $$
delimiter ;

参考文献:

希望这有帮助