Mysql 加载数据填充,跳过表中的第一列

Mysql 加载数据填充,跳过表中的第一列,mysql,csv,Mysql,Csv,在跳过表中已经存在的第一列时,我很难找到将csv文件加载到表中的正确语法。我的表列如下所示: ID COL1 COL2 COL3 LOG_DATE LOAD DATA LOCAL INFILE 'test.csv' INTO TABLE test_table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (ID,COL1,COL2,COL3,LOG_DATE) SET ID=0, LOG_DATE=CURRENT_

在跳过表中已经存在的第一列时,我很难找到将csv文件加载到表中的正确语法。我的表列如下所示:

ID    COL1    COL2    COL3    LOG_DATE
LOAD DATA LOCAL INFILE 'test.csv'
INTO TABLE test_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n' 
(ID,COL1,COL2,COL3,LOG_DATE)
SET ID=0, LOG_DATE=CURRENT_TIMESTAMP
EG: COL1    COL2    COL3    ID    LOG_DATE
我的csv如下所示:

dataForCol1,dataForCol2,dataForCol3
因此,我想将csv中的值加载到COL1 COL2和COL3中,跳过ID。我能得到的最接近的SQL如下:

ID    COL1    COL2    COL3    LOG_DATE
LOAD DATA LOCAL INFILE 'test.csv'
INTO TABLE test_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n' 
(ID,COL1,COL2,COL3,LOG_DATE)
SET ID=0, LOG_DATE=CURRENT_TIMESTAMP
EG: COL1    COL2    COL3    ID    LOG_DATE

请注意,我不太了解SQL,也不确定是否正确使用了SET子句,但此语句将为LOG_DATE列提供一个时间戳,它将自动递增ID列ID为type:int11和auto_increment,但其他数据被一列关闭,因此dataForCol1丢失,dataForCol2位于COL1中等。

列列表应仅包含文件中的列:

LOAD DATA LOCAL INFILE 'test.csv'
INTO TABLE test_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n' 
(COL1,COL2,COL3)
SET LOG_DATE=CURRENT_TIMESTAMP

解决这个问题的唯一方法是创建一个临时表来加载所有数据,然后将数据插入永久表。我将其与多文件上传过程结合使用:

# Check for attempted file/s upload
if (isset($_FILES['files']))
{
    # Create a temporary table to insert data into
    $sql="CREATE TEMPORARY TABLE `Temp` (Region VARCHAR(60), First_Name VARCHAR(35), Last_Name VARCHAR(35), Title VARCHAR(60), Account_Name VARCHAR(60), Phone VARCHAR(21), Email VARCHAR(60));";
    $Result = mysql_query($sql,$MySQL_Read);

    # Loop through file/s to be uploaded
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name)
    {

        # Upload file
        move_uploaded_file($tmp_name, $Path."{$_FILES['files']['name'][$key]}");
        echo $Path."{$_FILES['files']['name'][$key]}<br>";

        # LOAD DATA from CSV file into Temp
        $sql="LOAD DATA INFILE '".$Path."{$_FILES['files']['name'][$key]}' INTO TABLE `Temp` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\\\' LINES TERMINATED BY '\\r' STARTING BY '' IGNORE 1 LINES;";
        $Result = mysql_query($sql,$MySQL_Write);
        echo($sql.'<br><br>');

        # Delete file
        unlink($Path."{$_FILES['files']['name'][$key]}");
    }
}

# Insert data from temp table into permanent table
$sql="INSERT INTO `Leads` (`Region`, `First_Name`, `Last_Name`, `Title`, `Account_Name`, `Phone`, `Email`) SELECT `Region`, `First_Name`, `Last_Name`, `Title`, `Account_Name`, `Phone`, `Email` FROM `Temp`;";
$Result = mysql_query($sql,$MySQL_Write);

# Delete temporary table
$sql="DROP TEMPORARY TABLE Temp;";
$Result = mysql_query($sql,$MySQL_Write);

只需将ID列移动到最后一个字段位置,如下所示:

ID    COL1    COL2    COL3    LOG_DATE
LOAD DATA LOCAL INFILE 'test.csv'
INTO TABLE test_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n' 
(ID,COL1,COL2,COL3,LOG_DATE)
SET ID=0, LOG_DATE=CURRENT_TIMESTAMP
EG: COL1    COL2    COL3    ID    LOG_DATE
然后使用相同的代码,而不定义字段或id:

LOAD DATA LOCAL INFILE 'test.csv'
INTO TABLE test_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n' 
SET LOG_DATE=CURRENT_TIMESTAMP
超级简单,效果非常好