Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
如何使用Perl约束SQLite数据库字段?_Perl_Sqlite - Fatal编程技术网

如何使用Perl约束SQLite数据库字段?

如何使用Perl约束SQLite数据库字段?,perl,sqlite,Perl,Sqlite,我正在使用Perl构建一个SQLite数据库 下面是我目前为止的代码示例 my $stmt = qq( CREATE TABLE PBS_control_data ( Antibody TEXT PRIMARY KEY NOT NULL, Raw_data FLOAT NOT NULL, Normalized_data FLOAT NOT NULL ) ); my $rv = $dbh->do($stmt); if ($rv

我正在使用Perl构建一个SQLite数据库

下面是我目前为止的代码示例

my $stmt = qq(
  CREATE TABLE PBS_control_data (
    Antibody        TEXT  PRIMARY KEY NOT NULL,
    Raw_data        FLOAT NOT NULL,
    Normalized_data FLOAT NOT NULL
  )
);

my $rv = $dbh->do($stmt);
if ($rv < 0) {
  print "$dbh::errstr";
}
else {
  print "Table created";
}
my$stmt=qq(
创建表PBS\U控制\U数据(
抗体文本主键不为空,
原始数据浮点值不为空,
标准化_数据浮点值不为空
)
);
my$rv=$dbh->do($stmt);
如果($rv<0){
打印“$dbh::errstr”;
}
否则{
打印“创建的表格”;
}
我在
抗体
字段中有六项,我想限制该字段,以便您必须输入这六个名称中的一个,以防止出错


这怎么办?

我想你找错地方了。您应该使用简单的Perl代码来验证输入数据库的数据


您可以对列应用
检查
约束,并尝试插入用户输入的任何内容,但这将是草率的编程

要让数据库检查字段值是否有六个值之一,请使用如下检查约束:

创建表MyTable(
MyField文本检查(MyField输入('a','b','c','d','e','f'),
[...]
);

我整理了您的Perl代码,以便能够理解它。我希望您更喜欢我的版本,但如果您愿意,请回滚我的找零。但你的问题让我困惑。看起来您了解足够的SQL,能够检查输入字符串是否与任何
字段匹配。我唯一的意见是,如果您只有六条记录,并且您的数据库要么是静态的,要么从来没有超过一个用户,那么您最好将表存储在内存中,以便更快地访问。我恐怕有点作弊——我对编程非常陌生,我正在学习一个教程(这里)。它说要使用CHECK函数,但只给出了一个数值例子。我之所以选择将数据存储在数据库而不是平面文件中,是因为我一直对多维数据集感到困惑。我相信这个表已经存储在内存中了(或者我不完全理解你的意思)。谢谢。我不太清楚你的背景。您可以创建内存中的SQLite数据库,但数据是不稳定的,并且在进程退出时消失。数据库作为磁盘文件保存更为常见,但我想知道为什么数据库中只保存了六条记录。听起来您只需要一个Perl哈希,而涉及SQLite只会让事情变得更复杂。但也许您的应用程序还有比您解释的更多的内容?我正在寻找创建一个数据库来存储实验数据。数据将有三个分数、三个时间点、三个重复、六种抗体和六种不同的实验条件(因此我宁愿尝试使用数据库而不是电子表格)。好吧,那么我认为你找错地方了。您应该使用简单的Perl代码来验证输入数据库的数据。您可以对列应用
CHECK
约束,并尝试插入用户输入的任何内容,但这将是草率的编程。有点像把你所有的食品都塞进冰箱,如果它变绿了,有异味就扔掉