日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

slqite3库查询数据处理方式_SQLite3命令操作大全

發(fā)布時(shí)間:2023/12/9 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 slqite3库查询数据处理方式_SQLite3命令操作大全 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SQLite3命令操作大全

SQLite庫(kù)包含一個(gè)名字叫做sqlite3的命令行,它可以讓用戶手工輸入并執(zhí)行面向SQLite數(shù)據(jù)庫(kù)的SQL命令。本文檔提供一個(gè)樣使用sqlite3的簡(jiǎn)要說(shuō)明.

一.qlite3一些常用Sql語(yǔ)句操作

創(chuàng)建表:??????????? create? table 表名(元素名 類(lèi)型,…);

刪除表:??????????? drop? table 表名;

插入數(shù)據(jù):?????? insert ?into 表名 values(, , ,) ;

創(chuàng)建索引:?????? create [unique] index 索引名on 表名(col….);

刪除索引:?? drop index 索引名(索引是不可更改的,想更改必須刪除重新建)

刪除數(shù)據(jù):?????? delete from 表名;

更新數(shù)據(jù):?????? update

表名 set 字段=’修改后的內(nèi)容’ where 條件;

增加一個(gè)列:? Alter

table 表名 add

column 字段 數(shù)據(jù)類(lèi)型;

選擇查詢:? ???? select 字段(以”,”隔開(kāi)) from 表名 where 條件;

日期和時(shí)間:Select

datetime('now')

日期: ? selectdate('now');

時(shí)間:

selecttime('now');

總數(shù):selectcount(*) from table1;求和:select

sum(field1) from table1;平均:select avg(field1)

from table1;最大:select

max(field1) from table1;最小:select min(field1)

from table1;

排序:select字段from table1order by字段(desc或asc);(降序或升序)

分組:select字段from table1group by字段,字段…;

限制輸出:select字段fromtable1limitxoffsety;

= select字段fromtable1limity , x;

(備注:跳過(guò)y行,取x行數(shù)據(jù))

(操作仍待完善)…

SQLite支持哪些數(shù)據(jù)類(lèi)型些?

NULL ????? 值為NULL

INTEGER 值為帶符號(hào)的整型,根據(jù)類(lèi)別用1,2,3,4,6,8字節(jié)存儲(chǔ)

REAL ?????? 值為浮點(diǎn)型,8字節(jié)存儲(chǔ)

TEXT ?????? 值為text字符串,使用數(shù)據(jù)庫(kù)編碼(UTF-8,

UTF-16BE or UTF-16-LE)存儲(chǔ)

BLOB ????? 值為二進(jìn)制數(shù)據(jù),具體看實(shí)際輸入

但實(shí)際上,sqlite3也接受如下的數(shù)據(jù)類(lèi)型:

smallint? 16 位元的整數(shù)

interger? ?????????????????? 32 位元的整數(shù)

decimal(p,s)? p 精確值和 s 大小的十進(jìn)位整數(shù),精確值p是指全部有幾個(gè)數(shù)(digits)大小值 ,s是指小數(shù)點(diǎn)後有幾位數(shù)。如果沒(méi)有特別指定,則系統(tǒng)會(huì)設(shè)為 p=5; s=0 。

float?? ?????????????? 32位元的實(shí)數(shù)。

double?? ?????????? 64位元的實(shí)數(shù)。

char(n)?? ????????? n 長(zhǎng)度的字串,n不能超過(guò) 254。

varchar(n)? ???? 長(zhǎng)度不固定且其最大長(zhǎng)度為 n 的字串,n不能超過(guò) 4000。

graphic(n)? ????? 和 char(n) 一樣,不過(guò)其單位是兩個(gè)字元 double-bytes, n不能超過(guò)127。這個(gè)形態(tài)是為了支援兩個(gè)字元長(zhǎng)度的字體,例如中文字。

vargraphic(n)? 可變長(zhǎng)度且其最大長(zhǎng)度為 n

的雙字元字串,n不能超過(guò) 2000。

date?? ?????????????? 包含了

年份、月份、日期。

time?? ?????????????? 包含了

小時(shí)、分鐘、秒。

timestamp? ??? 包含了

年、月、日、時(shí)、分、秒、千分之一秒。

如果將聲明表的一列設(shè)置為 INTEGER PRIMARY KEY,則具有:

1.每當(dāng)你在該列上插入一NULL值時(shí), NULL自動(dòng)被轉(zhuǎn)換為一個(gè)比該列中最大值大1的一個(gè)整數(shù);

2.如果表是空的, 將會(huì)是1;

算術(shù)函數(shù)

abs(X)返回給定數(shù)字表達(dá)式的絕對(duì)值。

max(X,Y[,...])返回表達(dá)式的最大值。

min(X,Y[,...])返回表達(dá)式的最小值。

random(*)返回隨機(jī)數(shù)。

round(X[,Y])返回?cái)?shù)字表達(dá)式并四舍五入為指定的長(zhǎng)度或精度。

字符處理函數(shù)

length(X)返回給定字符串表達(dá)式的字符個(gè)數(shù)。

lower(X)將大寫(xiě)字符數(shù)據(jù)轉(zhuǎn)換為小寫(xiě)字符數(shù)據(jù)后返回字符表達(dá)式。

upper(X)返回將小寫(xiě)字符數(shù)據(jù)轉(zhuǎn)換為大寫(xiě)的字符表達(dá)式。

substr(X,Y,Z)返回表達(dá)式的一部分。

randstr()

quote(A)

like(A,B)

確定給定的字符串是否與指定的模式匹配。

glob(A,B)

條件判斷函數(shù)

coalesce(X,Y[,...])

ifnull(X,Y)

nullif(X,Y)

集合函數(shù)

avg(X)返回組中值的平均值。

count(X)返回組中項(xiàng)目的數(shù)量。

max(X)返回組中值的最大值。

min(X)返回組中值的最小值。

sum(X)返回表達(dá)式中所有值的和。

其他函數(shù)

typeof(X)返回?cái)?shù)據(jù)的類(lèi)型。

last_insert_rowid()返回最后插入的數(shù)據(jù)的 ID

sqlite_version(*)返回 SQLite 的版本。

change_count()返回受上一語(yǔ)句影響的行數(shù)。

last_statement_change_count()

二.有關(guān)事務(wù)的操作

(成批操作的時(shí)候,啟動(dòng)事務(wù),比不啟動(dòng)事務(wù)快n倍)

開(kāi)始事物處理

BEGIN ?TRANSACTION;

…………..

進(jìn)行對(duì)數(shù)據(jù)庫(kù)操作

…………..

事物提交

COMMIT;

具體事例如下:

假設(shè)有一個(gè) t1 表,其中有 "a", "b", "c" 三列, 如果要?jiǎng)h除列 c ,以下過(guò)程描述如何做:

BEGIN TRANSACTION;

CREATE TEMPORARY TABLE t1_backup(a,b);

INSERT INTO t1_backup SELECT a,b FROM t1;

DROP TABLE t1;

CREATE TABLE t1(a,b);

INSERT INTO t1 SELECT a,b FROM t1_backup;

DROP TABLE t1_backup;

COMMIT;[h1]

三.啟動(dòng)sqlite3程序

僅僅需要敲入帶有SQLite數(shù)據(jù)庫(kù)名字的"sqlite3"命令即可。如果文件不存在,則創(chuàng)建一個(gè)新的(數(shù)據(jù)庫(kù))文件。然后 sqlite3程序?qū)⑻崾灸爿斎隨QL。敲入SQL語(yǔ)句(以分號(hào)“;”結(jié)束),敲回車(chē)鍵之后,SQL語(yǔ)句就會(huì)執(zhí)行。

例如,創(chuàng)建一個(gè)包含一個(gè)表"tb11"名字為"ex1"的SQLite數(shù)據(jù)庫(kù),你可以這樣做:

數(shù)據(jù)庫(kù)、表的建立,記錄的添加、查詢、修改和刪除

F:\>sqlite3 database.db

sqlite> create table admin(username text,age integer);

sqlite> insert into admin values('kuang',25);

sqlite> select * from admin;

sqlite> update admin set username='kk',age=24 where username='kuang' and

age=25;

sqlite> delete from admin where username='kk';

注:每條sql語(yǔ)句后必須以";"號(hào)結(jié)尾!

$sqlite3 ex1

SQLite version 3.3.17

Enter ".help" for instructions

sqlite> create table tbl1(one varchar(10), two smallint);

sqlite> insert into tbl1 values('hello!', 10);

sqlite> insert into tbl1 values('goodbye', 20);

sqlite> select * from tbl1;

hello!|10

goodbye|20

sqlite>

你可以通過(guò)敲你所用系統(tǒng)的文件結(jié)束符(通常是Ctrl

+ D)或者中斷字符(通常是Ctrl + C)。來(lái)終止sqlite3程序。確定你在每個(gè)SQL語(yǔ)句結(jié)束敲入分號(hào)!sqlite3程序通過(guò)查找分號(hào)來(lái)決定一個(gè)SQL語(yǔ)句的結(jié)束。如果你省略分 號(hào),sqlite3將給你一個(gè)連續(xù)的命令提示符并等你給當(dāng)前的SQL命令添加更多的文字。這個(gè)特點(diǎn)讓你輸入多行的多個(gè)SQL語(yǔ)句,例如:

sqlite> create table tbl2(

...> f1 varchar(30) primary key,

...> f2 text,

...> f3 real

...> );

sqlite>

四.題外話:查詢SQLITE_MASTER表

SQLite數(shù)據(jù)庫(kù)的框架被保存在一個(gè)名叫"sqlite_master"的特殊的表中。你可以像查詢其它表一樣通過(guò)執(zhí)行“SELECT”查詢這個(gè)特殊的表。例如:

$ sqlite3 ex1

SQlite vresion 3.3.10

Enter ".help" for instructions

sqlite> select * from sqlite_master;

type = table

name = tbl1

tbl_name = tbl1

rootpage = 3

sql = create table tbl1(one varchar(10), two smallint)

sqlite>

但你不能在sqlite_master表中執(zhí)行諸如DROP TABLE, UPDATE, INSERT 或者DELETE命令。sqlite_master表在你創(chuàng)建、刪除和索引數(shù)據(jù)庫(kù)時(shí)自動(dòng)更新這個(gè)表。你不能手工更改sqlite_master表。

TEMPORARY表的結(jié)構(gòu)沒(méi)有存儲(chǔ)在"sqlite_master"表中,由于TEMPORARY表對(duì)應(yīng)用是不可見(jiàn)的,而不是應(yīng)用程序創(chuàng)建這個(gè)表。 TEMPORARY表結(jié)構(gòu)被存儲(chǔ)在另外一個(gè)名叫"sqlite_temp_master"的特定的表中。"sqlite_temp_master"表是臨 時(shí)表自身。

五.sqlite3的特殊命令

大多數(shù)候,sqlite3讀入輸入行,并把它們傳遞到SQLite庫(kù)中去運(yùn)行。但是如果輸入行以一個(gè)點(diǎn)(“.”)開(kāi)始,那么這行將被sqlite3程序自

己截取并解釋。這些“點(diǎn)命令”通常被用來(lái)改變查詢輸出的格式,或者執(zhí)行鞭個(gè)預(yù)封包(預(yù)定義prepackaged)的查詢語(yǔ)句。

你可以在任何時(shí)候輸入“.help”,列出可用的點(diǎn)命令。例如

sqlite> .help

.bail ON|OFF

Stop after hitting an error. ?Default

OFF(遇到錯(cuò)誤時(shí)不再繼續(xù), 默認(rèn)為OFF)

.databases

List names and files of attached

databases(列出附加到數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)和文件)

.dump ?TABLE? ...

Dump the database in an SQL text format(保存表到SQL格式的文件中, 沒(méi)有指表名, 則保存所有. 如果要保存到磁盤(pán)上需要結(jié)合 .output 命令.)

.echo ON|OFF

Turn command echo on or off(打開(kāi)/關(guān)閉 命令行回顯)

.exit

Exit this program(退出該命令行)

.explain ON|OFF

Turn output mode suitable for EXPLAIN on or

off.( 以合適的方式顯示表頭, 不帶參數(shù)則為開(kāi)啟)

.header(s) ON|OFF

Turn display of headers on or off(是否顯示表頭, 和 .explain 差別不是很大)

.help

Show this message(顯示幫助信息)

.import FILE TABLE

Import data from FILE into TABLE(從文件中導(dǎo)入表)

.indices TABLE

Show names of all indices on TABLE(顯示索引)

.load FILE ?ENTRY?

Load an extension library(加載一個(gè)擴(kuò)展庫(kù))

.mode MODE ?TABLE?

Set output mode where MODE is one of:

(設(shè)置輸出模式, 模式可以是以下幾種):

csv ? ? ? Comma-separated values(?以逗號(hào)分隔的值)

column ? ?Left-aligned columns. ? (See .width)( 表頭左對(duì)齊(參見(jiàn) .width))

html ? ? ?HTML

insert ? ?SQL insert statements for TABLE(?SQL插入語(yǔ)句)

line ? ? ?One value per line(?一行一個(gè)值)

list ? ? ?Values delimited by separator string(值用 string 分隔)

tabs ? ? ?Tab-separated values(以 tab 分隔的值)

tcl ? ? ? TCL list elements(TCL 列表元素)

.nullvalue STRING

Print STRING in place of NULL values(以 STRING 代替 NULL 值的輸出)

.output FILENAME

Send output to FILENAME(輸出到文件, 而不是顯示在屏幕上)

.output stdout

Send output to the screen(輸出到屏幕上)

.prompt MAIN CONTINUE

Replace the standard prompts(替換默認(rèn)的命令提示信息, 默認(rèn)就是 sqlite>)

.quit

Exit this program(退出命令行)

.read FILENAME

Execute SQL in FILENAME(執(zhí)行 FILENAME 中的 SQL語(yǔ)句)

.schema ?TABLE?

Show the CREATE statements(顯示 CREATE 語(yǔ)句)

.separator STRING

Change separator used by output mode and

.import

.show

Show the current values for various

settings(顯示各種設(shè)置)

.tables ?PATTERN?

List names of tables matching a LIKE

pattern(查看數(shù)據(jù)庫(kù)的表列表)

.timeout MS

Try opening locked tables for MS

milliseconds(在 MS 時(shí)間內(nèi)嘗試打開(kāi)被鎖定的表)

.width NUM NUM ...

Set column widths for "column" mode(設(shè)置 column

模式中的列的寬度)

.timer ON|OFF

(顯示CPU時(shí)間)

.vfsname ?AUX?

(顯示 VFS 棧信息)

.restore ?DB? FILE

(從文件中還原數(shù)據(jù)到表,? 默認(rèn)表為 main)

sqlite>

六.改變輸出格式(.mode)

sqlite3程序可以以八種不同的格式顯示一個(gè)查詢的結(jié)果:"csv", "列",

"html", "插入", "行", "制表"和"tcl"。你可以用".mode"點(diǎn)命令在這些輸出格式之間切換。

默認(rèn)的輸出格式是“列表”。在列表模式下,每條查詢結(jié)果記錄被寫(xiě)在一行中并且每列之間以一個(gè)字符串分割符隔開(kāi)。默認(rèn)的分隔符是一個(gè)管道符號(hào)(“|”)。列表符號(hào)在當(dāng)你輸出查詢結(jié)果到另外一個(gè)符加處理的程序(如AWK)中去是尤為有用。

sqlite> .mode list

sqlite> select * from tbl1;

hello|10

goodbye|20

sqlite>

你可以用“.separator”點(diǎn)命令來(lái)改變分界符。例如,為了把分割符改為一個(gè)逗號(hào)和一個(gè)空格,你可以這樣做:

sqlite> .separator ", "

sqlite> select * from tbl1;

hello, 10

goodbye, 20

sqlite>

在“l(fā)ine"模式下,每一個(gè)位于條記錄中的列在它自己那行顯示。每行由列名、一個(gè)等號(hào)和列數(shù)據(jù)組成。下一條記錄以一個(gè)空行隔開(kāi)。這是一個(gè)行模式輸出的例子:

sqlite> .mode line

sqlite> select * from tbl1;

one = hello

two = 10

one = goodbye

two = 20

sqlite>

在列模式下,每條記錄在一個(gè)單獨(dú)的行中以數(shù)據(jù)列對(duì)齊的方式顯示。列如:

sqlite> .mode column

sqlite> select * from tbl1;

one ? ? ? ? ?two

---------- ? ----------

hello ? ? ? ?10

goodbye ? ? ?20

sqlite>

在默認(rèn)的情況下,每列至少10個(gè)字符寬。太寬(超過(guò)設(shè)定的寬度)的數(shù)據(jù)將被截取。你可以用“.width”命令來(lái)調(diào)整列寬。如下所示:

sqlite> .width 12 6??????????? (第一列12,第二列6)

sqlite> select * from tbl1;

one ? ? ? ? ? ?two

------------ ? ------

hello ? ? ? ? ?10

goodbye ? ? ? ?20

sqlite>

上面例子中".width"命令設(shè)置第一列寬為12第二列寬為6。其它的列寬不變。你可以指定與你查詢結(jié)果需要的列數(shù)一樣多的“.width”參數(shù)。

如果你指定一列寬為0,那么這個(gè)列寬將自動(dòng)以下面三個(gè)數(shù)字中的最大值做為列寬:10、表頭寬度和最寬的數(shù)據(jù)列的寬度。這可以讓列自動(dòng)調(diào)整寬度。每列的默認(rèn)設(shè)置為自動(dòng)調(diào)整的0值。

出現(xiàn)在輸出開(kāi)頭兩行的列標(biāo)示可以用".header"點(diǎn)命令關(guān)閉。在上面的例子中,列標(biāo)示是打開(kāi)的。可以用下面的方法關(guān)閉列標(biāo)示:

sqlite> .header off

sqlite> select * from tbl1;

hello ? ? ? ? ?10

goodbye ? ? ? ?20

sqlite>

另外一個(gè)有用的輸出模式是"insert"。在插入模式下,被子格式化為看起來(lái)像SQL INSERT語(yǔ)句的樣式。你可以用插入模式來(lái)產(chǎn)生文件(便于)以后用于不同數(shù)據(jù)庫(kù)的輸入。

當(dāng)指定插入模式時(shí),你必須給定一個(gè)特定參數(shù)就是要插入的表名。例如:

sqlite> .mode insert new_table

sqlite> select * from tbl1;

INSERT INTO 'new_table' VALUES('hello',10);

INSERT INTO 'new_table' VALUES('goodbye',20);

sqlite>

最新的輸出格式是“html”。在這種模式下,sqlite3把查詢的結(jié)果寫(xiě)做XHTML表。開(kāi)始的

(標(biāo)記)沒(méi)有寫(xiě)出,但有、和等分界符。html輸出對(duì) CGI來(lái)說(shuō)是相當(dāng)有用地。

把結(jié)果寫(xiě)到文件中

七.查詢數(shù)據(jù)庫(kù)結(jié)構(gòu)

sqlite3程序提供幾個(gè)有用的用于查詢數(shù)據(jù)庫(kù)結(jié)構(gòu)的快捷命令。這些不是不可以用別的方式來(lái)實(shí)現(xiàn)。這些命令僅僅是一個(gè)快捷方式而已。

例如,為了查看數(shù)據(jù)庫(kù)的表列表,你可以敲入“.tables”。

sqlite> .tables

tbl1

tbl2

sqlite>

“.tables”命令相似于設(shè)置列表模式然后執(zhí)行接下來(lái)的查詢:

SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE

'sqlite_%'UNION ALL SELECT name FROM sqlite_temp_master WHERE type IN

('table','view') ORDER BY 1sqlite> .schema

create table tbl1(one varchar(10), two smallint)

CREATE TABLE tbl2 (

f1 varchar(30) primary key,

f2 text,

f3 real

)

sqlite> .schema tbl2

CREATE TABLE tbl2 (

f1 varchar(30) primary key,

f2 text,

f3 real

)

sqlite>

八.事實(shí)上

你可以查看sqlite3的源代碼(可以在源文件樹(shù)的src/shell.c中),你可找到上面的具體的查詢。

“.indices” 命令作用類(lèi)似的方式是列出特定表的所有的索引。“.indics”命令須一個(gè)參數(shù)即所要索引表的表名。最后,但不是至少,是“.schema”命令。不帶 任何參數(shù),“.schema”命令顯示原始的用于創(chuàng)建當(dāng)前數(shù)據(jù)庫(kù)的CREATE TABLE和CREATE INDEX語(yǔ)句。如果你給".schema"命令一個(gè)表名,它顯示原始的創(chuàng)建該表和它所有索引的CREATE語(yǔ)句。我們可以:

".schema"命令可以用設(shè)置列表然后執(zhí)行以下查詢來(lái)實(shí)現(xiàn):

SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM

sqlite_temp_master)WHERE type!='meta'ORDER BY tbl_name, type DESC, name

或者,如果你給".schema"命令一個(gè)參數(shù),由于你只想得到一個(gè)表的結(jié)構(gòu),查詢可以是這樣:

SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM

sqlite_temp_master)WHERE type!='meta' AND sql NOT NULL AND name NOT LIKE

'sqlite_%'ORDER BY substr(type,2,1), name

你可以擔(dān)供一個(gè)參數(shù)給.schema命令。如果這橛,查詢可以是這樣的:

SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM

sqlite_temp_master)WHERE tbl_name LIKE '%s' AND type!='meta' AND sql NOT NULL

AND name NOT LIKE 'sqlite_%'ORDER BY substr(type,2,1), name

在查詢中“%S“為你的參數(shù)所取代。這使你可以詢數(shù)據(jù)庫(kù)結(jié)構(gòu)的某個(gè)子集。

sqlite> .schema %abc%

與這些一起,“.table”命令也接受一個(gè)模式作為他的參數(shù)。如果你給“.table”一個(gè)參數(shù),“%”將被前后擴(kuò)展并且一個(gè)LIKE子句被附加到查詢上。這讓你可以列出只與特定模式相匹配的的表。

“.databases” 命令顯示所有當(dāng)前連接打開(kāi)的數(shù)據(jù)庫(kù)的一個(gè)列表。將允許一次到少兩個(gè)。第一個(gè)是“main”,最初打開(kāi)的那個(gè)數(shù)據(jù)庫(kù)。第二個(gè)是"temp",用于臨時(shí)表的數(shù) 據(jù)庫(kù)。對(duì)于用ATTACH語(yǔ)句附加的數(shù)據(jù)也許有附加數(shù)據(jù)庫(kù)列表。輸出的第一列與之相聯(lián)的數(shù)據(jù)庫(kù)名,第二列是外部文件名。

sqlite> .databases

九.將整個(gè)數(shù)據(jù)庫(kù)轉(zhuǎn)換為ASCII文本文件

".dump"命令成一個(gè)單一的ASCII文本文件。這個(gè)文件可以被用作管道傳遞給sqlite3命令來(lái)轉(zhuǎn)換回?cái)?shù)據(jù)庫(kù)。

一個(gè)最好的制作一個(gè)數(shù)據(jù)庫(kù)檔案拷貝的命令是:

$ echo '.dump' | sqlite3 ex1 | gzip -c >ex1.dump.gz

它產(chǎn)生一個(gè)一個(gè)名為ex1.dump.gz的文件,它包含了你以后或在其它機(jī)器上重構(gòu)數(shù)據(jù)庫(kù)的所有的信息。要重構(gòu)數(shù)據(jù)庫(kù),只須敲入:

$ zcat ex1.dump.gz | sqlite3 ex2

這個(gè)文本格式是純粹的SQL語(yǔ)句所以你可以用.dump命令來(lái)導(dǎo)出一個(gè)SQLite數(shù)據(jù)庫(kù)到另一個(gè)常用的SQL數(shù)據(jù)庫(kù)引擎。比如:

$ createdb ex2

$ sqlite3 ex1 .dump | psql ex2

十.Sqlite3 表結(jié)構(gòu)和數(shù)據(jù)的導(dǎo)出及導(dǎo)入

數(shù)據(jù)庫(kù)結(jié)構(gòu)導(dǎo)出和導(dǎo)入:

“.output” 默認(rèn)情況下,sqlte3把結(jié)送到標(biāo)準(zhǔn)輸出。你可以用“.output”命令改變它。只須把輸出文件名做為.output命令的輸出參數(shù)然后所有后續(xù)查詢結(jié)果將被寫(xiě)到那個(gè)文件中。

用“.output stdout”再一次改為標(biāo)準(zhǔn)輸出。例如:

全部導(dǎo)出

$sqlite3 data.db

sqlite >.output dd

sqlite >.dump

sqlite > .exit

$cat dd ??????????????//以下是數(shù)據(jù)庫(kù)的結(jié)構(gòu)

PRAGMA foreign_keys=OFF;

BEGIN TRANSACTION;

CREATE TABLE long(h,m);

INSERT INTO "long" VALUES('hhhhhh',2);

INSERT INTO "long" VALUES('hello',2);

INSERT INTO "long" VALUES('mall',5);

INSERT INTO "long" VALUES('suinvzi',8);

INSERT INTO "long" VALUES('meimei',5);

CREATE TABLE bak(m

varchar(10), n int);

INSERT INTO "bak" VALUES('hhhhhh',2);

INSERT INTO "bak" VALUES('hell',2);

INSERT INTO "bak" VALUES('mall',5);

INSERT INTO "bak" VALUES('suinvzi',8);

INSERT INTO "bak" VALUES('meimei',5);

COMMIT;

[h2]?導(dǎo)出表結(jié)構(gòu)

sqlite >.output dd

sqlite >.schema

sqlite > .exit

$cat dd

//以下是表的結(jié)構(gòu)

CREATE TABLE bak(m

varchar(10), n int);

CREATE TABLE long(h,m);

全部導(dǎo)入: (用.read命令,執(zhí)行

FILENAME 中的 SQL語(yǔ)句)

sqlite3

mydb.db

sqlite >.read dd

sqlite >.tables

bak long ?????????//導(dǎo)入的是空表bak,long

數(shù)據(jù)的導(dǎo)出和導(dǎo)入:

導(dǎo)出:例如:

$sqlite3 data.db

sqlite> .mode list

sqlite> .separator |

sqlite> .output test_file_1

sqlite> select * from long;

sqlite> .exit

$ cat test_file_1

hhhhhh|2

hello|2

mall|5

suinvzi|8

meimei|5

$

備注:每次導(dǎo)出若為同一個(gè)文本,則正在導(dǎo)出的內(nèi)容覆蓋上次導(dǎo)出的內(nèi)容

導(dǎo)入: 例如:(用.import 導(dǎo)入的文本 被導(dǎo)入的表 命令, 把文件中的數(shù)據(jù)導(dǎo)入表中)

$sqlite3 mydb.db

sqlite> .show

echo: off

explain: off

headers: off

mode: list

nullvalue: ""

output: stdout

separator: "|"

stats: off

width:

sqlite> .import test_file_1 long

sqlite> select * from long;

hhhhhh|2

hello|2

mall|5

suinvzi|8

meimei|5

導(dǎo)入結(jié)束

備注:文本的內(nèi)容所對(duì)應(yīng)的數(shù)據(jù)分布與所要導(dǎo)入的表一致,元素間的分割符要與”.show”中separator: "|"的字符一致如果不一致可直接修改, 比如: sqlite>.separator "," 將分隔符轉(zhuǎn)為逗號(hào),不然導(dǎo)入會(huì)出錯(cuò).

十一.其它的點(diǎn)命令

".explain"

命令可以被用來(lái)設(shè)置輸出格式為“column”

并設(shè)置列寬為EXPLAIN命令看起來(lái)比較合理的寬度。EXPLAIN命令是SQLite特有的SQL擴(kuò)展,它是對(duì)調(diào)試有用。如果任何常規(guī)的SQL被 EXPLAIN執(zhí)行,那么SQL命令被分解并分析但并不執(zhí)行。取而代之的是,虛擬機(jī)指令序列將被用于執(zhí)行SQL命令并返回一個(gè)類(lèi)似的查詢結(jié)果。如:

sqlite> .explain

sqlite> explain delete from tbl1 where two<20;

addr ? opcode ? ? ? ? p1 ? ? ?p2

p3

---- ? ------------ ? ----- ? -----

-------------------------------------

0 ? ? ?ListOpen ? ? ? 0 ? ? ? 0

1 ? ? ?Open ? ? ? ? ? 0

1 ? ? ? tbl1

2 ? ? ?Next ? ? ? ? ? 0

9

3 ? ? ?Field ? ? ? ? ?0

1

4 ? ? ?Integer ? ? ? ?20

0

5 ? ? ?Ge ? ? ? ? ? ? 0

2

6 ? ? ?Key ? ? ? ? ? ?0

0

7 ? ? ?ListWrite ? ? ?0 ? ? ? 0

8 ? ? ?Goto ? ? ? ? ? 0

2

9 ? ? ?Noop ? ? ? ? ? 0

0

10 ? ? ListRewind ? ? 0 ? ? ? 0

11 ? ? ListRead ? ? ? 0 ? ? ? 14

12 ? ? Delete ? ? ? ? 0 ? ? ? 0

13 ? ? Goto ? ? ? ? ? 0

11

14 ? ? ListClose ? ? ?0 ? ? ? 0

“.timeout”命令設(shè)置sqlite3等待一個(gè)試圖存儲(chǔ)文件鎖定請(qǐng)除直到錯(cuò)誤返回的總時(shí)間。默認(rèn)的超時(shí)值是0因此如果任何需要的數(shù)據(jù)庫(kù)表或序列列被鎖定時(shí)它將立即返回一個(gè)錯(cuò)誤。

最后,我們提到“.exit”命令它將導(dǎo)致sqlite3退出。

十二.在命令和腳本中使用sqlite3

個(gè)在腳本命令中使用sqlite3的方式是用“echo”或“cat”來(lái)產(chǎn)生一個(gè)命令序列在一個(gè)文件中,然后當(dāng)從一個(gè)產(chǎn)生的命令行中重定向輸入時(shí)調(diào)用 sqlite3。它有用并且適應(yīng)許多環(huán)境。但作為一附加的便利是,sqlite3允許一個(gè)單一的SQL語(yǔ)句在命令行中作為數(shù)據(jù)庫(kù)名后的第二個(gè)參數(shù)輸入。當(dāng) sqlite3程序帶著兩個(gè)參數(shù)啟動(dòng)時(shí),第二個(gè)參數(shù)被傳遞給SQLite庫(kù)處理,查詢以列表模式打印到標(biāo)準(zhǔn)輸出,然后程序退出。這個(gè)機(jī)制被設(shè)計(jì)用于讓

sqlite3容易于用于連接諸如"AWK"的程序。例如:

$ sqlite3 ex1 'select * from tbl1' |

> awk '{printf "

%s%s\n",$1,$2 }'hello10goodbye20

$

十三.結(jié)束命令行命令

SQLite 命令通常以一個(gè)分號(hào)結(jié)束。在一個(gè)命令行中你也可以用“GO”單詞(大小寫(xiě)敏感)或者一個(gè)“/”斜線在它所在好行結(jié)束一個(gè)命令。這常被SQL Server和Oracle使用。這些將不在sqlite3_exec()中有用,因?yàn)槊钚性趥鬟f它們到函數(shù)之前把這些翻譯為分號(hào)。

十四.參數(shù)化的SQL語(yǔ)句

sqlite可以在shell/dos command底下直接執(zhí)行命令:

對(duì)數(shù)據(jù)庫(kù)進(jìn)行SQL操作:

sqlite3數(shù)據(jù)庫(kù) "SQL語(yǔ)句 或

.命令;"

輸出 HTML表格:

sqlite3 -html film.db "select * from

film;"

將數(shù)據(jù)庫(kù)「導(dǎo)出來(lái)」:sqlite3 film.db ".dump" > output.sql

利用輸出的資料,建立一個(gè)一模一樣的數(shù)據(jù)庫(kù)(加上以上指令,就是標(biāo)準(zhǔn)的SQL數(shù)據(jù)庫(kù)備份了):

將數(shù)據(jù)庫(kù)「導(dǎo)進(jìn)去」:

sqlite3 film.db < output.sql

在大量插入資料時(shí),你可能會(huì)需要先打這個(gè)指令:

begin;

插入完資料后要記得打這個(gè)指令,資料才會(huì)寫(xiě)進(jìn)數(shù)據(jù)庫(kù)中:

commit;

十五.SQLITE深入------常見(jiàn)問(wèn)題

1.如何建立自動(dòng)增長(zhǎng)字段?

簡(jiǎn)短回答:聲明為 INTEGER PRIMARY KEY 的列將會(huì)自動(dòng)增長(zhǎng)

(如果是最大可能的主鍵 9223372036854775807,那個(gè),將鍵值將是隨機(jī)未使用的數(shù)。)如,有下列表:

CREATE TABLE t1(

a INTEGER PRIMARY KEY,

b INTEGER

);

在該表上,下列語(yǔ)句

INSERT INTO t1 VALUES(NULL,123);

在邏輯上等價(jià)于:

INSERT INTO t1 VALUES((SELECT max(a) FROM

t1)+1,123);

有一個(gè)新的API叫做

sqlite3_last_insert_rowid(), 它將返回最近插入的整數(shù)值。 注意該整數(shù)會(huì)比表中該列上的插入之前的最大值大1。

該鍵值在當(dāng)前的表中是唯一的。但有可能與已從表中刪除的值重疊。要想建立在整個(gè)表的生命周期中唯一的鍵值,需要在 INTEGER PRIMARY KEY 上增加AUTOINCREMENT聲明。那么,新的鍵值將會(huì)比該表中曾能存在過(guò)的最大值大1。如果最大可能的整數(shù)值在數(shù)據(jù)表中曾經(jīng)存在過(guò),INSERT將會(huì)失敗,

并返回SQLITE_FULL錯(cuò)誤代碼。

2.多個(gè)應(yīng)用程序或一個(gè)應(yīng)用程序的多個(gè)實(shí)例可以同時(shí)訪問(wèn)同一個(gè)數(shù)據(jù)庫(kù)文件嗎?

多個(gè)進(jìn)程可同時(shí)打開(kāi)同一個(gè)數(shù)據(jù)庫(kù)。多個(gè)進(jìn)程可以同時(shí)進(jìn)行SELECT 操作,但在任一時(shí)刻,只能有一個(gè)進(jìn)程對(duì)數(shù)據(jù)庫(kù)進(jìn)行更改。

SQLite使用讀、寫(xiě)鎖控制對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。(在Win95/98/ME等不支持讀、寫(xiě)鎖的系統(tǒng)下,使用一個(gè)概率性的模擬來(lái)代替。)但使用時(shí)要注意:如果數(shù)據(jù)庫(kù)文件存放于一個(gè)NFS文件系統(tǒng)上,這種鎖機(jī)制可能不能正常工作。

這是因?yàn)?fcntl() 文件鎖在很多NFS上沒(méi)有正確的實(shí)現(xiàn)。

在可能有多個(gè)進(jìn)程同時(shí)訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)候,應(yīng)該避免將數(shù)據(jù)庫(kù)文件放到NFS上。在Windows上,Microsoft的文檔中說(shuō):如果使用 FAT 文件系統(tǒng)而沒(méi)有運(yùn)行 share.exe 守護(hù)進(jìn)程,那么鎖可能是不能正常使用的。那些在Windows上有很多經(jīng)驗(yàn)的人告訴我:對(duì)于網(wǎng)絡(luò)文件,文件鎖的實(shí)現(xiàn)有好多Bug,是靠不住的。如果他們說(shuō)的是對(duì)的,那么在兩臺(tái)或多臺(tái)Windows機(jī)器間共享數(shù)據(jù)庫(kù)可能會(huì)引起不期望的問(wèn)題。

我們意識(shí)到,沒(méi)有其它嵌入式的 SQL 數(shù)據(jù)庫(kù)引擎能象 SQLite 這樣處理如此多的并發(fā)。SQLite允許多個(gè)進(jìn)程同時(shí)打開(kāi)一個(gè)數(shù)據(jù)庫(kù),同時(shí)讀一個(gè)數(shù)據(jù)庫(kù)。當(dāng)有任何進(jìn)程想要寫(xiě)時(shí),它必須在更新過(guò)程中鎖住數(shù)據(jù)庫(kù)文件。但那通常只是幾毫秒的時(shí)間。其它進(jìn)程只需等待寫(xiě)進(jìn)程干完活結(jié)束。典型地,其它嵌入式的SQL數(shù)據(jù)庫(kù)引擎同時(shí)只允許一個(gè)進(jìn)程連接到數(shù)據(jù)庫(kù)。

但是,Client/Server數(shù)據(jù)庫(kù)引擎(如 PostgreSQL, MySQL, 或 Oracle)通常支持更高級(jí)別的并發(fā),并且允許多個(gè)進(jìn)程同時(shí)寫(xiě)同一個(gè)數(shù)據(jù)庫(kù)。這種機(jī)制在Client/Server結(jié)構(gòu)的數(shù)據(jù)庫(kù)上是可能的,因?yàn)榭偸怯幸粋€(gè)單一的服務(wù)器進(jìn)程很好地控制、協(xié)調(diào)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。如果你的應(yīng)用程序需要很多的并發(fā),那么你應(yīng)該考慮使用一個(gè)Client/Server 結(jié)構(gòu)的數(shù)據(jù)庫(kù)。但經(jīng)驗(yàn)表明,很多應(yīng)用程序需要的并發(fā),往往比其設(shè)計(jì)者所想象的少得多。

當(dāng)SQLite試圖訪問(wèn)一個(gè)被其它進(jìn)程鎖住的文件時(shí),缺省的行為是返回 SQLITE_BUSY。

可以在C代碼中使用 sqlite3_busy_handler() 或

sqlite3_busy_timeout() API 函數(shù)調(diào)整這一行為。

3.在SQLite數(shù)據(jù)庫(kù)中如何列出所有的表和索引?

如果你運(yùn)行 sqlite3 命令行來(lái)訪問(wèn)你的數(shù)據(jù)庫(kù),可以鍵入 “.tables”來(lái)獲得所有表的列表。或者,你可以輸入 “.schema” 來(lái)看整個(gè)數(shù)據(jù)庫(kù)模式,包括所有的表的索引。輸入這些命令,后面跟一個(gè)LIKE模式匹配可以限制顯示的表。

在一個(gè) C/C++ 程序中(或者腳本語(yǔ)言使用 Tcl/Ruby/Perl/Python 等)

你可以在一個(gè)特殊的名叫 SQLITE_MASTER 上執(zhí)行一個(gè)SELECT查詢以獲得所有

表的索引。每一個(gè) SQLite 數(shù)據(jù)庫(kù)都有一個(gè)叫 SQLITE_MASTER 的表,

它定義數(shù)據(jù)庫(kù)的模式。 SQLITE_MASTER 表看起來(lái)如下:

CREATE TABLE sqlite_master (

type TEXT,

name TEXT,

tbl_name TEXT,

rootpage INTEGER,

sql TEXT

);

對(duì)于表來(lái)說(shuō),type 字段永遠(yuǎn)是 'table',name 字段永遠(yuǎn)是表的名字。所以,要獲得數(shù)據(jù)庫(kù)中所有表的列表,使用下列SELECT語(yǔ)句:

SELECT name FROM sqlite_master

WHERE type='table'

ORDER BY name;

對(duì)于索引,type 等于 'index', name 則是索引的名字,tbl_name 是該索引所屬的表的名字。不管是表還是索引,sql 字段是原先用 CREATE TABLE 或 CREATE INDEX 語(yǔ)句創(chuàng)建它們時(shí)的命令文本。對(duì)于自動(dòng)創(chuàng)建的索引(用來(lái)實(shí)現(xiàn) PRIMARY KEY 或 UNIQUE 約束),sql字段為NULL。

SQLITE_MASTER 表是只讀的。不能對(duì)它使用

UPDATE、INSERT 或 DELETE。

它會(huì)被 CREATE TABLE、CREATE INDEX、DROP TABLE 和 DROP INDEX 命令自動(dòng)更新。

臨時(shí)表不會(huì)出現(xiàn)在 SQLITE_MASTER 表中。臨時(shí)表及其索引和觸發(fā)器存放在另外一個(gè)叫 SQLITE_TEMP_MASTER 的表中。SQLITE_TEMP_MASTER 跟 SQLITE_MASTER 差不多,但它只是對(duì)于創(chuàng)建那些臨時(shí)表的應(yīng)用可見(jiàn)。如果要獲得所有表的列表,

不管是永久的還是臨時(shí)的,可以使用類(lèi)似下面的命令:

SELECT name FROM

(SELECT * FROM sqlite_master UNION ALL

SELECT * FROM sqlite_temp_master)

WHERE type='table'

ORDER BY name

4.在SQLite中,VARCHAR字段最長(zhǎng)是多少?

SQLite 不強(qiáng)制 VARCHAR 的長(zhǎng)度。 你可以在 SQLITE 中聲明一個(gè)

VARCHAR(10),SQLite還是可以很高興地允許你放入500個(gè)字符。

并且這500個(gè)字符是原封不動(dòng)的,它永遠(yuǎn)不會(huì)被截?cái)唷?/p>

5.SQLite支持二進(jìn)制大對(duì)象嗎?

SQLite 3.0 及以后版本允許你在任何列中存儲(chǔ) BLOB 數(shù)據(jù)。即使該列被聲明為其它類(lèi)型也可以。

在SQLite中,如何在一個(gè)表上添加或刪除一列?

SQLite 有有限地 ALTER TABLE 支持。你可以使用它來(lái)在表的末尾增加一列,可更改表的名稱(chēng)。如果需要對(duì)表結(jié)構(gòu)做更復(fù)雜的改變,則必須重新建表。重建時(shí)可以先將已存在的數(shù)據(jù)放到一個(gè)臨時(shí)表中,刪除原表,

創(chuàng)建新表,然后將數(shù)據(jù)從臨時(shí)表中復(fù)制回來(lái)。

如,假設(shè)有一個(gè) t1 表,其中有 "a", "b", "c" 三列, 如果要?jiǎng)h除列 c ,以下過(guò)程描述如何做:

BEGIN TRANSACTION;

CREATE TEMPORARY TABLE t1_backup(a,b);

INSERT INTO t1_backup SELECT a,b FROM t1;

DROP TABLE t1;

CREATE TABLE t1(a,b);

INSERT INTO t1 SELECT a,b FROM t1_backup;

DROP TABLE t1_backup;

COMMIT;[h3]

6.在數(shù)據(jù)庫(kù)中刪除了很多數(shù)據(jù),但數(shù)據(jù)庫(kù)文件沒(méi)有變小,是Bug嗎?

不是。當(dāng)你從SQLite數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)時(shí),

未用的磁盤(pán)空間將會(huì)加入一個(gè)內(nèi)部的“自由列表”中。

當(dāng)你下次插入數(shù)據(jù)時(shí),這部分空間可以重用。磁盤(pán)空間不會(huì)丟失,但也不會(huì)返還給操作系統(tǒng)。

如果刪除了大量數(shù)據(jù),而又想縮小數(shù)據(jù)庫(kù)文件占用的空間,執(zhí)行 VACUUM 命令。 VACUUM 將會(huì)從頭重新組織數(shù)據(jù)庫(kù)。這將會(huì)使用數(shù)據(jù)庫(kù)有一個(gè)空的“自由鏈表”,

數(shù)據(jù)庫(kù)文件也會(huì)最小。但要注意的是,VACUUM 的執(zhí)行會(huì)需要一些時(shí)間(在SQLite開(kāi)發(fā)時(shí),在Linux上,大約每M字節(jié)需要半秒種),并且,

執(zhí)行過(guò)程中需要原數(shù)據(jù)庫(kù)文件至多兩倍的臨時(shí)磁盤(pán)空間。

對(duì)于 SQLite 3.1版本,一個(gè) auto-vacumm 模式可以替代 VACUUM 命令。

可以使用 auto_vacuum pragma 打開(kāi)。

7.SQLITE_SCHEMA error是什么錯(cuò)誤?為什么會(huì)出現(xiàn)該錯(cuò)誤?

當(dāng)一個(gè)準(zhǔn)備好的(prepared)SQL語(yǔ)句不再有效或者無(wú)法執(zhí)行時(shí),將返回一個(gè) SQLITE_SCHEMA 錯(cuò)誤。發(fā)生該錯(cuò)誤時(shí),SQL語(yǔ)句必須使用 sqlite3_prepare() API來(lái)重新編譯. 在 SQLite 3 中, 一個(gè) SQLITE_SCHEMA 錯(cuò)誤只會(huì)發(fā)生在用 sqlite3_prepare()/sqlite3_step()/sqlite3_finalize() API 執(zhí)行 SQL 時(shí)。而不會(huì)發(fā)生在使用

sqlite3_exec()時(shí)。

在版本2中不是這樣。

準(zhǔn)備好的語(yǔ)句失效的最通常原因是:在語(yǔ)句準(zhǔn)備好后,

數(shù)據(jù)庫(kù)的模式又被修改了。另外的原因會(huì)發(fā)生在:

數(shù)據(jù)庫(kù)離線:DETACHed.

數(shù)據(jù)庫(kù)被 VACUUMed

一個(gè)用戶存儲(chǔ)過(guò)程定義被刪除或改變。

一個(gè) collation 序列定義被刪除或改變。

認(rèn)證函數(shù)被改變。

在所有情況下,解決方法是重新編譯并執(zhí)行該SQL語(yǔ)句。

因?yàn)橐粋€(gè)已準(zhǔn)備好的語(yǔ)句可以由于其它進(jìn)程改變數(shù)據(jù)庫(kù)模式而失效,所有使用 sqlite3_prepare()/sqlite3_step()/sqlite3_finalize() API 的代碼都應(yīng)準(zhǔn)備處理

SQLITE_SCHEMA 錯(cuò)誤。下面給出一個(gè)例子:

int rc;

sqlite3_stmt *pStmt;

char zSql[] = "SELECT .....";

do {

/* Compile the statement from SQL. Assume

success. */

sqlite3_prepare(pDb, zSql, -1, &pStmt, 0);

while(

SQLITE_ROW==sqlite3_step(pStmt) ){

/* Do something with the row of

available data */

}

/* Finalize

the statement. If an SQLITE_SCHEMA error has

** occured, then the above call to

sqlite3_step() will have

** returned SQLITE_ERROR. sqlite3_finalize()

will return

** SQLITE_SCHEMA. In this case the loop will

execute again.

*/

rc = sqlite3_finalize(pStmt);

} while( rc==SQLITE_SCHEMA );

8.如何一次插入多個(gè)數(shù)據(jù)

Insert into SAMPLE(PRJNUM, PRJNAME, EMYNUM,

EMYNAME, SALCATEGORY, SALPACKAGE)

values(100001, 'TPMS', 200001, 'Johnson',

'A', 2000), (100001, 'TPMS', 200002,

'Christine', 'B', 3000), (100001, 'TPMS',

200003, 'Kevin', 'C', 4000), (100002,

'TCT', 200001, 'Johnson', 'A', 2000),

(100002, 'TCT', 200004, 'Apple', 'B',

3000);

9.如何備份數(shù)據(jù)庫(kù)

先打開(kāi)數(shù)據(jù)庫(kù)test.db

sqlite>sqlite3

test.db

sqlite> .backup test.bak

10.如何恢復(fù)數(shù)據(jù)庫(kù)

先打開(kāi)數(shù)據(jù)庫(kù)test.db

sqlite>sqlite3

test.db

sqlite>

.restore test.bak

11.先判斷表如果不存在,則再創(chuàng)建表

SQL可以如下寫(xiě),供參考:

create

table if not exists student(id integer primary

key autoincrement,/

age

smallint ,anchor smallint);

12.如何查詢SQLite3小工具的版本

執(zhí)行 select sqlite_version();命令即可

十六.Sqlite數(shù)據(jù)庫(kù)中索引的使用、索引的優(yōu)缺點(diǎn)

要使用索引對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)操作進(jìn)行優(yōu)化,那必須明確幾個(gè)問(wèn)題:

1.什么是索引

2.索引的原理

3.索引的優(yōu)缺點(diǎn)

4.什么時(shí)候需要使用索引,如何使用

圍繞這幾個(gè)問(wèn)題,來(lái)探究索引在數(shù)據(jù)庫(kù)操作中所起到的作用。

1.

數(shù)據(jù)庫(kù)索引簡(jiǎn)介

回憶一下小時(shí)候查字典的步驟,索引和字典目錄的概念是一致的。字典目錄可以讓我們不用翻整本字典就找到我們需要的內(nèi)容頁(yè)數(shù),然后翻到那一頁(yè)就可以。索引也是一樣,索引是對(duì)記錄按照多個(gè)字段進(jìn)行排序的一種展現(xiàn)。對(duì)表中的某個(gè)字段建立索引會(huì)創(chuàng)建另一種數(shù)據(jù)結(jié)構(gòu),其中保存著字段的值,每個(gè)值還包括指向與它相關(guān)記錄的指針。這樣,就不必要查詢整個(gè)數(shù)據(jù)庫(kù),自然提升了查詢效率。同時(shí),索引的數(shù)據(jù)結(jié)構(gòu)是經(jīng)過(guò)排序的,因而可以對(duì)其執(zhí)行二分查找,那就更快了。

2. B-樹(shù)與索引

大多數(shù)的數(shù)據(jù)庫(kù)都是以B-樹(shù)或者B+樹(shù)作為存儲(chǔ)結(jié)構(gòu)的,B樹(shù)索引也是最常見(jiàn)的索引。先簡(jiǎn)單介紹下B-樹(shù),可以增強(qiáng)對(duì)索引的理解。

B-樹(shù)是為磁盤(pán)設(shè)計(jì)的一種多叉平衡樹(shù),B樹(shù)的真正最準(zhǔn)確的定義為:一棵含有t(t>=2)個(gè)關(guān)鍵字的平衡多路查找樹(shù)。一棵M階的B樹(shù)滿足以下條件:

1)每個(gè)結(jié)點(diǎn)至多有M個(gè)孩子;

2)除根結(jié)點(diǎn)和葉結(jié)點(diǎn)外,其它每個(gè)結(jié)點(diǎn)至少有M/2個(gè)孩子;

3)根結(jié)點(diǎn)至少有兩個(gè)孩子(除非該樹(shù)僅包含一個(gè)結(jié)點(diǎn));

4)所有葉結(jié)點(diǎn)在同一層,葉結(jié)點(diǎn)不包含任何關(guān)鍵字信息,可以看作一種外部節(jié)點(diǎn);

5)有K個(gè)關(guān)鍵字的非葉結(jié)點(diǎn)恰好包含K+1個(gè)孩子;

B樹(shù)中的每個(gè)結(jié)點(diǎn)根據(jù)實(shí)際情況可以包含大量的關(guān)鍵字信息和分支(當(dāng)然是不能超過(guò)磁盤(pán)塊的大小,根據(jù)磁盤(pán)驅(qū)動(dòng)(disk drives)的不同,一般塊的大小在1k~4k左右);這樣樹(shù)的深度降低了,這就意味著查找一個(gè)元素只要很少結(jié)點(diǎn)從外存磁盤(pán)中讀入內(nèi)存,很快訪問(wèn)到要查找的數(shù)據(jù)。B-樹(shù)上操作的時(shí)間通常由存取磁盤(pán)的時(shí)間和CPU計(jì)算時(shí)間這兩部分構(gòu)成。而相對(duì)于磁盤(pán)的io速度,cpu的計(jì)算時(shí)間可以忽略不計(jì),所以B樹(shù)的意義就顯現(xiàn)出來(lái)了,樹(shù)的深度降低,而深度決定了io的讀寫(xiě)次數(shù)。

B樹(shù)索引是一個(gè)典型的樹(shù)結(jié)構(gòu),其包含的組件主要是:

1)葉子節(jié)點(diǎn)(Leaf node):包含條目直接指向表里的數(shù)據(jù)行。

2)分支節(jié)點(diǎn)(Branch node):包含的條目指向索引里其他的分支節(jié)點(diǎn)或者是葉子節(jié)點(diǎn)。

3) ?根節(jié)點(diǎn)(Root node):一個(gè)B樹(shù)索引只有一個(gè)根節(jié)點(diǎn),它實(shí)際就是位于樹(shù)的最頂端的分支節(jié)點(diǎn)。

如下圖所示:

每個(gè)索引都包含兩部分內(nèi)容,一部分是索引本身的值,第二部分即指向數(shù)據(jù)頁(yè)或者另一個(gè)索引也的指針。每個(gè)節(jié)點(diǎn)即為一個(gè)索引頁(yè),包含了多個(gè)索引。

當(dāng)你為一個(gè)空表建立一個(gè)索引,數(shù)據(jù)庫(kù)會(huì)分配一個(gè)空的索引頁(yè),這個(gè)索引頁(yè)即代表根節(jié)點(diǎn),在你插入數(shù)據(jù)之前,這個(gè)索引頁(yè)都是空的。每當(dāng)你插入數(shù)據(jù),數(shù)據(jù)庫(kù)就會(huì)在根節(jié)點(diǎn)創(chuàng)建索引條目,。當(dāng)根節(jié)點(diǎn)插滿的時(shí)候,再插入數(shù)據(jù)時(shí),根節(jié)點(diǎn)就會(huì)分裂。舉個(gè)例子,根節(jié)點(diǎn)插入了如圖所示的數(shù)據(jù)。(超過(guò)4個(gè)就分裂),這時(shí)候插入H,就會(huì)分裂成2個(gè)節(jié)點(diǎn),移動(dòng)G到新的根節(jié)點(diǎn),把H和N放在新的右孩子節(jié)點(diǎn)中。如圖所示:

根節(jié)點(diǎn)插滿4個(gè)節(jié)點(diǎn)

插入H,進(jìn)行分裂。

大致的分裂步驟如下:

1)創(chuàng)建兩個(gè)兒子節(jié)點(diǎn)

2)將原節(jié)點(diǎn)中的數(shù)據(jù)近似分為兩半,寫(xiě)入兩個(gè)新的孩子節(jié)點(diǎn)中。

3)在跟節(jié)點(diǎn)中放置指向頁(yè)節(jié)點(diǎn)的指針

當(dāng)你不斷向表中插入數(shù)據(jù),根節(jié)點(diǎn)中指向葉節(jié)點(diǎn)的指針也被插滿,當(dāng)葉子還需要分裂的時(shí)候,根節(jié)點(diǎn)沒(méi)有空間再創(chuàng)建指向新的葉節(jié)點(diǎn)的指針。那么數(shù)據(jù)庫(kù)就會(huì)創(chuàng)建分支節(jié)點(diǎn)。隨著葉子節(jié)點(diǎn)的分裂,根節(jié)點(diǎn)中的指針都指向了這些分支節(jié)點(diǎn)。隨著數(shù)據(jù)的不斷插入,索引會(huì)增加更多的分支節(jié)點(diǎn),使樹(shù)結(jié)構(gòu)變成這樣的一個(gè)多級(jí)結(jié)構(gòu)。

3. 索引的種類(lèi)

1)聚集索引:表中行的物理順序與鍵值的邏輯(索引)順序相同。因?yàn)閿?shù)據(jù)的物理順序只能有一種,所以一張表只能有一個(gè)聚集索引。如果一張表沒(méi)有聚集索引,那么這張表就沒(méi)有順序的概念,所有的新行都會(huì)插入到表的末尾。對(duì)于聚集索引,葉節(jié)點(diǎn)即存儲(chǔ)了數(shù)據(jù)行,不再有單獨(dú)的數(shù)據(jù)頁(yè)。就比如說(shuō)我小時(shí)候查字典從來(lái)不看目錄,我覺(jué)得字典本身就是一個(gè)目錄,比如查裴字,只需要翻到p字母開(kāi)頭的,再按順序找到e。通過(guò)這個(gè)方法我每次都能最快的查到老師說(shuō)的那個(gè)字,得到老師的表?yè)P(yáng)。

2)非聚集索引:表中行的物理順序與索引順序無(wú)關(guān)。對(duì)于非聚集索引,葉節(jié)點(diǎn)存儲(chǔ)了索引字段值以及指向相應(yīng)數(shù)據(jù)頁(yè)的指針。葉節(jié)點(diǎn)緊鄰在數(shù)據(jù)之上,對(duì)數(shù)據(jù)頁(yè)的每一行都有相應(yīng)的索引行與之對(duì)應(yīng)。有時(shí)候查字典,我并不知道這個(gè)字讀什么,那我就不得不通過(guò)字典目錄的“部首”來(lái)查找了。這時(shí)候我會(huì)發(fā)現(xiàn),目錄中的排序和實(shí)際正文的排序是不一樣的,這對(duì)我來(lái)說(shuō)很苦惱,因?yàn)槲也荒鼙葎e人快了,我需要先再目錄中找到這個(gè)字,再根據(jù)頁(yè)數(shù)去找到正文中的字。

4.索引與數(shù)據(jù)的查詢,插入與刪除

1)查詢。查詢操作就和查字典是一樣的。當(dāng)我們?nèi)ゲ檎抑付ㄓ涗洉r(shí),數(shù)據(jù)庫(kù)會(huì)先查找根節(jié)點(diǎn),將待查數(shù)據(jù)與根節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行比較,再通過(guò)根節(jié)點(diǎn)的指針查詢下一個(gè)記錄,直到找到這個(gè)記錄。這是一個(gè)簡(jiǎn)單的平衡樹(shù)的二分搜索的過(guò)程,我就不贅述了。在聚集索引中,找到頁(yè)節(jié)點(diǎn)即找到了數(shù)據(jù)行,而在非聚集索引中,我們還需要再去讀取數(shù)據(jù)頁(yè)。

2)插入。聚集索引的插入操作比較復(fù)雜,最簡(jiǎn)單的情況,插入操作會(huì)找到對(duì)于的數(shù)據(jù)頁(yè),然后為新數(shù)據(jù)騰出空間,執(zhí)行插入操作。如果該數(shù)據(jù)頁(yè)已經(jīng)沒(méi)有空間,那就需要拆分?jǐn)?shù)據(jù)頁(yè),這是一個(gè)非常耗費(fèi)資源的操作。對(duì)于僅有非聚集索引的表,插入只需在表的末尾插入即可。如果也包含了聚集索引,那么也會(huì)執(zhí)行聚集索引需要的插入操作。

3)刪除。刪除行后下方的數(shù)據(jù)會(huì)向上移動(dòng)以填補(bǔ)空缺。如果刪除的數(shù)據(jù)是該數(shù)據(jù)頁(yè)的最后一行,那么這個(gè)數(shù)據(jù)頁(yè)會(huì)被回收,它的前后一頁(yè)的指針會(huì)被改變,被回收的數(shù)據(jù)頁(yè)也會(huì)在特定的情況被重新使用。與此同時(shí),對(duì)于聚集索引,如果索引頁(yè)只剩一條記錄,那么該記錄可能會(huì)移動(dòng)到鄰近的索引表中,原來(lái)的索引頁(yè)也會(huì)被回收。而非聚集索引沒(méi)辦法做到這一點(diǎn),這就會(huì)導(dǎo)致出現(xiàn)多個(gè)數(shù)據(jù)頁(yè)都只有少量數(shù)據(jù)的情況。

5. 索引的優(yōu)缺點(diǎn)

其實(shí)通過(guò)前面的介紹,索引的優(yōu)缺點(diǎn)已經(jīng)一目了然。

先說(shuō)優(yōu)點(diǎn):

1)大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因

2)加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。

3)在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢中分組和排序的時(shí)間。

再說(shuō)缺點(diǎn):

1)創(chuàng)建索引需要耗費(fèi)一定的時(shí)間,但是問(wèn)題不大,一般索引只要build一次

2)索引需要占用物理空間,特別是聚集索引,需要較大的空間

3)當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),降低了數(shù)據(jù)的維護(hù)速度,這個(gè)是比較大的問(wèn)題。

6. 索引的使用

根據(jù)上文的分析,我們大致對(duì)什么時(shí)候使用索引有了自己的想法(如果你沒(méi)有,回頭再看一遍。。。)。一般我們需要在這些列上建立索引:

1)在經(jīng)常需要搜索的列上,這是毋庸置疑的;

2)經(jīng)常同時(shí)對(duì)多列進(jìn)行查詢,且每列都含有重復(fù)值可以建立組合索引,組合索引盡量要使常用查詢形成索引覆蓋(查詢中包含的所需字段皆包含于一個(gè)索引中,我們只需要搜索索引頁(yè)即可完成查詢)。 同時(shí),該組合索引的前導(dǎo)列一定要是使用最頻繁的列。對(duì)于前導(dǎo)列的問(wèn)題,在后面sqlite的索引使用介紹中還會(huì)做討論。

3)在經(jīng)常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度,連接條件要充分考慮帶有索引的表。;

4)在經(jīng)常需要對(duì)范圍進(jìn)行搜索的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,其指定的范圍是連續(xù)的,同樣,在經(jīng)常需要排序的列上最好也創(chuàng)建索引。

6)在經(jīng)常放到where子句中的列上面創(chuàng)建索引,加快條件的判斷速度。要注意的是where字句中對(duì)列的任何操作(如計(jì)算表達(dá)式,函數(shù))都需要對(duì)表進(jìn)行整表搜索,而沒(méi)有使用該列的索引。所以查詢時(shí)盡量把操作移到等號(hào)右邊。

對(duì)于以下的列我們不應(yīng)該創(chuàng)建索引:

1)很少在查詢中使用的列

2)含有很少非重復(fù)數(shù)據(jù)值的列,比如只有0,1,這時(shí)候掃描整表通常會(huì)更有效

3)對(duì)于定義為T(mén)EXT,IMAGE的數(shù)據(jù)不應(yīng)該創(chuàng)建索引。這些字段長(zhǎng)度不固定,或許很長(zhǎng),或許為空。

當(dāng)然,對(duì)于更新操作遠(yuǎn)大于查詢操作時(shí),不建立索引。也可以考慮在大規(guī)模的更新操作前drop索引,之后重新創(chuàng)建,不過(guò)這就需要把創(chuàng)建索引對(duì)資源的消耗考慮在內(nèi)。總之,使用索引需要平衡投入與產(chǎn)出,找到一個(gè)產(chǎn)出最好的點(diǎn)。

7. 在sqlite中使用索引

1)Sqlite不支持聚集索引,android默認(rèn)需要一個(gè)_id字段,這保證了你插入的數(shù)據(jù)會(huì)按“_id”的整數(shù)順序插入,這個(gè)integer類(lèi)型的主鍵就會(huì)扮演和聚集索引一樣的角色。所以不要再在對(duì)于聲明為:INTEGER PRIMARY KEY的主鍵上創(chuàng)建索引。

2)很多對(duì)索引不熟悉的朋友在表中創(chuàng)建了索引,卻發(fā)現(xiàn)沒(méi)有生效,其實(shí)這大多數(shù)和我接下來(lái)講的有關(guān)。對(duì)于where子句中出現(xiàn)的列要想索引生效,會(huì)有一些限制,這就和前導(dǎo)列有關(guān)。所謂前導(dǎo)列,就是在創(chuàng)建復(fù)合索引語(yǔ)句的第一列或者連續(xù)的多列。比如通過(guò):CREATE INDEX comp_ind ON table1(x, y, z)創(chuàng)建索引,那么x,xy,xyz都是前導(dǎo)列,而yz,y,z這樣的就不是。下面講的這些,對(duì)于其他數(shù)據(jù)庫(kù)或許會(huì)有一些小的差別,這里以sqlite為標(biāo)準(zhǔn)。在where子句中,前導(dǎo)列必須使用等于或者in操作,最右邊的列可以使用不等式,這樣索引才可以完全生效。同時(shí),where子句中的列不需要全建立了索引,但是必須保證建立索引的列之間沒(méi)有間隙。舉幾個(gè)例子來(lái)看吧:

用如下語(yǔ)句創(chuàng)建索引:

CREATE INDEX idx_ex1 ON ex1(a,b,c,d,e,...,y,z);

這里是一個(gè)查詢語(yǔ)句:

...WHERE a=5 AND b IN (1,2,3) AND c IS NULL AND d='hello'

這顯然對(duì)于abcd四列都是有效的,因?yàn)橹挥械扔诤蚷n操作,并且是前導(dǎo)列。

再看一個(gè)查詢語(yǔ)句:

... WHERE a=5 AND b IN (1,2,3) AND c>12 AND d='hello'

那這里只有a,b和c的索引會(huì)是有效的,d列的索引會(huì)失效,因?yàn)樗赾列的右邊,而c列使用了不等式,根據(jù)使用不等式的限制,c列已經(jīng)屬于最右邊。

最后再看一條:

... WHERE b IN (1,2,3) AND c NOT NULL AND d='hello'

索引將不會(huì)被使用,因?yàn)闆](méi)有使用前導(dǎo)列,這個(gè)查詢會(huì)是一個(gè)全表查詢。

3)對(duì)于between,or,like,都無(wú)法使用索引。

如 ...WHERE myfield BETWEEN 10 and 20;

這時(shí)就應(yīng)該將其轉(zhuǎn)換成:

...WHERE myfield >= 10 AND myfield <= 20;

再如LIKE:...mytable WHERE myfield LIKE 'sql%';;

此時(shí)應(yīng)該將它轉(zhuǎn)換成:

...WHERE myfield >= 'sql' AND myfield < 'sqm';

再如OR:...WHERE myfield = 'abc' OR myfield = 'xyz';

此時(shí)應(yīng)該將它轉(zhuǎn)換成:

...WHERE myfield IN ('abc', 'xyz');

其實(shí)除了索引,對(duì)查詢性能的影響因素還有很多,比如表的連接,是否排序等。影響數(shù)據(jù)庫(kù)操作的整體性能就需要考慮更多因素,使用更對(duì)的技巧,不得不說(shuō)這是一個(gè)很大的學(xué)問(wèn)。

最后在android上使用sqlite寫(xiě)一個(gè)簡(jiǎn)單的例子,看下索引對(duì)數(shù)據(jù)庫(kù)操作的影響。

創(chuàng)建如下表和索引:

db.execSQL("create table if not exists t1(a,b)");

db.execSQL("create index if not exists ia on t1(a,b)");

插入10萬(wàn)條數(shù)據(jù),分別對(duì)表進(jìn)行如下操作:

select * from t1 where a='90012'

插入:insert into t1(a,b) values('10008','name1.6982235534984673')

更新:update t1 set b='name1.999999' where a = '887'

刪除:delete from t1

where a = '1010'

數(shù)據(jù)如下(5次不同的操作取平均值):

操作 ??無(wú)索引 ? ?有索引

查詢 ??170ms ?5ms

插入 ??65ms ??75ms

更新 ??240ms ?52ms

刪除 ??234ms ?78ms

可以看到顯著提升了查詢的速度,稍稍減慢了插入速度,還稍稍提升了更新數(shù)據(jù)和刪除數(shù)據(jù)的速度。如果把更新和刪除中的where子句中的列換成b,速度就和沒(méi)有索引一樣了,因?yàn)樗饕АK运饕艽蠓忍嵘樵兯俣?#xff0c;對(duì)于刪除和更新操作,如果where子句中的列使用了索引,即使需要重新build索引,有可能速度還是比不使用索引要快的。對(duì)與插入操作,索引顯然是個(gè)負(fù)擔(dān)。同時(shí),索引讓db的大小增加了2倍多。

還有個(gè)要吐槽的是,android中的rawQurey方法,執(zhí)行完sql語(yǔ)句后返回一個(gè)cursor,其實(shí)并沒(méi)有完成一個(gè)查詢操作,我在rawquery之前和之后計(jì)算查詢時(shí)間,永遠(yuǎn)是1ms...這讓我無(wú)比苦悶。看了下源碼,在對(duì)cursor調(diào)用moveToNext這些移動(dòng)游標(biāo)方法時(shí),都會(huì)最終先調(diào)用getCount方法,而getCount方法才會(huì)調(diào)用native方法調(diào)用真正的查詢操作。這種設(shè)計(jì)顯然更加合理

[h2]這是一個(gè)事物操作的范例:

[h3]事物..

總結(jié)

以上是生活随笔為你收集整理的slqite3库查询数据处理方式_SQLite3命令操作大全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

丁香花在线视频观看免费 | www.777奇米| 97人人艹 | 日韩字幕在线观看 | 69热国产视频 | 日韩美女免费线视频 | 国产一区在线免费观看视频 | 久久综合九色综合欧美狠狠 | 97超碰人人 | 日本中文字幕网址 | 久久久久国产a免费观看rela | 久草免费在线观看视频 | 日韩av专区| 国产午夜一级毛片 | 精品国产1区2区3区 国产欧美精品在线观看 | 亚洲 欧洲 国产 日本 综合 | 色吊丝在线永久观看最新版本 | 亚洲国内精品 | 欧美另类sm图片 | av一级片在线观看 | 天天射天天干天天操 | 免费观看一区二区 | 九九热99视频 | 免费a v在线 | 国产精品午夜免费福利视频 | 国产精品一区二区久久精品爱微奶 | 在线观看视频黄色 | 激情久久综合 | 精品久久久久久久久久岛国gif | 国产 av 日韩| 免费福利在线播放 | av网站在线免费观看 | 国产一级黄色免费看 | 91成人在线观看高潮 | 国产精品福利久久久 | 免费一级片观看 | 69绿帽绿奴3pvideos | 97激情影院 | 九九99 | 久久精品国产美女 | 丰满少妇一级 | 91精品少妇偷拍99 | 国产一级片在线播放 | 91插插影库 | 日韩av专区 | 亚洲欧洲成人精品av97 | 91精品人成在线观看 | 粉嫩av一区二区三区四区五区 | 97视频免费在线 | www.天天操.com | 在线观看午夜av | 久草精品视频 | 国产精品久久久久久久久免费看 | 国产精品 日韩 欧美 | 人人插人人艹 | 久久激情视频 久久 | 一区二区三区精品在线视频 | 99高清视频有精品视频 | 亚洲天天干| 日本精品在线 | 在线观看中文字幕dvd播放 | 最近高清中文字幕 | 69av视频在线观看 | 91精品国产欧美一区二区成人 | 日韩电影一区二区在线 | 国产高清中文字幕 | 99视频这里只有 | 91亚色免费视频 | 麻豆国产精品永久免费视频 | 九色精品免费永久在线 | 射久久久 | 久久精品一区二区三 | 日日夜夜精品免费视频 | 麻豆 videos| 特级西西444www高清大视频 | 国产免费中文字幕 | 午夜美女福利 | 亚洲欧洲精品一区二区精品久久久 | 日韩大片免费观看 | 色综合久久久久综合体桃花网 | 天天操欧美 | ,久久福利影视 | av网站播放 | 丝袜+亚洲+另类+欧美+变态 | 亚洲精品网址在线观看 | 成人免费一区二区三区在线观看 | 久久久久亚洲精品男人的天堂 | 天天操天天插 | 亚洲精品电影在线 | 96超碰在线| 国产99久久久国产精品成人免费 | 亚洲小视频在线 | 亚洲一区精品人人爽人人躁 | 中文永久免费观看 | av片无限看 | 天天综合亚洲 | 超碰在线97国产 | 中文字幕精品三级久久久 | 91成人免费观看视频 | 久久精品亚洲精品国产欧美 | 国产精品69久久久久 | 一区三区视频在线观看 | 日日夜夜网站 | 精品国产久| 久久视频一区 | 国产日韩在线播放 | 午夜免费福利视频 | 国产精品久久久久久婷婷天堂 | 91在线中字 | 日批网站免费观看 | www.伊人网 | 色香网| 亚洲精品中文字幕视频 | 欧美日韩高清 | 亚洲一区不卡视频 | 国产精品99久久久久久小说 | 久久99精品久久久久久三级 | 亚洲精品国产区 | 国产精品成人av在线 | av一级片 | 青青草国产精品 | 精品国产自在精品国产精野外直播 | 国产中文字幕在线视频 | 日韩精品久久久久 | 久久夜色精品国产欧美乱 | 1024手机在线看 | 久久国产成人午夜av影院宅 | 成人欧美日韩国产 | 久久99久久99免费视频 | 中文字幕精品www乱入免费视频 | 人人爱天天操 | 国产区免费 | 国产精品日韩 | 九九涩涩av台湾日本热热 | 黄色精品一区 | 欧美精品久久久久性色 | 在线观看欧美成人 | 伊人超碰在线 | 国产特级毛片aaaaaaa高清 | 九九视频精品在线 | 久久婷婷亚洲 | 亚洲精品久久久久久国 | 国产精品白丝jk白祙 | 日本久久久久久久久久 | 久久久久久久久免费视频 | 96久久精品 | 黄色成人av | 在线亚洲高清视频 | av黄色亚洲 | 久久免费公开视频 | 美女免费视频一区 | 久久久亚洲影院 | 日韩在线视频线视频免费网站 | 天天av天天| 一区二区精品视频 | 中文字幕 91 | 亚洲第一区在线播放 | 综合精品久久久 | 国产最新视频在线 | 国产成人黄色 | 丝袜美女视频网站 | 天天干亚洲 | www黄色软件 | 亚洲精品www久久久 www国产精品com | 91av短视频 | 国产免费黄色 | 人人揉人人揉人人揉人人揉97 | 黄色亚洲 | 天天天天天干 | 亚洲黄色免费在线看 | 国产精品久久久久久久久久久久午夜片 | 亚洲电影网站 | 亚洲国产欧美在线看片xxoo | www色片 | 亚洲午夜久久久久久久久 | 91视频传媒 | 国产在线观看xxx | 国产精品免费大片视频 | 日韩免费高清在线观看 | 天天曰夜夜爽 | 久久久久国产免费免费 | 国产资源在线观看 | 久久久久久久久久久久影院 | 国产美腿白丝袜足在线av | 欧美色图视频一区 | 99这里精品| 婷婷综合电影 | 国产人成在线观看 | 国产精品一区二区麻豆 | 成人免费网站视频 | 久久精品久久久久 | 亚洲精品资源 | 深爱五月网 | 黄色精品久久久 | 日韩精品一区电影 | 久久久久免费 | ,久久福利影视 | 超黄视频网站 | 国产视频 亚洲精品 | 日韩av成人免费看 | 国产精品一码二码三码在线 | 欧美精品一区二区在线播放 | 人人干人人搞 | 91看成人| 九九视频一区 | 日韩av一区在线观看 | 玖玖精品视频 | 国产色网 | 欧美日韩精品在线免费观看 | 日本精品免费看 | 五月婷影院 | 欧美激情综合色综合啪啪五月 | 天天操天天艹 | 免费看的黄色录像 | 欧美日韩国产伦理 | 欧美精品三级在线观看 | 不卡av免费在线观看 | 在线电影日韩 | 亚洲影视资源 | 色av婷婷| 米奇狠狠狠888 | 亚洲精品国偷拍自产在线观看蜜桃 | 91片黄在线观看动漫 | 国产精品系列在线播放 | 久久久国产成人 | 久久久久国产免费免费 | 国产精品永久久久久久久www | 国产一区在线精品 | 久久午夜鲁丝片 | 国产精品成人国产乱 | 成人免费在线视频观看 | 激情婷婷网 | 国产视频中文字幕在线观看 | 国产日韩欧美在线一区 | 国产精品久久久久久久久久免费看 | 久久久久国产一区二区三区四区 | 久久综合狠狠综合久久狠狠色综合 | 99热 精品在线 | av先锋中文字幕 | 久久av高清| 国产亚洲精品久久久久久无几年桃 | 国产视频一区精品 | 日韩免费三区 | 色网站在线看 | 黄色成人av| 草久在线观看视频 | 免费在线观看日韩 | 日操操 | 99热九九这里只有精品10 | 久久精品中文字幕免费mv | 中文字幕中文字幕中文字幕 | 99日韩精品 | 色噜噜日韩精品欧美一区二区 | 人人澡人人草 | 亚洲黄色影院 | 久久草草热国产精品直播 | 国产午夜激情视频 | 综合色中文 | 国产精品久久久一区二区三区网站 | 国产精品9999久久久久仙踪林 | 欧美日韩成人 | 欧美日韩在线精品一区二区 | 亚洲资源片 | 91av视频播放 | 欧洲精品久久久久毛片完整版 | 亚洲欧美色婷婷 | 日韩精品中文字幕在线播放 | 97狠狠操| 亚洲最新av | av韩国在线 | 免费观看91视频大全 | 99在线播放| 蜜桃av观看| 国产成人在线网站 | av观看久久久 | 午夜国产一区 | 高潮久久久久久 | 国产91对白在线 | 91在线操| 久久69精品久久久久久久电影好 | 久久一区二区三区超碰国产精品 | 男女精品久久 | 97超碰国产精品 | 色视频在线观看免费 | 胖bbbb搡bbbb擦bbbb | 亚洲视频电影在线 | 国产毛片久久久 | 久草在线综合 | 成人欧美一区二区三区在线观看 | 激情五月激情综合网 | 黄色毛片一级片 | 婷婷久久精品 | 亚洲精品资源在线观看 | 亚洲国产精品电影在线观看 | 久草在线视频新 | 999ZYZ玖玖资源站永久 | 视频一区二区国产 | 在线免费观看亚洲视频 | 国产黄色在线观看 | 亚洲国产中文字幕在线视频综合 | 中文字幕永久在线 | 国产亚洲精品久 | 中文字幕av有码 | 免费a网址 | 色丁香久久 | 国产中的精品av小宝探花 | 亚洲午夜久久久久久久久久久 | 国产精品精品久久久 | 中文字幕一区二区三区乱码在线 | 天天色中文 | 中中文字幕av | 黄色一级免费 | 97av在线视频 | 欧美日韩视频在线观看免费 | 亚洲欧洲中文日韩久久av乱码 | 狠狠色丁香久久婷婷综合_中 | 亚洲精品777 | 久久国产精品99久久久久久老狼 | 色wwww| 国产精品久久久久三级 | 丝袜美腿一区 | 中日韩在线视频 | 久久久电影 | 亚洲乱亚洲乱亚洲 | 免费看亚洲毛片 | 九九综合久久 | 国产精品久久久久久久久久尿 | 天天舔天天射天天操 | 久久精品中文字幕一区二区三区 | 天天做日日爱夜夜爽 | 亚洲天堂在线观看完整版 | 久久中文视频 | 97小视频| 天天色官网 | 97碰碰精品嫩模在线播放 | 中文字幕一区二区三区四区久久 | 日韩电影中文 | 激情网五月婷婷 | 亚洲毛片在线观看. | 天天做日日做天天爽视频免费 | 国产精品露脸在线 | 在线免费色视频 | 波多野结衣小视频 | 超碰人人91| 久久久免费 | 国产精品久久久久久超碰 | 久久国产精品99久久久久久丝袜 | 亚洲国产精彩中文乱码av | 丁香在线观看完整电影视频 | 黄色午夜网站 | 婷婷免费在线视频 | 日韩电影一区二区在线观看 | 成人免费色| av电影不卡| 91精品国产九九九久久久亚洲 | 99久久这里只有精品 | 六月丁香婷 | 日韩理论片在线 | 人人澡视频 | 97精品国产97久久久久久粉红 | 免费视频 三区 | 国产美女视频免费观看的网站 | 欧美精品九九99久久 | 欧美激情第一页xxx 午夜性福利 | 国产精品二区在线 | 国产欧美在线一区二区三区 | 日本久久久久久久久久 | 欧美色操 | 97精品国产aⅴ | 一区精品久久 | 国产精品黄色影片导航在线观看 | 中文字幕网站视频在线 | 日本精品久久久久久 | 国产理论免费 | 久久草草热国产精品直播 | 91中文字幕永久在线 | 色婷婷天天干 | 中文字幕视频三区 | 91亚色在线观看 | 婷婷色五 | 成人动漫视频在线 | 日韩v在线| 久久精品123 | 亚洲精品18日本一区app | a天堂免费 | 国产精品自在线拍国产 | 视频在线观看一区 | 午夜国产福利在线观看 | 一区二区三区影院 | 天天操夜夜干 | 色婷婷国产精品 | 日韩在线激情 | 国产96视频| 正在播放五月婷婷狠狠干 | 丁香婷婷综合色啪 | 亚洲欧美国产视频 | 草草草影院 | 久久影视中文字幕 | 天天躁日日躁狠狠躁av麻豆 | 久久伊人婷婷 | 97国产精品视频 | 日韩三区在线观看 | 一本一本久久a久久精品综合小说 | 久黄色| 国产无套精品久久久久久 | 日日夜操 | 99久久99视频只有精品 | 久久影院亚洲 | 激情视频综合网 | 狠狠操狠狠插 | 国产三级精品三级在线观看 | 蜜臀aⅴ国产精品久久久国产 | 天天摸夜夜添 | 一本到在线| 亚洲精品久久久久999中文字幕 | 成人午夜久久 | 天天射天天操天天干 | 国产成人精品一区二区三区福利 | 国产精品日韩欧美 | 精品国产精品国产偷麻豆 | 午夜精品久久久久久久99 | 久草在线综合 | 欧美日韩国产一区二区三区在线观看 | 亚洲三级在线 | 五月激情丁香婷婷 | 久久综合久久综合这里只有精品 | 丁五月婷婷 | 国产高清日韩欧美 | 亚洲精品视频在 | 免费福利在线 | 在线激情影院一区 | 久久精品这里精品 | 免费日p视频 | 四虎影视精品成人 | 粉嫩av一区二区三区免费 | 91成人免费在线视频 | 91九色国产 | 国产精品网站一区二区三区 | 亚洲五月激情 | 97电影院在线观看 | 国产精品人人做人人爽人人添 | 99视频久久 | 欧美日韩中文在线视频 | 久久精品一区二区三区四区 | 正在播放五月婷婷狠狠干 | 天天草夜夜 | 国产高清久久久 | 91九色国产蝌蚪 | 日日夜夜精品免费观看 | 日本中文字幕在线一区 | 九九九视频精品 | 国产一区在线视频 | 日韩,精品电影 | 欧洲一区精品 | 色偷偷97 | 国产日韩精品在线观看 | 香蕉视频在线观看免费 | 九九热精品国产 | www.亚洲视频.com | 国产中文字幕大全 | 中文字幕婷婷 | 天天天天色射综合 | 国产高清视频在线免费观看 | 日本黄色大片儿 | 精品亚洲一区二区 | 日本丶国产丶欧美色综合 | 亚洲最大成人免费网站 | 91精品视频在线看 | 久久免费视频一区 | 久久精品视频免费观看 | 亚洲亚洲精品在线观看 | 国产在线播放一区 | 国产精品乱码高清在线看 | 欧美精品久久久久久久久久久 | 视频在线观看国产 | 日韩欧美亚州 | 国产精品久久久久久模特 | 色人久久 | 香蕉一区 | 欧美黄污视频 | 成人在线黄色电影 | 亚洲另类xxxx | 美女网站在线看 | 亚洲va欧美va人人爽 | 免费黄色在线播放 | 久久久久夜色 | 国产精品久久久久影院日本 | 国产一级黄色免费看 | 日韩精品一区二区三区在线视频 | 二区三区av| 免费观看一区 | 精品字幕在线 | 草免费视频 | 在线观看 亚洲 | 免费看黄电影 | 韩日电影在线观看 | 人人看人人做人人澡 | 中文字幕在线看片 | 肉色欧美久久久久久久免费看 | 最新99热| 久久夜av | 久久久久亚洲天堂 | 中文字幕中文字幕在线中文字幕三区 | 999热视频| 亚洲国内精品在线 | 最近高清中文在线字幕在线观看 | 欧美一区二区日韩一区二区 | 日韩精品一区二区三区丰满 | 国产丝袜高跟 | 一级片免费观看 | 色婷婷视频网 | 婷婷色中文网 | 天天操天天摸天天爽 | 亚洲精品国产免费 | 亚洲理论片 | 久久国产精品第一页 | 久久久久久久久爱 | 在线视频手机国产 | 日韩电影一区二区三区在线观看 | 亚洲日本一区二区在线 | 欧美日韩午夜 | 精品视频久久 | 久久久久久国产精品 | av成人在线网站 | 成人免费观看视频大全 | 丁香六月伊人 | 亚洲三级黄色 | 精品久久99 | 亚洲午夜久久久久 | 亚州欧美视频 | 国产成人精品免费在线观看 | 丁香六月久久综合狠狠色 | 九热在线 | 免费视频97 | 久久精品国产久精国产 | 精品久久美女 | 91c网站色版视频 | 五月色丁香 | 91成人免费在线视频 | 蜜桃av人人夜夜澡人人爽 | 一级性视频 | 日韩在线中文字幕视频 | 亚洲国产无 | 色视频成人在线观看免 | 日韩经典一区二区三区 | 免费高清无人区完整版 | 国产精品视频观看 | 国产精品高清在线观看 | 日韩国产精品一区 | 99精品在线观看 | 亚洲天天草 | 美女网站黄免费 | 国产免费高清视频 | 国产精品久久久av | 97电影手机| 国产精品美女在线观看 | 久久久污| 午夜免费久久看 | 一区二区三区在线观看中文字幕 | 久久久久久麻豆 | 中文字幕成人av | 91精品国自产在线观看 | 久久人人爽av | 亚洲免费资源 | 色婷婷a | 亚洲综合狠狠干 | 久久小视频 | 狠狠黄| 香蕉影院在线观看 | 丁香五婷| 欧美日韩视频观看 | 色婷婷综合久久久久中文字幕1 | 国产在线精品视频 | 亚洲国产免费看 | 久久九九网站 | 91九色视频在线 | 国产精品综合久久久久 | 国产精品欧美久久久久天天影视 | 顶级欧美色妇4khd | 亚洲精品午夜久久久久久久久久久 | 国产精品一区一区三区 | 色综合五月 | 久久草av| 99国产精品免费网站 | 精品国产乱码久久久久久浪潮 | 午夜丁香视频在线观看 | 免费在线观看一级片 | 懂色av一区二区在线播放 | 久久黄色网址 | 亚洲片在线资源 | 午夜精品一区二区三区可下载 | 国产91大片| 国产无套精品久久久久久 | 国产一级在线看 | 97视频免费在线看 | 日韩精品一区二区三区视频播放 | 在线国产不卡 | 婷婷av网| 在线精品视频免费播放 | 国产精品久久久久9999吃药 | 亚洲精品网站 | 国产一区免费观看 | 亚洲男男gaygay无套 | 久草综合在线观看 | 欧美一区二区三区不卡 | 成人a在线观看高清电影 | 国产麻豆视频网站 | 草 免费视频 | 亚洲国产精品久久久久久 | 免费看的黄色 | 日韩激情小视频 | 中文字幕在线视频网站 | 久久美女免费视频 | 亚洲国产精品久久久久婷婷884 | 丝袜+亚洲+另类+欧美+变态 | 欧美精品中文字幕亚洲专区 | 日韩av午夜在线观看 | 精品中文字幕在线播放 | 国产不卡免费视频 | 97操碰 | 免费在线激情电影 | 人人网人人爽 | 日韩精品免费在线观看 | 伊人干综合 | 天天伊人狠狠 | 视频高清 | 特黄特色特刺激视频免费播放 | 国产精品麻 | 亚洲天堂网站 | 国产永久免费 | 黄色片毛片| 欧美日韩中文字幕视频 | 成人动图 | 亚洲午夜不卡 | 五月激情久久久 | 欧美日韩中文在线观看 | 国产精品免费在线播放 | 香蕉视频国产在线观看 | 久久久久久美女 | 日韩在线观看第一页 | 日韩美精品视频 | 亚洲区另类春色综合小说校园片 | 久久理论片 | 日本中文字幕在线电影 | 一区二区精品视频 | 精精国产xxxx视频在线播放 | 色婷av| 日韩动漫免费观看高清完整版在线观看 | 夜夜澡人模人人添人人看 | 亚洲精品免费在线播放 | 国内丰满少妇猛烈精品播 | 高清一区二区三区 | 香蕉久草| 激情深爱.com | 中文字幕在线免费观看 | 黄色美女免费网站 | 国产在线观看网站 | 高清不卡毛片 | 精品国产伦一区二区三区观看说明 | 四虎在线免费视频 | 成年人电影免费看 | 欧美国产精品久久久久久免费 | 狠狠狠操 | 久久这里 | 毛片在线网 | 精品一区二区视频 | 欧美日韩一区二区三区视频 | 精品一区二区免费在线观看 | 91av在线免费观看 | 美女视频黄是免费的 | 伊人色综合久久天天 | 又粗又长又大又爽又黄少妇毛片 | 九九九热精品免费视频观看网站 | 碰超在线 | 中文av在线免费观看 | 一区二区精品在线 | 久草视频在线资源 | 国产黄在线 | 久久综合偷偷噜噜噜色 | 午夜久久久影院 | 国产黄色大片免费看 | 日日干夜夜操视频 | 天天综合视频在线观看 | 激情视频网页 | 黄色网大全 | 亚洲精品色 | 香蕉视频免费看 | 欧美激情综合网 | 久久久久久久久久久久久久免费看 | 99精品黄色| 日韩精品中文字幕在线观看 | 成人av电影免费 | 97视频久久久 | 91人人干| 国产二区电影 | 国产免费不卡av | 91探花在线 | 伊甸园av在线 | 亚洲 欧美 国产 va在线影院 | 国产精品igao视频网网址 | 欧美一级视频一区 | 色视频在线观看 | 香蕉蜜桃视频 | va视频在线| 国产精品ⅴa有声小说 | 国产精品一区二区三区在线看 | 日本性视频 | 日韩一区正在播放 | 精品 激情 | 欧美日韩一区二区在线 | 午夜久操| 99r在线精品 | 18国产精品白浆在线观看免费 | 国产免费高清视频 | a√天堂资源 | 精品在线视频一区 | 久久精品欧美一 | 人人人爽 | 精品国内 | 天天干,夜夜操 | 玖玖视频在线 | 色综合天天综合网国产成人网 | 亚洲精品黄 | 欧美午夜性 | 高清不卡一区二区在线 | 国产精品一区在线观看 | 亚洲精品视频播放 | 免费看国产黄色 | 亚洲精品视频在线看 | 午夜精品久久久久久久久久 | 色窝资源 | 久久三级毛片 | 日韩一区二区三区高清在线观看 | 国产糖心vlog在线观看 | 日韩a欧美| 日韩高清激情 | 国产精品美女久久久久久网站 | 亚洲视频在线观看免费 | 97人人模人人爽人人少妇 | 免费视频黄色 | 婷五月激情| 天天天色综合a | 国产精品激情 | 在线你懂 | 国产999精品久久久久久麻豆 | 麻豆系列在线观看 | 亚洲精欧美一区二区精品 | 成人免费观看在线视频 | 视频91 | 国产精品免费看 | 午夜久久福利影院 | 久久尤物电影视频在线观看 | 中文字幕在线网址 | 亚洲va韩国va欧美va精四季 | 精品色综合 | 日本91在线| 欧美在线观看视频一区二区三区 | 色欲综合视频天天天 | 黄色特级一级片 | 天天激情在线 | 18性欧美xxxⅹ性满足 | 日韩精品国产一区 | 激情伊人 | 国产亚洲亚洲 | av大全在线免费观看 | 欧美日韩视频在线 | 免费看av在线 | 在线观看视频免费大全 | 精品美女在线观看 | 国产aaa大片 | 最近中文字幕mv免费高清在线 | av一区二区三区在线观看 | 91中文在线视频 | 久久精品99国产精品 | 日本三级中文字幕在线观看 | 国产日韩欧美在线观看 | 三级大片网站 | 中文资源在线官网 | 五月天亚洲婷婷 | 国产 日韩 欧美 自拍 | 成人免费av电影 | 久久国产欧美日韩精品 | 欧美一区视频 | 91传媒在线播放 | 国产一区二区精品在线 | 婷婷色在线播放 | 中文字幕免费高清在线观看 | 91完整版在线观看 | 日韩av午夜在线观看 | 国产成人精品免高潮在线观看 | 欧美激情综合五月色丁香 | 激情网五月 | 中文字幕视频在线播放 | 久久精品美女 | 91视频在线看 | 国产精品久久久久久久久久久久午 | 婷婷丁香激情五月 | 亚洲专区欧美专区 | 精品国产乱码久久 | 欧美精品999 | 国产精品免费在线 | 又黄又爽又无遮挡免费的网站 | 丁香色综合 | 久久久久久久久久久久影院 | 国产97免费 | 国产在线播放一区 | 国产一区二区三区久久久 | 国产精品剧情在线亚洲 | 免费麻豆视频 | 成人黄色小说在线观看 | 久久久九色精品国产一区二区三区 | 91看成人 | 久久国产精品视频 | 精品五月天 | 免费看久久 | 91在线中字| av在线免费播放 | 粉嫩一区二区三区粉嫩91 | 国产精品久久久久久久久久妇女 | 亚洲精品一区二区三区新线路 | 欧美精品一区二区在线播放 | 91看片成人 | 九色在线| 日本性高潮视频 | 韩国av不卡| 高清一区二区三区 | 五月天婷婷在线观看视频 | 91手机视频在线 | 日韩在线视频一区二区三区 | 午夜精品一区二区三区免费 | 亚洲精品自在在线观看 | 日韩视频a | 在线免费黄色毛片 | 国产精品igao视频网入口 | 中文字幕九九 | 久久久久久网址 | 91.精品高清在线观看 | 欧美色精品天天在线观看视频 | 福利一区在线视频 | 私人av| 99久久久久久国产精品 | 天天天天天干 | 亚洲清纯国产 | 日韩av中文字幕在线免费观看 | 久久久久一区二区三区四区 | 国产 中文 日韩 欧美 | 久久超碰在线 | 天天射天天| 免费看成人a | 91夜夜夜| 中文字幕在线观看一区 | 中文乱幕日产无线码1区 | 欧美久草视频 | 欧美精品免费在线观看 | 久久综合毛片 | 久影院| 久久综合天天 | 五月天婷婷在线观看视频 | 黄色亚洲 | 久久精品9 | av网站大全免费 | 国产福利在线免费观看 | 国产精品扒开做爽爽的视频 | 不卡电影免费在线播放一区 | 99久久精品午夜一区二区小说 | 日韩中文免费视频 | 丁香视频五月 | 亚洲一区尤物 | 国产一级在线观看视频 | 狠狠色丁香婷婷综合橹88 | 91入口在线观看 | 手机在线黄色网址 | 国产一级片在线播放 | 色综合亚洲精品激情狠狠 | 久久久国产一区二区三区四区小说 | 91精品国自产在线 | 综合伊人久久 | 五月开心六月伊人色婷婷 | 97色资源| 不卡视频在线 | 天天操操 | 中文字幕精品一区 | 成年人免费看的视频 | 在线观看午夜 | 日韩av手机在线看 | 91精品国产一区 | 国产性天天综合网 | 精品视频在线播放 | 在线观看国产麻豆 | 国产一二区视频 | www.97视频| 在线观看视频97 | 国产精品片 | 九九交易行官网 | 国产精品地址 | 成人丁香花| 日韩精品大片 | 黄色av电影一级片 | 日韩91av| 久草久草在线 | 性色av免费看 | 丁香六月av| 日产乱码一二三区别在线 | 91精品视频在线 | 国产精品电影在线 | 久久免费一级片 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 91精品久久久久久综合乱菊 | 精品国内自产拍在线观看视频 | 丁香婷婷综合网 | 成人免费电影 | 国产午夜精品一区二区三区 | 欧美日韩在线免费视频 | 中文字幕乱码亚洲精品一区 | 青草视频在线 | 久久综合久久久久88 | 久久久久国产一区二区三区 | 综合网天天 | 美女视频黄的免费的 | 久久精品一区八戒影视 | 久久免费看a级毛毛片 | 久久久久国产视频 | 久久综合婷婷国产二区高清 | 在线观看视频免费播放 | 国产精品手机在线 | 在线免费中文字幕 | 国产福利av在线 | 精品免费 | 免费高清在线观看成人 | 久久a视频| 亚洲精品国偷自产在线91正片 | 国产黄网在线 | 国产99久久久国产精品 | 黄色的网站在线 | 国产精品久久久一区二区三区网站 | 九草在线观看 | 精品产品国产在线不卡 | 久久精品日产第一区二区三区乱码 | 亚洲国产免费看 | 成人毛片在线视频 | 狠狠色丁香婷婷综合久小说久 | 97成人精品区在线播放 | 高清一区二区 | 国内视频在线 | 亚洲天堂精品视频在线观看 | 青青河边草手机免费 | 日韩在线一二三区 | 久久久国产精华液 | 国产高清av免费在线观看 | 胖bbbb搡bbbb擦bbbb | 欧美一区二区在线 | 久久九九免费视频 | 亚洲 中文 在线 精品 | 操久在线 | 国产成人精品一区二区三区免费 | 国产一区二区高清视频 | 久草网首页| 五月婷婷在线视频观看 | 天天射天天干天天爽 | 日韩精品久久久 | 美女精品久久久 | 国产视频美女 | 亚洲视频 在线观看 | 久久字幕精品一区 | 精品久久久久久久久久国产 | 国产精品久久久久久久婷婷 | 中文字幕在线网 | 国产精品观看视频 | 福利一区二区三区四区 | 久久曰视频 | 国产专区第一页 | 亚洲欧美激情精品一区二区 | 六月色丁| 中文字幕亚洲五码 | 欧美日韩国产二区三区 | 91插插影库 | 色综合久久久网 | 9999精品免费视频 | 国产视频久 | 西西44人体做爰大胆视频 | 日韩中文字幕视频在线观看 | 99麻豆视频 | 日本丶国产丶欧美色综合 | 三级午夜片 | 婷婷六月天综合 | 激情欧美一区二区免费视频 | 日产乱码一二三区别免费 | 欧美极度另类性三渗透 | 超碰97av在线 | 欧美日韩免费一区二区 | 久久综合综合久久综合 | 日b视频在线观看网址 | 丁香六月婷婷综合 | 亚州激情视频 | 五月天久久激情 | 日韩美女免费线视频 | 丁香av在线 | 欧洲视频一区 |