- 浏览: 648008 次
- 性别:
- 来自: 石家庄
文章分类
最新评论
-
abao1:
老贾 在安装IDEA的过程中,在激活步骤时,按如下操作即可: ...
IntelliJ IDEA 2016注册方法和注册码 -
bo_hai:
./usr/bin/java: symbol lookup ...
jmagick安装步骤 -
wxcking:
不错的, 收藏一下
JAVA使用POI生成Excel文件 -
zgyfh:
大哥,密码是多少啊?zgyfh@tom.com谢谢了!新手学习 ...
WPF做的必备示例 -
记忆无泪:
jiasongmao 写道你的邮箱是多少,我可以发源代码到邮箱 ...
WPF做的必备示例
一、创建数据表:
该命令的语法规则和使用方式与大多数关系型数据库基本相同,因此我们还是以示例的方式来演示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;
发表评论
-
Oracle11g客户端安装与配置
2018-07-31 00:02 1153资源 下载资源,直接解压进行配置 Ora ... -
史上最全的MSSQL复习笔记
2015-09-10 10:49 368转自博客园,地址:http://www.cnblogs ... -
通过命令附加数据库
2013-08-06 20:06 777通过T-SQL附加数据库的命令为: CREATE DATA ... -
sql server 使用系统表查询数据库表结构信息
2012-08-06 14:38 820SELECT 表名 = Case Wh ... -
SqlServer里DateTime转字符串
2012-07-21 09:14 813Select CONVERT(varchar(100), GE ... -
删除重复数据,只保留一条
2012-03-01 15:27 0SQL:删除重复数据,只保留一条2009-08-20 17:1 ... -
压缩数据库日志文件(存储过程)
2012-02-14 15:48 880USE master GO SET ANSI_NULLS ... -
判断触发器的类型:insert update delete
2011-04-17 14:44 1356在一个触发机制包含为insert update delete的 ... -
sql server获取sql语句执行的毫秒数
2011-04-10 19:13 3060写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务 ... -
SQL Server里面可能经常会用到的日期格式转换方法
2011-04-10 18:46 758select convert(varchar(10),getd ... -
SQL Server系统表
2011-04-10 17:17 798SQL Server系统表 SQL Server ... -
oracle操作xml笔记四
2010-09-07 12:58 3775使用 fn:doc 和 fn:collection 函数在 ... -
oracle操作xml笔记三
2010-09-07 12:58 2487了解 XQuery 函数和表达式 XQuery 是 W ... -
oracle操作xml笔记二
2010-09-07 12:56 1559使用 XML 将数据添加到 XMLType 表和列中。 ... -
oracle操作xml笔记一
2010-09-07 12:55 1962声明:该文章源于oracle官网 ,经博文只是对其进行了梳理 ... -
在 Oracle 中使用正则表达式
2010-09-07 09:21 980Oracle使用正则表达式离不开这4个函数: 1。regex ... -
110个Oracle常用函数整理汇总
2010-09-07 09:15 10501. ASCII 返回与指定的 ... -
oracle查看被锁的表以及如何解除锁定
2010-09-02 12:25 1938-------------查询被锁的表 select o ... -
转一篇很详细的 Oracle的日期函数
2010-08-24 12:35 994Oracle的日期函数 ... -
Oracle语句优化53个规则详解
2010-08-11 12:43 815Oracle语句优化53个规 ...
相关推荐
SQLite学习手册(数据表和视图) 一、创建数据表 二、表的修改 三、表的删除 四、创建视图 五、删除视图 SQLite学习手册(内置函数) 一、聚合函数 二、核心函数 三、日期和时间函数 SQLite学习手册(索引和数据分析/清理...
教程,安装,命令,语法,数据类型,创建数据库,附加数据库,分离数据库,创建表,删除表,insert语句,select语句,运算符,表达式,where子句,and/or运算符,update子句,like, group,limit, order by, having ...
4PostgreSQL 触发器99PostgreSQL 触发函数100PostgreSQL 类型102...表选项112SQLite 视图112SQLite 索引113SQLite 触发器114SQL Server 对象115SQL Server 备份或还原(只限于完整版本)120SQL Server 备份120...
2.7 创建数组的视图和拷贝 40 2.8 花式索引 41 2.9 基于位置列表的索引方法 43 2.10 用布尔型变量索引NumPy数组 44 2.11 NumPy数组的广播 46 2.12 小结 49 第3章 统计学与线性代数 50 3.1 Numpy和Scipy模块 ...
2.7.1 使用require和require_once语句 2.7.1 进行文件包含 42 2.7.2 使用include与include_once语句 2.7.2 进行文件包含 44 2.8 小结 45 第3章 PHP的数据类型与操作 46 3.1 数据类型的介绍 46 3.1.1 标量数据类型 46...
目录相关链接参考资料通用(General)基础(Basic)模型(Model)Active Record基础SQLite数据类型Active Record数据关系Active Record数据查询视图(View)Bootstrap手册控制器(Controller)Padrino控制器工具(Tool)Padrino...
本书由浅入深地讲解了 SQL 的基本概念和语法, 涉及数据的排序、 过滤和分组, 以及表、视图、 联结、 子查询、 游标、 存储过程和触发器等内容, 实例丰富, 便于查阅。 SQL语法简洁,使用方式灵活,功能强大,...
说明: ...因此程序可以说是网上...vbRichClient5的手册找遍了都找不到,估计作者都没写,更别想有中文版了,所以只能 在vb6中点击视图-》对象窗口,可显示vbRichClient5.dll 所有的类和方法 QQ175891641 2018-2-15优化
根据基本表结构及其数据生成 INSERT ... 的 SQL 简便的MS SQL 数据库 表内容 脚本 生成器 将表数据生成SQL脚本的存储过程 直接从SQL语句问题贴子数据建表并生成建表语句的存储过程 从SQL中的一个表中导出HTML文件...
10.4.2. 同一表中查询多列数据 10.4.3. 多表联合查询 10.4.4. WHERE条件 10.4.5. GROUP BY分句 10.4.6. HAVING 条件 10.4.7. ORDER BY 分句 10.4.8. 通过总数和偏移量进行LIMIT限制 10.4.9. 通过页数和总数...
Android入门逆引手册 Android开发指南中文版、创意设计 【Android系统原理与开发要点详解】/底层 应用 框架 Android核心分析28篇,强烈推荐android初学者,android进阶者看看这个系列教程 Android应用开发者指南:...