如果文件不存在则插入一个表中并将其他值插入其他表中

时间:2017-09-11 06:47:40

标签: mysql database

我在PK_Hash_ID表格中有md5以及FK_Hash_ID表格中的Files以下数据库2表格。

让我们说例如我需要插入新记录,

首先,我必须检查MD5中是否存在MD5 table,如果没有将其添加到MD5 tableFiles table, 但如果它已经在MD5上,那么只需要Hash_ID并插入

将其转换为files,其中一些其他值来自Parameters,例如File_nameParent_PathDataType

  

考虑解决方案必须是存储过程,它需要参数

enter image description here

2 个答案:

答案 0 :(得分:0)

使md5HASH列在md5表中唯一,通过它您可以确保其中不会有任何重复条目。尝试在md5表中插入每个MD5HASH,如果查询失败,如果错误是由于唯一键约束,则检查错误类型,这意味着如果没有错误HASH将插入到表md5中,则HASH已经存在。 示例代码就像

$sql = "insert into md5 values (null,'file_name',$hash)";
$result = mysqli_query($sql);
if( mysql_errno() == 1062) {
    //write the code which you want to execute in case of hash already existing 
} else {
   //write the code where hash doesn't existed earlier, but now it has already added in database. No need to add again.
}

我希望这会有所帮助。

答案 1 :(得分:0)

使用IF EXISTS语句解决。

 BEGIN

If EXISTS (SELECT Hash_ID from MD5 Where MD5Hash = MD5Hash1)
Then
SELECT @H := Hash_ID from md5 where MD5Hash = MD5Hash1;
INSERT INTO MD5 Where MD5Hash = @H (Counter) values (+1);
INSERT INTO files (Hash_ID , File_Name , Path, Parent_Path , DataType )
values ( @H, FileName,Path, ParentPath, Type );
ELSE  
Insert INTO md5 (MD5Hash, Counter ) VALUES (MD5Hash1,+1);
SELECT @H := Hash_ID from md5 where MD5Hash = MD5Hash1;


INSERT INTO files (Hash_ID , File_Name , Path, Parent_Path , DataType )
values ( @H, FileName,Path, ParentPath, Type );
End IF ;
end