delete限制刪除行數的問題 (2007-12-26 13:13)
分類:
sqlite
好久沒來了,最近老是開會,也沒機會學習,還好工作一步步步入正規,公司管理越來越規範化,最近又開始計畫下一步的工作了。
用到了sqlite3資料庫,這個問題本來很令我困惑的,一問同事,又輕而易舉的解決了,太佩服他了,要好好努力了,自己知道的這麼少。哎,先把今天的收穫說一下。
解決delete限制刪除行數的辦法。
sql-statement
::=delete from[database-name
.
]table-name
[whereexp
所以我不知道該怎麼做了,因為只給我乙個刪除行數,沒有限制條件我不知道該怎麼做了,「程式是人寫的」,必定會有解決的辦法,想法是關鍵,在沒有給限制條件的情況下,必定是按時間插入的,所以就可以把它作為預設條件。
delete from 表名 where rowid in (select rowid from log order by time limit 條數);
這裡要介紹一下rowid。rowid是從oracle8i開始的概念。
迅速查詢oracle9i database online documentation(release 2 (9.2)),文件上對rowid和rownum的解釋如下:
rowid
首先rowid是乙個偽列,它在資料庫中表示乙個列的實體地址。是隨機生成的。在oracle9i 中rowid包含如下一些資訊以唯一確定表裡面的每一行:
1.物件(table)的資料物件號。
2.datafile 中哪乙個data block。
3.data block 中的哪一行(first row is 0)。
4.哪乙個資料檔案(first file is 1).檔案號和表空間相關
通常,乙個rowid用來唯一標識資料庫中的一行。但是以聚集表方式儲存在統一個cluster中的不同表可以有相同的rowid.
rowid的幾種重要應用
1.快速訪問一行。
2.你能通過過rowid知道表裡面的每一行是怎麼儲存的。
3.它們唯一的標識表中的每一行。
你不能把rowid作為你表的primary key.如果用import or export程式,它的rowid將會改變。如果你刪除一行,oracle可能就會把這一rowid分配給其他的新插入的行。
雖然你在查詢中可以偽列rowid,但他們並不真正儲存在資料庫中,所以你不能對rowid進行insert,update,delete 操作。
rownum
rownum用來表示乙個查詢語句所返回行的順序,第乙個滿足where條件的返回行的rownum值將被賦予1,第二個是2,依此類推。你可以使用rownum來限制所返回的行的數量。
如果你在帶有使用rownum查詢語句後跟order by的話,查詢結果中rownum的順序可能不會被打亂,而不是按照從小到大的順序排列。
如果你在子查詢中用order by 先排序,然後在外存查詢使用rowid的話,rownum將會按照order by 後的順序從小到大給每行從1開始分配乙個rownum。
最後注意這個例子:
select * from employees where rownum > 1;
因為rownum是給第乙個返回的行分配1,但每次返回後使where 條件都為假。所以這個查詢不能查處任何結果。
關於rownum的幾個查詢測試:
sql> select rownum,* from dba_tables where rownum > 10 and rownum < 20
error at line 1:
ora-00936: missing expression
sql> select rownum,table_name from dba_tables where rownum between 10
and 20;
no rows selectedsql> select rownum,table_name from dba_tables where rownum > 10 and
rownum < 20;
no rows selectedsql> select sum(rownum), tablespace_name from dba_tables where rownumsql> select rownum,table_name from dba_tables where rownum > 10;
no rows selected
sql> select rownum,table_name from dba_tables where rownum < 20;
rownum table_name
---------- ------------------------------
1 ind$
2 file$
3 undo$
4 clu$
5 bootstrap$
6 icol$
7 fet$
8 cdef$
9 con$
10 uet$
11 tab$
rownum table_name
---------- ------------------------------
12 obj$
13 proxy$
14 col$
15 user$
16 ts$
17 ccol$
18 seg$
19 ugroup$
19 rows selected.
sql> select distinct rownum, table_name from dba_tables where rownum < 20;
same result as above (19 rows)
< 20 group by tablespace_name;
sum(rownum) tablespace_name----------- ------------------------------
190 system
參考:
Sqlite 刪除語句 Delete
sqlite 的 delete 語句用於刪除表中已有的記錄。可以使用帶有 where 子句的 delete 查詢來刪除選定行,否則所有的記錄都會被刪除。sqlite 要清空表記錄,只能使用delete來刪除全部表資料。但是與別的資料庫不同,sqlite在為表建立自增列後,會將表自增列的當前序號儲存到...
Sqlite 刪除語句 Delete
sqlite 的 delete 語句用於刪除表中已有的記錄。可以使用帶有 where 子句的 delete 查詢來刪除選定行,否則所有的記錄都會被刪除。sqlite 要清空表記錄,只能使用delete來刪除全部表資料。但是與別的資料庫不同,sqlite在為表建立自增列後,會將表自增列的當前序號儲存到...
使用sqlite3 模組操作sqlite3資料庫
python內建了sqlite3模組,可以操作流行的嵌入式資料庫sqlite3。如果看了我前面的使用 pymysql 操作mysql資料庫這篇文章就更簡單了。因為它們都遵循pep 249,所以操作方法幾乎相同。廢話就不多說了,直接看 吧。都差不多,首先匯入模組,然後建立連線,然後獲取游標物件,之後利...