SQLite3 delete限制刪除行數的問題

2021-09-30 09:38:27 字數 3244 閱讀 1879

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 selected

sql> select rownum,table_name from dba_tables where rownum > 10 and

rownum < 20;

no rows selected

sql> 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)

sql> select sum(rownum), tablespace_name from dba_tables where rownum

< 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,所以操作方法幾乎相同。廢話就不多說了,直接看 吧。都差不多,首先匯入模組,然後建立連線,然後獲取游標物件,之後利...