使用自动增量列

时间:2017-04-30 08:54:54

标签: mysql sql database perl

我正在尝试使用Perl脚本将数据插入到我的数据库中,但我的代码出了问题。

我之前创建了一个包含八列的表annotations,第一个是自动递增的主键。我还需要在每一行填充1DB的最后两列。

我在提示中启动程序时遇到的错误是:

  

DBD :: mysql :: st执行失败:不正确的整数值:第1行C:\ Users \ Jean Baptiste \ cours \ BasededonnÚes\ Dossier \ programs \ remplissage_table_projet.pl中第'id_anntion'列的'NULL'第25行,第1行   Erreur插入:不正确的整数值:第1行C:\ Users \ Jean Baptiste \ cours \ BasededonnÚes\ Dossier \ programs \ remplissage_table_projet.pl第25行第1行的'id_anntion'列''NULL'。

这是代码:

use DBI;
use strict;
use utf8;

use warnings;

my ($ligne, @tab);

# Connexion à la base de données
my $dbh = DBI->connect( "DBI:mysql:database=projet;host=localhost", "root", "" )
  or die "Erreur de connexion : " . DBI->errstr();


# Gestion de l'encodage UTF-8
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('set names utf8');

# Préparation d'une requête pour l'insertion de valeurs dans la BDD
my $ins = $dbh->prepare("INSERT INTO annotations VALUES (?, ?, ?, ?, ?, ?, ?, ?)")
  or die "Probleme preparation : " . $dbh->errstr();

open( FILEIN, '<:encoding(utf8)', 'alsace_DB.csv' );
while ( $ligne = <FILEIN> ) {
    chomp($ligne);
    @tab = split( /;/, $ligne );
    $ins->execute("NULL", $tab[0], $tab[1], $tab[2], $tab[3], $tab[4], "1", "DB")
      or die "Erreur insertion : " . $ins->errstr();
}
close(FILEIN);

# Déconnexion de la base de données
$dbh->disconnect();

我知道这与"NULL"部分有关,但我不知道是什么。而且我认为这不是唯一的问题。

2 个答案:

答案 0 :(得分:3)

您正尝试将字符串 "NULL"插入整数

如果要覆盖自动增量行为,请使用数字,例如100

如果您希望MySQL生成数字,则使用零0,如果列为NOT NULL,则可以使用undef

答案 1 :(得分:1)

在perl中使用undef在MySQL表中插入默认值。所以,在这里你需要修改你的行:
$ins->execute(undef, $tab[0], $tab[1], $tab[2], $tab[3], $tab[4], "1", "DB") or die "Erreur insertion : " . $ins->errstr();

在这种情况下,它会自动增加列。