当前位置:网站首页 / 数据库 / 正文

ay 写给自己的sqlite笔记[4]

时间:2016年05月15日 | 作者 : aaronyang | 分类 : 数据库 | 浏览: 999次 | 评论 0

PRAGMA语句 用来修改整个sqllite的操作默认行为,数据库配置等。这里实用性对ay来说用不到,就不写了。

关于约束,比如not null列不能为空类似的。

DEFAULT 约束:当某列没有指定值时,为该列提供默认值。

UNIQUE 约束:确保某列中的所有值是不同的。   该列中值不重复

PRIMARY Key 约束:唯一标识数据库表中的各行/记录。

CHECK 约束:CHECK 约束确保某列中的所有值满足一定条件。

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   AGE            INT     NOT NULL UNIQUE,
   SALARY         REAL    DEFAULT 50.00
  SALARY2         REAL    CHECK(SALARY2 > 0)
);

主键就不说了。

SQLite 支持 ALTER TABLE 的有限子集。在 SQLite 中,ALTER TABLE 命令允许用户重命名表,或向现有表添加一个新的列。重命名列,删除一列,或从一个表中添加或删除约束都是不可能的



多表操作 A表6条记录,B表4条,

交叉连接 - CROSS JOIN              6*4=24条记录

内连接 - INNER JOIN

SELECT ... FROM table1 [INNER] JOIN table2 ON 相等条件(table1.A=table2.A_Id)

在sqlite中inner可以省略不写

关于条件可以简化,直接使用using(相同列)

例如

select a.Name,b.ClassName from student a inner join classroom b on a.ClassroomId=b.ClassroomId

条件是这两个列名名字必须一样,才可以使用using简写

select a.Name,b.ClassName from student a inner join classroom b using(ClassroomId)

如何2个表以上

select a.Name,b.ClassName from student a inner join classroom b using(ClassroomId)

                                                                        inner join teachers b using(TeacherId)


Sqlite还有个更简洁的写法,SQL自动检测各表中每一列是否匹配,这样,即使表结构发生变化,也不用修改SQL语句,可以自动适应变化

select a.Name,b.ClassName from student a natural join classroom b




外连接 - OUTER JOIN

sqlite 只支持 左外连接(LEFT OUTER JOIN)

以左边的表为主表,对应右边的表找不到的列,就是null

当然在sqlite也有using的简洁写法,具体看inner join

SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
        ON COMPANY.ID = DEPARTMENT.EMP_ID;






Union和Union All 和sqlserver是一致的。合并结果集,前者 去重后,后者不去重。

关于sql语句中 select * from o where o.typeid is not null,使用null的方式也和sqlserver一致

对表或者列取别名,使用as运算符。




======================================== AYUI       www.ayjs.net      AY         杨洋原创编写,请不要转载谢谢===============



触发器

QLite 的触发器是数据库的回调函数,它会自动执行/指定的数据库事件发生时调用。以下是关于SQLite的触发器的要点: SQLite 触发器(Trigger)是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。以下是关于 SQLite 的触发器(Trigger)的要点:

SQLite 的触发器(Trigger)可以指定在特定的数据库表发生 DELETE、INSERT 或 UPDATE 时触发,或在一个或多个指定表的列发生更新时触发。

SQLite 只支持 FOR EACH ROW 触发器(Trigger),没有 FOR EACH STATEMENT 触发器(Trigger)。因此,明确指定 FOR EACH ROW 是可选的。

WHEN 子句和触发器(Trigger)动作可能访问使用表单 NEW.column-name 和 OLD.column-name 的引用插入、删除或更新的行元素,其中 column-name 是从与触发器关联的表的列的名称。

如果提供 WHEN 子句,则只针对 WHEN 子句为真的指定行执行 SQL 语句。如果没有提供 WHEN 子句,则针对所有行执行 SQL 语句。

BEFORE 或 AFTER 关键字决定何时执行触发器动作,决定是在关联行的插入、修改或删除之前或者之后执行触发器动作。

当触发器相关联的表删除时,自动删除触发器(Trigger)。

要修改的表必须存在于同一数据库中,作为触发器被附加的表或视图,且必须只使用 tablename,而不是 database.tablename。

一个特殊的 SQL 函数 RAISE() 可用于触发器程序内抛出异常

CREATE  TRIGGER trigger_name [BEFORE|AFTER] event_name 
ON table_name
BEGIN
 -- Trigger logic goes here....
END;


sqlite也可以在单个列或者多个列上安装 触发器

CREATE  TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name 
ON table_name
BEGIN
 -- Trigger logic goes here....
END;


实例讲解 ay

CREATE TRIGGER audit_log AFTER INSERT 
ON COMPANY
BEGIN
   INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now'));
END;

在COMPANY表上创建个,每当网COMPANY表新增(因为使用的insert)一条记录时候,执行完成后(因为使用的是after),触发下面的sql语句


列出触发器

SELECT name FROM sqlite_master
WHERE type = 'trigger';

删除触发器

DROP TRIGGER trigger_name;




======================================== AYUI       www.ayjs.net      AY         杨洋原创编写,请不要转载谢谢===============


推荐您阅读更多有关于“数据库sqlite3,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

抖音号:wpfui,可以看到我的很多作品效果

AYUI8社区版Github地址:前往获取

作者:杨洋(AaronYang简称AY,安徽六安人)目前是个人,还没公司AY唯一QQ:875556003和AY交流

高中学历,2015年1月17日开始,兴趣学习研究WPF,目前工作繁忙,不接任何活

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费.AY主要靠卖技术服务挣钱

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

兼容XP到win10,vs2015/2017/2019,最新AYUI:7.6.5.5

vs2015 企业版密钥HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

vs2017 企业版密钥NJVYC-BMHX2-G77MM-4XJMR-6Q8QF

标签列表