这是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";
...
注意:我不知道这是不是一个bug,我猜它是。但是,由于我在快速搜索后无法找到错误报告。我可能做错了什么,所以我想我先问一下这个问题,以及其他人有类似问题的后代问题。
答案 0 :(得分:2)
没有WHERE的DELETE(很可能)会对表进行全面扫描。 这意味着它会读取“高水位线”下的每个区块 - 这是桌子曾经使用过的每个区块。因此,如果表格曾经非常大,那么删除一些记录可能需要很长时间。 [因为它不知道'在读取所有空格之前只有四个记录。]
截断不会这样做。它只是移动表格的高水位线,以便任何正在使用的区块很快就会被闲置。
答案 1 :(得分:1)
由于PDO似乎在使用起来相当多,但它不太可能,因为Oracle有多大,我不知道。
delete from my_table
可能需要一些时间,具体取决于有多少记录。你在等到它被挂了多长时间之前等了多长时间?表中有多少记录?
答案 2 :(得分:1)
数据库中是否还有其他活动同时进行?如果是的话,我怀疑是死锁。一些未提交的DML事务可能会锁定MY_TABLE
的某些行。
如果您不需要回滚功能,请考虑使用TRUNCATE
代替DELETE
。
答案 3 :(得分:0)
如果在同一个表上运行某个事务,它可能会阻止您的DELETE。