Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 创建替换'-';在插入过程中使用默认值_Mysql_Sql - Fatal编程技术网

Mysql 创建替换'-';在插入过程中使用默认值

Mysql 创建替换'-';在插入过程中使用默认值,mysql,sql,Mysql,Sql,我正在从excel工作表插入大量数据(数据包含NULL和“-”)。在数据库中,我有一个表,在源中有空值的地方插入默认值。我想这张桌子也应该这样做 CREATE TABLE Data (FarmerName varchar(100) DEFAULT('defaultvalue') , FatherName varchar(100) DEFAULT('defaultvalue') , Area varchar(100) D

我正在从excel工作表插入大量数据(数据包含NULL和“-”)。在数据库中,我有一个表,在源中有空值的地方插入默认值。我想这张桌子也应该这样做

CREATE TABLE Data (FarmerName varchar(100) DEFAULT('defaultvalue') ,
                    FatherName varchar(100) DEFAULT('defaultvalue') ,
                   Area varchar(100) DEFAULT('defaultvalue') );
有人能帮忙吗。谢谢

我想这张桌子也应该这样做

CREATE TABLE Data (FarmerName varchar(100) DEFAULT('defaultvalue') ,
                    FatherName varchar(100) DEFAULT('defaultvalue') ,
                   Area varchar(100) DEFAULT('defaultvalue') );
然后修改excel或csv文件,将所有出现的
-
替换为
NULL
,并使用修改后的文件进行导入,可能需要使用
加载数据本地填充

根据您运行的操作系统,可以使用命令(或)使用脚本轻松完成修改。有关这些信息,请参见此答案

根据您的评论,不允许更改源数据。。。
然后,一个可能的替代方案(可能不是解决方案)是在该表上插入触发器之前设置一个
-
,并在触发器逻辑中将这些
-
替换为
NULL
,然后执行
插入
,但这将对批量插入产生不利影响,这就是您的情况(此外,这种递归触发器在
MySQL
中不受支持)

其中之一对您有效吗

  • 加载到暂存表,然后使用INSERT INTO..选择
  • 创建一个遮罩“-”的视图,并对该视图而不是直接对表进行操作
  • 添加遮罩'-'的虚拟列

  • 演示 设置


    解决方案1

    设置

    流动

    使用

    解决方案2

    设置

    流动

    使用

    解决方案3

    设置

    流动

    使用


    然后
    ALTER
    您的表应该更改什么…?表和他的列然后您可以设置默认值“-”如果我重新创建表,在上面的查询中应该更改什么。您可以解释一下您可以使用
    CHECK
    进行更改,但是很抱歉,MySQLI不支持CHECK约束。不同的列有不同的默认值。如创建表数据(FarmerName varchar(100)DEFAULT('defaultvalue1')、FatherName varchar(100)DEFAULT('defaultvalue2')、Area varchar(100)DEFAULT('defaultvalue3'));您认为这是一个什么问题?回答已被接受。请您解释一下暂存表。我正在用c#编写代码,无法加载(暂存)Datatable中的完整表,因为它包含非常大的数据
    create table t_stg (id int identity,c1 varchar (100),c2 varchar(100));
    
    truncate table t_stg;
    
    -- This insert simulates the bulk load
    insert into t_stg (id,c1,c2) values (1,'A','-'),(2,'-','B'),(3,'-','-');
    
    insert into t (id,c1,c2)    
    select  id
           ,case when c1 = '-' then 'DEF_C1' else c1 end  as c1
           ,case when c2 = '-' then 'DEF_C2' else c2 end  as c2
    from    t_stg 
    ;
    
    select * from t;
    
    +----+--------+--------+
    | id | c1     | c2     |
    +----+--------+--------+
    | 1  | A      | DEF_C2 |
    +----+--------+--------+
    | 2  | DEF_C1 | B      |
    +----+--------+--------+
    | 3  | DEF_C1 | DEF_C2 |
    +----+--------+--------+
    
    create view t_v
    as
    select  id
       ,case when c1 = '-' then 'DEF_C1' else c1 end  as c1
       ,case when c2 = '-' then 'DEF_C2' else c2 end  as c2
    from    t_stg 
    ;
    
    -- This insert simulates the bulk load
    insert into t(id,c1,c2) values (1,'A','-'),(2,'-','B'),(3,'-','-');
    
    select * from t_v;
    
    +----+--------+--------+
    | id | c1     | c2     |
    +----+--------+--------+
    | 1  | A      | DEF_C2 |
    +----+--------+--------+
    | 2  | DEF_C1 | B      |
    +----+--------+--------+
    | 3  | DEF_C1 | DEF_C2 |
    +----+--------+--------+
    
    alter table t add c1_v varchar(100) generated always as (case when c1 = '-' then 'DEF_C1' else c1 end) virtual;
    alter table t add c2_v varchar(100) generated always as (case when c2 = '-' then 'DEF_C2' else c2 end) virtual;
    
    -- This insert simulates the bulk load
    insert into t(id,c1,c2) values (1,'A','-'),(2,'-','B'),(3,'-','-');
    
    select * from t;
    
    +----+----+----+--------+--------+
    | id | c1 | c2 | c1_v   | c2_v   |
    +----+----+----+--------+--------+
    | 1  | A  | -  | A      | DEF_C2 |
    +----+----+----+--------+--------+
    | 2  | -  | B  | DEF_C1 | B      |
    +----+----+----+--------+--------+
    | 3  | -  | -  | DEF_C1 | DEF_C2 |
    +----+----+----+--------+--------+