0

这挂在Php(5.2.6-Win32 + Oracle10g)中是一个错误,还是我做错了什么?

try {
    $conn = new PDO($DB,$USER,$PASSWORD);
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    //connected
    try {
        $conn->exec("DELETE FROM MY_TABLE");
        echo "done";
...

注意:我不知道这是否是一个错误,我猜是。但是,由于我在快速搜索后找不到这方面的错误报告。我可能做错了什么,所以我想我先在这里问一下,以防万一其他人有类似的问题。

4

4 回答 4

2

数据库中是否同时进行其他活动?如果是的话,我会怀疑死锁。一些未提交的 DML 事务可能会锁定MY_TABLE.

如果您不需要回滚功能,请考虑使用TRUNCATE而不是DELETE.

于 2009-03-03T07:18:39.287 回答
2

没有 WHERE 的 DELETE 将(很可能)对表进行完整扫描。这意味着它读取“高水位线”下的每个块 - 即表曾经使用过的每个块。因此,如果表曾经非常大,那么删除少量记录可能需要很长时间。[因为它不“知道”只有四条记录,直到它读取所有空间。]

截断不会这样做。它只是移动表的高水位标记,以便任何正在使用的块迅速变得未使用。

于 2009-03-03T08:38:10.703 回答
1

它不太可能挂起,因为 PDO 似乎使用了很多,尽管我不知道 Oracle 使用了多少。

Adelete from my_table可能需要一些时间,具体取决于有多少记录。您等了多长时间才决定它被挂起以及表中有多少条记录?

于 2009-03-03T06:31:21.677 回答
0

如果有一个事务在同一个表上运行,它可能会阻止您的 DELETE。

于 2009-03-03T18:33:45.390 回答