SQLite学习手册(数据表和视图)

发布时间:2018-11-15  栏目:sqlite  评论:0 Comments

一致、创建数据表:


一、创建数据表:

   
该令的语法规则及动方法和多数涉嫌项目数据库基本相同,因此我们还是以示范的不二法门来演示SQLite中开创建表的各种条条框框。但是对于部分SQLite特有的规则,我们见面赋予格外的证实。注:以下有所示例均是当sqlite自带命令行工具被成就的。

  
 该令的语法规则与用办法及大多数事关项目数据库基本相同,因此我们或坐示范的道来演示SQLite中创造建表的各种条条框框。但是于有些SQLite特有的条条框框,我们会予以格外的印证。注:以下有所示例均是在sqlite自带命令行工具中好的。
    1). 最简便易行的数据表:
    sqlite> CREATE TABLE testtable
(first_col integer);
  
 这里用验证的凡,对于自定义数据表表名,如testtable,不能够坐sqlite_初步,因为坐该前缀定义之表名都用于sqlite内部。

    1). 最简便的数据表:
 

    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   

    sqlite> CREATE TABLE testtable (first_col integer);
 

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

   
这里要证实的凡,对于自定义数据表表名,如testtable,不能够以sqlite_初始,因为坐该前缀定义之表名都用于sqlite内部。

    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语句。   

    2). 创建带有缺省值的数据表:
 

    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)
       …> );
    和外涉嫌项目数据库一样,主键必须是唯一的。

    sqlite> CREATE TABLE testtable (first_col integer DEFAULT 0,
second_col varchar DEFAULT ‘hello’);

    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值均插入成功。

    3). 在指定数据库创建表:
 

    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> ATTACH DATABASE ‘d:/mydb.db’ AS mydb;
    sqlite> CREATE TABLE mydb.testtable (first_col integer);
 

仲、表的修改:

    这里先经ATTACH
DATABASE命令将一个已经在的数据库文件attach到当下之连续着,之后再度经过点名数量库名的法门以靶数据库被开创数据表,如mydb.testtable。关于该规则还待为有有些额外的认证,如果我们当开立数量表时没有点名数量库名,那么用见面在目前接连的main数据库中创造该表,在一个接连着只能发出一个main数据库。如果用创造临时表,就凭需点名数量库名,见如下示例:
    –创建两独说明,一个临时表和普通表。
 

    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> CREATE TEMP TABLE temptable(first_col integer);
    sqlite> CREATE TABLE testtable (first_col integer);   
 

  
 在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> .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;      

卿可能感兴趣的文章:

  • sql 刷新视图
  • SQL server
    视图(view)介绍
  • 据悉mysql事务、视图、存储过程、触发器的下分析
  • MySQL中视图的使用和多表INNER
    JOIN的技术分享
  • sql
    server判断数据库、表、列、视图是否在
  • SQL
    SERVER先判断视图是否是然后再创视图的言语
  • Sql Server中之视图介绍
  • Sql
    Server中的体系视图详细介绍
  • 解析SQL Server
    视图、数据库快照
  • 简析SQL
    Server数据库用视图来处理复杂的多寡查询关系

留下评论

网站地图xml地图