0

对于我需要做的大多数流程,我一直依赖我的 PHP 编程,我知道这可以通过 MySQL 查询或功能来完成。例如:

我知道 MySQL 有一个 FOREIGN KEY 功能,可以帮助维护数据完整性,但我不依赖 MySQL。我不妨让我的脚本这样做,因为它更灵活;我基本上使用 MySQL 作为存储和我的脚本作为处理器。

我想保持这种方式,把大部分的负担放在我的编码上。我确保我的脚本在每次进行更改时都可以检查冲突、孤立行等,我什至有一个 SYSTEM CHECK 例程来运行所有这些数据验证过程,所以我真的尝试在脚本方面做所有事情因为它不会显着影响整个事情的性能(因为我知道 MySQL 可以在内部更快地做事情,我的意思是我当然使用 MySQL COUNT() 函数)。

当然,对表进行的任何直接更改都不会触发我脚本中的例程。但那是另一回事。我对这样做很满意,并且我计划继续这样做,直到我确信不是这样。

我现在唯一真正遇到的问题是检查重复项。

我目前的例程基本上是插入带有序列号的产品。我需要确保没有重复的序列号输入数据库。

我可以简单地依靠 MySQL UNIQUE 约束来确保这一点,或者我可以在脚本端执行它,这就是我所做的。

该产品例程是一个 BATCH 例程,其中在一次调用脚本时将 1 到 500 个产品输入数据库。

显然,我检查提交的数据中的重复条目以及数据库中的数据。这是我日常工作的一部分

 for ($i = 1; $i <= $qty; $i++) {
    //
    $serial = $serials_array[$i - 1]; // -1 coz arrays start at zero

    //check duplicates in submitted data ++++++++++++++++++++++++++
    if($serial_check[$serial] == 1) { // duplicate found!
            exit("stat=err&statMsg=Duplicate serial found in your entry! ($serial)");
    }else{
        $serial_check[$serial] = 1;
    }


    //check duplicates in database
    if(db_checkRow("inventory_stocks", "WHERE serial='$serial'"))exit("stat=err&statMsg=Serial Number is already used. ($serial)");
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

}

好的,基本上它是:

1)通过创建一个数组来检查提交的数据是否有重复项,我可以检查每个提交的序列号 - 这没问题,而且 PHP 速度非常快,甚至多达 1000 条记录。

2)但是,要检查数据库是否有重复,我必须调用我创建的函数(db_checkRow),w/c 基本上在每个提交的序列上发出一个 SELECT 语句,看看是否有命中/重复。

因此,基本上,检查重复项的 500 条 SELECT 语句与 MySQL 唯一约束功能相比。

真的很重要吗??

我设计这样的软件的另一个原因是,至少如果我需要在不同的数据库上部署我的东西,我不会过多地依赖数据库功能,因此我可以轻松地移植我的应用程序而只需很少的调整。

4

2 回答 2

3

几乎可以保证 MySQL 在检查重复项时会更快。除非你在一些超级机器上运行你的 PHP 并且 MySQL 在一个旧手表上运行,否则索引检查将比你可以通过 PHP 做的任何事情更快和更好地优化。

更不用说在其他人(或其他应用程序)开始写入数据库之前您的过程很好。您可以省去一开始就编写重复检查代码的麻烦——然后在下一个应用程序中再次编写——依此类推。

于 2012-11-11T12:16:20.820 回答
1
于 2012-11-11T12:49:45.287 回答