1。创建数据表:

这个命令的语法和用法基本上与大多数关系数据库相同。因此,我们证明了通过实例创建表在SQLite的各种规则。但是对于一些SQLite的具体规则,我们将给予更多的指导。注:以下所有的例子在SQLite命令行工具完成。

1)。最简单的数据表:

复制代码代码如下所示:

SQLite >创建表的数据(first_col整数);



需要说明的是,自定义数据表的名称,如数据,它不能从sqlite_,因为这个前缀定义的表的名称都使用SQLite。

2)。创建具有默认值的数据表:

复制代码代码如下所示:

SQLite >创建表的数据(first_col整数默认0,second_col varchar default'hello);



3)。在指定的数据库中创建一个表:

复制代码代码如下所示:

SQLite >附加数据库会: /文件。db'as mydb;

SQLite >创建表mydb.testtable(first_col整数);



在这里,我们首先把现有的数据库文件附加到当前的连接通过附加数据库命令,然后创建数据表在目标数据库中指定数据库的名称,如mydb.testtable.the规则也需要给予一些额外的指令。如果我们在创建数据表时没有指定数据库名称,那么我们将在当前连接的主数据库中创建表。连接中只有一个主数据库。如果需要创建临时表,则不需要指定数据库名称。请看下面的例子:

-创建两个表、一个临时表和一个普通表。

复制代码代码如下所示:

SQLite >创建临时表诱人的(first_col整数);

SQLite >创建表的数据(first_col整数);



-将缓存数据从当前连接导出到本地文件并退出当前连接。

复制代码代码如下所示:

SQLite >。备份D: / mydb.db

SQLite退出>。



-重建了SQLite连接并重新导入新的出口为主要的图书馆数据库。

复制代码代码如下所示:

SQLite >。恢复D: / mydb.db



-查看数据库中的表信息,结果显示临时表不保存到数据库文件中。

复制代码代码如下所示:

SQLite表>。

数据



4)。如果不存在子句:

如果正在创建的数据表的名称已经存在,即与现有表的名称冲突,视图名称和索引名称,然后创建操作将失败并没有报告。但是,如果不存在的条款被添加到创建的表,然后创建操作不会有任何的效果,即没有将出现错误,除非当前的表名和索引名称冲突。

复制代码代码如下所示:

SQLite >创建表的数据(first_col整数);

错误:数据表已经存在

SQLite >创建数据表不存在(first_col整数);



5)。创建表…作为选择:

通过这种方式创建的数据表与SELECT查询返回的结果集具有相同的模式信息,但不包含缺省值和主键等约束信息。但是,新创建的表将包含结果集返回的所有数据。

复制代码代码如下所示:

SQLite >创建表testtable2为SELECT * FROM TestTable表;

图式testtable2 SQLite >。

创建表testtable2(first_col int);



的。模式命令是sqlite3命令行工具内置的命令,它是用来显示创建表的当前数据表的语句。

6)。主键约束:

复制代码代码如下所示:

-主键直接指定在字段的定义上。

SQLite >创建表的数据(first_col整型主键ASC);

在所有的领域都得到了定义,该表的约束定义,它定义了一个基于first_col和second_col联合主键。

SQLite >创建表testtable2(

…> first_col整数,

…> second_col整数,

…>主键(first_col,second_col)

>);



与其他关系数据库一样,主键必须是唯一的。

7)。唯一性约束:

复制代码代码如下所示:

-直接指定字段定义的唯一性约束。

SQLite >创建表的数据(first_col整数唯一);

定义了所有字段后,定义了表的唯一性约束,定义了基于两列的唯一性约束。

SQLite >创建表testtable2(

…> first_col整数,

…> second_col整数,

> > >(first_col独特,second_col)

>);

在SQLite中,空值被认为是不同于其他任何价值,包括与其他空值,如下:

SQLite >删除数据;

SQLite > select count(*)从数据;

计数(*)

----------

零

SQLite >插入数据值(null);

SQLite >插入数据值(null);

SQLite > select count(*)从数据;

计数(*)

----------

二



这表明两个插入的null值都成功插入。

8)。NULL(非空)约束:

复制代码代码如下所示:

SQLite >创建表的数据(first_col整数不为空);

SQLite >插入数据值(null);

错误:testtable.first_col不得空



正如你可以看到从输出,first_col被定义为一个非空的约束,所以不能插入空值。

9)。检查约束:

复制代码代码如下所示:

SQLite >创建表的数据(first_col整数检查(first_col<5));

SQLite >插入数据值(4);

SQLite >插入数据值(20);20违反约束检查现场first_col(first_col<5)

错误:约束失败

与前面的约束一样,检查约束也可以基于表中的多个列定义。

SQLite >创建表testtable2(

…> first_col整数,

…> second_col整数,

…>检查(first_col > 0和second_col<0)

>);



两。表格的修改:

SQLite的ALTER TABLE命令非常有限的支持,只有修改表名和添加新的字段。其他功能,如重命名字段,删除字段,删除和添加约束,所有提供支持。

1)。修改表的名称:

需要说明的是,在SQLite中修改表的名字只能在同一数据库的改变并不能移动到附加的数据库。另一件事是,一旦表名称修改,索引,该表已经存在,将不受影响。但是,根据表的视图和触发器,它将不得不重新定义它的定义。

复制代码代码如下所示:

SQLite >创建表的数据(first_col整数);

SQLite >修改表数据为testtable2;

SQLite表>。

testtable2



正如你可以看到的输出。表格命令,表格数据已被修改,testtable2。

2)。新领域:

复制代码代码如下所示:

SQLite >创建表的数据(first_col整数);

SQLite >修改表添加列second_col整数数据;

SQLite >模式数据。

创建表的数据(first_col second_col整数,整数);



正如你可以看到的输出。模式命令,新领域已列入表中数据的定义。

说表是在SQLite的最后一件事,指令的执行时间不是用在当前表的行数的影响。也就是说,有一千万行数据被修改和修改,一个数据表所需的时间几乎相等。



三。删除表:

如果一个表在SQLite删除,与之相关的索引和触发器也会被删除。在许多其他关系数据库,这是没有的情况下。如果必须删除相关对象,则只能添加级联子句来删除表语句:

复制代码代码如下所示:

SQLite >创建表的数据(first_col整数);

SQLite >删除表数据;

SQLite >删除表数据;

错误:没有这样的数据表:

SQLite >删除表如果存在数据;



正如你可以看到从上面的例子,如果删除的表不存在,SQLite会传达错误的信息和输出的错误信息。如果你想不抛出异常,在执行,我们可以添加如果存在的条款,这在创建表的语义是完全相同的。



四。创建视图:

这里我们只给出简单SQL命令的示例。具体的含义和技术细节可参考上述数据表,如临时视图、如果不存在等条款。

1)。最简单的观点:

复制代码代码如下所示:

Sqlite> CREATE VIEW testview AS SELECT * FROM TestTable WHERE first_col > 100;



2)。创建临时视图:

复制代码代码如下所示:

SQLite >创建临时视图tempview为SELECT * FROM TestTable表在first_col > 100;



3)。如果不存在子句:

复制代码代码如下所示:

SQLite >创建视图TestView为SELECT * FROM数据在first_col > 100;

错误:表TestView已经存在

SQLite >创建视图不存在TestView为SELECT * FROM数据在> 100;



五。删除视图:

此操作的语法基本上与删除表相同,所以这里只是一个示例:

复制代码代码如下所示:

SQLite >删除视图TestView;

SQLite >删除视图TestView;

错误:没有这样的观点:TestView

SQLite >删除视图是否存在TestView;