成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

SQLite教程(三):數據表和視圖簡介

瀏覽:589日期:2023-04-05 14:56:02

一、創建數據表:

    該命令的語法規則和使用方式與大多數關系型數據庫基本相同,因此我們還是以示例的方式來演示SQLite中創建表的各種規則。但是對于一些SQLite特有的規則,我們會給予額外的說明。注:以下所有示例均是在sqlite自帶命令行工具中完成的。

    1). 最簡單的數據表:
 復制代碼 代碼如下:
    sqlite> CREATE TABLE testtable (first_col integer);
 
    這里需要說明的是,對于自定義數據表表名,如testtable,不能以sqlite_開頭,因為以該前綴定義的表名都用于sqlite內部。

    2). 創建帶有缺省值的數據表:
 復制代碼 代碼如下:
    sqlite> CREATE TABLE testtable (first_col integer DEFAULT 0, second_col varchar DEFAULT "hello");

    3). 在指定數據庫創建表:
 復制代碼 代碼如下:
    sqlite> ATTACH DATABASE "d:/mydb.db" AS mydb;
    sqlite> CREATE TABLE mydb.testtable (first_col integer);
 
    這里先通過ATTACH DATABASE命令將一個已經存在的數據庫文件attach到當前的連接中,之后再通過指定數據庫名的方式在目標數據庫中創建數據表,如mydb.testtable。關于該規則還需要給出一些額外的說明,如果我們在創建數據表時沒有指定數據庫名,那么將會在當前連接的main數據庫中創建該表,在一個連接中只能有一個main數據庫。如果需要創建臨時表,就無需指定數據庫名,見如下示例:
    --創建兩個表,一個臨時表和普通表。
 復制代碼 代碼如下:
    sqlite> CREATE TEMP TABLE temptable(first_col integer);
    sqlite> CREATE TABLE testtable (first_col integer);   
 
    --將當前連接中的緩存數據導出到本地文件,同時退出當前連接。
 復制代碼 代碼如下:
    sqlite> .backup d:/mydb.db
    sqlite> .exit
 
    --重新建立sqlite的連接,并將剛剛導出的數據庫作為主庫重新導入。
 復制代碼 代碼如下:
    sqlite> .restore d:/mydb.db
 
    --查看該數據庫中的表信息,通過結果可以看出臨時表并沒有被持久化到數據庫文件中。
 復制代碼 代碼如下:
    sqlite> .tables
    testtable   

    4). "IF NOT EXISTS"從句:
    如果當前創建的數據表名已經存在,即與已經存在的表名、視圖名和索引名沖突,那么本次創建操作將失敗并報錯。然而如果在創建表時加上"IF NOT EXISTS"從句,那么本次創建操作將不會有任何影響,即不會有錯誤拋出,除非當前的表名和某一索引名沖突。
 復制代碼 代碼如下:
    sqlite> CREATE TABLE testtable (first_col integer);
    Error: table testtable already exists
    sqlite> CREATE TABLE IF NOT EXISTS testtable (first_col integer);

    5). CREATE TABLE ... AS SELECT:
    通過該方式創建的數據表將與SELECT查詢返回的結果集具有相同的Schema信息,但是不包含缺省值和主鍵等約束信息。然而新創建的表將會包含結果集返回的所有數據。
 復制代碼 代碼如下:
    sqlite> CREATE TABLE testtable2 AS SELECT * FROM testtable;   
    sqlite> .schema testtable2
    CREATE TABLE testtable2(first_col INT);
 
    .schema命令是sqlite3命令行工具的內置命令,用于顯示當前數據表的CREATE TABLE語句。   

    6). 主鍵約束:
 復制代碼 代碼如下:
    --直接在字段的定義上指定主鍵。
    sqlite> CREATE TABLE testtable (first_col integer PRIMARY KEY ASC);
    --在所有字段已經定義完畢后,再定義表的數約束,這里定義的是基于first_col和second_col的聯合主鍵。
    sqlite> CREATE TABLE testtable2 (
       ...>     first_col integer,
       ...>     second_col integer,
       ...>     PRIMARY KEY (first_col,second_col)
       ...> );

    和其他關系型數據庫一樣,主鍵必須是唯一的。

    7). 唯一性約束:
 復制代碼 代碼如下:
    --直接在字段的定義上指定唯一性約束。
    sqlite> CREATE TABLE testtable (first_col integer UNIQUE);
    --在所有字段已經定義完畢后,在定義表的唯一性約束,這里定義的是基于兩個列的唯一性約束。
    sqlite> CREATE TABLE testtable2 (
       ...>     first_col integer,
       ...>     second_col integer,
       ...>     UNIQUE (first_col,second_col)
       ...> );   
    在SQLite中,NULL值被視為和其他任何值都是不同的,這樣包括和其他的NULL值,如下例:
    sqlite> DELETE FROM testtable;
    sqlite> SELECT count(*) FROM testtable;
    count(*)
    ----------
    0
    sqlite> INSERT INTO testtable VALUES(NULL);
    sqlite> INSERT INTO testtable VALUES(NULL);
    sqlite> SELECT count(*) FROM testtable;
    count(*)
    ----------
    2  
 
    由此可見,兩次插入的NULL值均插入成功。

    8). 為空(NOT NULL)約束:
 復制代碼 代碼如下:
    sqlite> CREATE TABLE testtable(first_col integer NOT NULL);
    sqlite> INSERT INTO testtable VALUES(NULL);
    Error: testtable.first_col may not be NULL
 
    從輸出結果可以看出,first_col已經被定義了非空約束,因此不能在插入NULL值了。   

    9). 檢查性約束:
 復制代碼 代碼如下:
    sqlite> CREATE TABLE testtable (first_col integer CHECK (first_col < 5));
    sqlite> INSERT INTO testtable VALUES(4);
    sqlite> INSERT INTO testtable VALUES(20); -- 20違反了字段first_col的檢查性約束(first_col < 5)
    Error: constraint failed
    --和之前的其它約束一樣,檢查性約束也是可以基于表中的多個列來定義的。   
    sqlite> CREATE TABLE testtable2 (
       ...>     first_col integer,
       ...>     second_col integer,
       ...>     CHECK (first_col > 0 AND second_col < 0)
       ...> );

二、表的修改:

    SQLite對ALTER TABLE命令支持的非常有限,僅僅是修改表名和添加新字段。其它的功能,如重命名字段、刪除字段和添加刪除約束等均為提供支持。

    1). 修改表名:

    需要先說明的是,SQLite中表名的修改只能在同一個數據庫中,不能將其移動到Attached數據庫中。再有就是一旦表名被修改后,該表已存在的索引將不會受到影響,然而依賴該表的視圖和觸發器將不得不重新修改其定義。
 復制代碼 代碼如下:
    sqlite> CREATE TABLE testtable (first_col integer);
    sqlite> ALTER TABLE testtable RENAME TO testtable2;
    sqlite> .tables
    testtable2   
 
    通過.tables命令的輸出可以看出,表testtable已經被修改為testtable2。   

    2). 新增字段:
 復制代碼 代碼如下:
    sqlite> CREATE TABLE testtable (first_col integer);
    sqlite> ALTER TABLE testtable ADD COLUMN second_col integer;
    sqlite> .schema testtable
    CREATE TABLE "testtable" (first_col integer, second_col integer);
 
    通過.schema命令的輸出可以看出,表testtable的定義中已經包含了新增字段。   
    關于ALTER TABLE最后需要說明的是,在SQLite中該命令的執行時間是不會受到當前表行數的影響,也就是說,修改有一千萬行數據的表和修改只有一條數據的表所需的時間幾乎是相等的。
   
三、表的刪除:

    在SQLite中如果某個表被刪除了,那么與之相關的索引和觸發器也會被隨之刪除。在很多其他的關系型數據庫中是不可以這樣的,如果必須要刪除相關對象,只能在刪除表語句中加入WITH CASCADE從句。見如下示例:
 復制代碼 代碼如下:
    sqlite> CREATE TABLE testtable (first_col integer);
    sqlite> DROP TABLE testtable;
    sqlite> DROP TABLE testtable;
    Error: no such table: testtable
    sqlite> DROP TABLE IF EXISTS testtable; 
 
    從上面的示例中可以看出,如果刪除的表不存在,SQLite將會報錯并輸出錯誤信息。如果希望在執行時不拋出異常,我們可以添加IF EXISTS從句,該從句的語義和CREATE TABLE中的完全相同。
   
四、創建視圖:

    我們這里只是給出簡單的SQL命令示例,具體的含義和技術細節可以參照上面的創建數據表部分,如臨時視圖、"IF NOT EXISTS"從句等。
    1). 最簡單的視圖:
 復制代碼 代碼如下:
    sqlite> CREATE VIEW testview AS SELECT * FROM testtable WHERE first_col > 100;   
   
    2). 創建臨時視圖:
 復制代碼 代碼如下:
    sqlite> CREATE TEMP VIEW tempview AS SELECT * FROM testtable WHERE first_col > 100;
   
    3). "IF NOT EXISTS"從句:
 復制代碼 代碼如下:
    sqlite> CREATE VIEW testview AS SELECT * FROM testtable WHERE first_col > 100;
    Error: table testview already exists
    sqlite> CREATE VIEW IF NOT EXISTS testview AS SELECT * FROM testtable WHERE first_col > 100;
   
五、刪除視圖:

    該操作的語法和刪除表基本相同,因此這里只是給出示例:
 復制代碼 代碼如下:
    sqlite> DROP VIEW testview;
    sqlite> DROP VIEW testview;
    Error: no such view: testview
    sqlite> DROP VIEW IF EXISTS testview;      

標簽: SQLite
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产欧美日韩亚洲一区二区三区| 欧美午夜电影网| 怡红院av一区二区三区| 欧美日韩精品一区视频| 伊人成人网在线看| 国产精品一色哟哟哟| 亚洲在线观看免费视频| 久久九九全国免费| 欧美日韩高清不卡| 亚洲精品一区二区三区av| 成人一道本在线| 免费观看日韩电影| 亚洲日本乱码在线观看| 欧美电影免费观看高清完整版在| 久久精品女人| 国产精品av久久久久久麻豆网| 国产精品一区二区果冻传媒| 亚洲成年人影院| 亚洲国产精品传媒在线观看| 91精品国产综合久久久久久久| 欧美一进一出视频| 亚洲网址在线| caoporen国产精品视频| 久久99蜜桃精品| 亚洲一区二区三区四区在线 | 国产成人精品在线看| 五月开心婷婷久久| 亚洲日本丝袜连裤袜办公室| 久久久91精品国产一区二区精品| 7777精品伊人久久久大香线蕉的 | 久久久精品五月天| 欧美69wwwcom| 国产精品系列在线播放| 亚洲成人免费av| 亚洲日本成人在线观看| 国产人久久人人人人爽| 日韩精品一区二区三区三区免费| 欧美色网站导航| 色欧美乱欧美15图片| 日韩视频免费| 欧美体内she精视频在线观看| 成人动漫一区二区在线| 国产一区二区导航在线播放| 免费在线观看视频一区| 一区二区三区高清| 亚洲欧洲av在线| 国产欧美一区二区三区在线看蜜臀 | 欧美一区二区三区视频在线| 老牛国产精品一区的观看方式| 99精品免费视频| 激情综合自拍| 欧美另类视频| 99麻豆久久久国产精品免费优播| 国产成人免费视频网站| 国产一区亚洲一区| 精品在线免费视频| 裸体一区二区三区| 蜜臀va亚洲va欧美va天堂| 亚洲主播在线播放| 亚洲精品国产品国语在线app| 亚洲欧洲日韩av| 国产精品福利一区二区| 中文字幕 久热精品 视频在线| 国产午夜精品一区二区| 久久毛片高清国产| 久久久久久久久久看片| 久久久一区二区| 久久久91精品国产一区二区三区| 久久久国产精品不卡| 国产丝袜欧美中文另类| 国产欧美一区二区三区在线看蜜臀 | 91豆麻精品91久久久久久| 欧美综合77777色婷婷| 香蕉av777xxx色综合一区| 性久久久久久| 久久国产精品久久精品国产| 欧美综合77777色婷婷| 久久精品人人| 亚洲免费网站| 久久婷婷丁香| 在线视频一区二区三| 欧美色男人天堂| 91精品国产综合久久久蜜臀粉嫩| 日韩视频123| 久久久久亚洲综合| 中文幕一区二区三区久久蜜桃| 国产精品久久久久久一区二区三区| 成人免费视频在线观看| 亚洲自拍偷拍九九九| 丝袜美腿亚洲综合| 老色鬼精品视频在线观看播放| 国产在线不卡一卡二卡三卡四卡| 国产原创一区二区| 国产91精品在线观看| 91日韩精品一区| 国产一区二区在线观看免费播放| 亚洲看片网站| 久久亚洲精品伦理| 欧美在线一二三四区| 7777精品伊人久久久大香线蕉 | 亚洲精品乱码久久久久| 亚洲图片有声小说| 日本91福利区| 国产精品亚洲一区二区三区在线| 成人激情图片网| 欧美91视频| 在线观看视频日韩| 亚洲一区二区精品在线观看| 日本精品视频一区二区三区| 欧美精品粉嫩高潮一区二区| 精品精品欲导航| 国产精品私房写真福利视频| 亚洲一区精品在线| 另类调教123区| 成人精品免费网站| 国产一区二区无遮挡| 99国产精品久久久久久久成人热| 久久中文精品| 欧美一二三区在线| 欧美极品aⅴ影院| 亚洲午夜在线视频| 国产一区二区女| 欧美大片专区| 先锋影音久久久| 91精品免费在线观看| 日本一区二区成人| 亚洲123区在线观看| 国产一二三精品| 欧美大香线蕉线伊人久久国产精品| 最新亚洲激情| 在线视频一区二区免费| 欧美一卡二卡在线| 国产精品毛片无遮挡高清| 亚洲18影院在线观看| 国产精品99久久久久久似苏梦涵| 欧美精选一区| 久热re这里精品视频在线6| 日韩久久精品一区| 亚洲色图视频网| 精品亚洲欧美一区| 欧美激情91| 久久精品官网| 精品久久久久香蕉网| 一区二区三区四区视频精品免费 | 欧美性色黄大片手机版| 2欧美一区二区三区在线观看视频| 亚洲欧美视频一区| 久久精品国产久精国产| 欧美88av| 91精品1区2区| 国产亚洲一区二区在线观看| 天天影视网天天综合色在线播放 | 中文字幕亚洲区| 蜜桃av噜噜一区| 色综合色综合色综合| 蜜桃av综合| 久久久久久久电影| 日韩高清在线不卡| 97se亚洲国产综合自在线不卡| 免费日韩av片| 久久只精品国产| 丝瓜av网站精品一区二区| caoporen国产精品视频| 久久五月激情| 亚洲国产高清不卡| 极品少妇一区二区| 在线日韩av永久免费观看| 在线播放/欧美激情| 亚洲欧美视频在线观看视频| 国产麻豆精品在线观看| aa级大片欧美三级| 欧美成人三级在线| 偷拍亚洲欧洲综合| 91免费视频观看| 欧美在线免费播放| 国产精品久久久久久久久免费樱桃| 极品少妇一区二区| 国产日韩在线一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 亚洲最色的网站| www.色综合.com| 在线免费观看日韩欧美| 最新久久zyz资源站| youjizz国产精品| 欧美三级在线播放| 一区二区三区四区亚洲| jizzjizzjizz欧美| 欧美伊人久久大香线蕉综合69| 国产精品三级视频| 国产大陆a不卡| 久久久99爱| 国产精品传媒入口麻豆| 国产麻豆欧美日韩一区| 亚欧美中日韩视频| 国产精品无遮挡| 国产iv一区二区三区| 91福利在线看| 亚洲一区二区三区自拍| 欧美三区美女| 精品乱码亚洲一区二区不卡|