mysql默认值NULL“unchageble” - 有可能吗?

时间:2014-01-23 11:34:15

标签: php mysql null

我正在为我的网站使用许可软件,当然引擎已加密。我无权访问并修改任何PHP代码... 它有一个我想要改变的功能,我不能修改PHP代码,因为供应商不允许我这样做... 唯一的选择是构建一个单独的自定义脚本并单独运行它来更新数据库中的字段(这不适合我的项目) 或者更改mysql数据库中的值手册(同样不适用)

还有第三种选择,我不知道它是否真的可能......

这是场景: 只要用户单击特定链接,脚本就会在数据库中广告新行。那一行有10个字段。最后4个字段默认为NULL,它们应保持为NULL。 该脚本在最后4个字段中插入值,这是不寻常的,当然脚本不再正常工作。

所以我的问题是:我有什么方法可以防止在数据库中插入4个字段的值?可以锁定为NULL吗?那些字段可以忽略“SET / UPDATE”功能吗?

3 个答案:

答案 0 :(得分:2)

选项

  1. 在插入过程中,请不要使用这些列插入。
  2. 在插入触发器之前写入以重置以使这些新列值为空。
  3. 更新之前的Writer触发器根据where条件重置为空新的列值。
  4. 更新

    如果您无法访问PHP代码来修改insert语句,则只能通过在数据库中定义触发器来实现此目的。要实现这一点,您至少应该拥有各种权限,例如远程连接创建,执行触发器等。除非您不能这样做。

    如果您拥有此类权限,则可以尝试使用类似于以下内容的数据表:

    before insert触发如下:

    delimiter $$
    
    drop trigger if exists bfimt_omit_colum_data $$
    
    create trigger bfimt_omit_colum_data before insert on my_table
      for each row begin
        set NEW.col_name_4_to_set_null = NULL,
            NEW.col_name_5_to_set_null = NULL,
            NEW.col_name_6_to_set_null = NULL;
    end;
    
    $$
    
    delimiter ;
    

    同样地,before update触发器如下:

    delimiter $$
    
    drop trigger if exists bfumt_omit_colum_data $$
    
    create trigger bfumt_omit_colum_data before update on my_table
      for each row begin
        set NEW.col_name_4_to_set_null = NULL,
            NEW.col_name_5_to_set_null = NULL,
            NEW.col_name_6_to_set_null = NULL;
    end;
    
    $$
    
    delimiter ;
    

答案 1 :(得分:1)

你可以像这样定义一个触发器:

delimiter //
CREATE TRIGGER set_to_null_bi BEFORE INSERT ON tablename
FOR EACH ROW
BEGIN
  SET new.col4 = NULL;
  SET new.col5 = NULL;
  SET new.col6 = NULL;
END//
delimiter ;

你也可以创建一个BEFORE UPDATE触发器。

答案 2 :(得分:0)

感谢大家的帮助,我不能说你的代码不正确,但嘿不适合我。我设法自己解决这个问题,这是代码:

DROP TRIGGER IF EXISTS `trigger_null`;
CREATE DEFINER=`root`@`localhost` TRIGGER `trigger_null` BEFORE INSERT ON `mytable` FOR EACH ROW 
  SET new.create_action = NULL,
  new.col4 = NULL,
  new.col5 = NULL,
  new.col6 = NULL,
  new.col6 = NULL,
  new.col7 = NULL,
  new.col8 = NULL;

这就是......

感谢您的回复!!!