CREATE TABLE WordTable (id integer PRIMARY KEY autoincrement , word TEXT , updatedate datetime )
INSERT INTO WordTable (id,word,updatedate) VALUES (6,'ceshi','2020-08-11 13:42:29');
SELECT * FROM WordTable WHERE updatedate>='2020-08-11 10:42:29' AND updatedate<='2020-08-11 10:42:29'
SELECT * FROM TX WHERE updatedate LIKE '%:%' ORDER BY updatedate ASC LIMIT 1 ---》DESC:降序 ASC:升序 ---》%:匹配任意长度字符串 ---》_:匹配一个字符 ---》LIMIT 1:限制输出一条结果,必须在sql语句最后
DELETE FROM table WHERE User='555'
某一项数值加1
UPDATE User SET Logins=Logins+1 WHERE User='555'
更新多个字段
UPDATE Tx SET Ip='11111',Name='2222' WHERE Uid='TTTTTTTTTTTTTTT1'
视图(View) 是一种虚表,允许用户实现以下几点:
SQLite 视图内容是随着实际数据表实时变化,是只读的,因此可能无法在视图上执行 DELETE、INSERT 或 UPDATE 语句。但是可以在视图上创建一个触发器,当尝试 DELETE、INSERT 或 UPDATE 视图时触发,需要做的动作在触发器内容中定义。
//创建 CREATE VIEW my_view AS SELECT Ip FROM TX //删除 DROP VIEW my_view
原理
影响
使用场景
单列索引
CREATE INDEX index_name ON table_name (column_name);
唯一索引
使用唯一索引不仅是为了性能,同时也为了数据的完整性。唯一索引不允许任何重复的值插入到表中。
CREATE UNIQUE INDEX index_name on table_name (column_name);
组合索引
CREATE INDEX index_name on table_name (column1, column2);
隐式索引
隐式索引是在创建对象时,由数据库服务器自动创建的索引。索引自动创建为主键约束和唯一约束。
删除索引
DROP INDEX index_name;
如何正确使用索引
比如通过:CREATE INDEX comp_ind ON table1(x, y, z)创建索引,那么x,xy,xyz都是前导列,而yz,y,z这样的就不是。在WHERE子句中,前导列必须使用等于或者IN操作,最右边的列可以使用不等式,这样索引才可以完全生效。同时,WHERE子句中的列不需要全建立了索引,但是必须保证建立索引的列之间没有间隙。
例子:
//创建索引 CREATE INDEX idx_ex1 ON ex1(a,b,c,d,e,...,y,z); //查询语句 ...WHERE a=5 AND b IN (1,2,3) AND c IS NULL AND d='hello' abcd四列都是有效的,因为只有等于和IN操作,并且是前导列。 //查询语句 ... WHERE a=5 AND b IN (1,2,3) AND c>12 AND d='hello' 那这里只有a,b和c的索引会是有效的,d列的索引会失效,因为它在c列的右边,而c列使用了不等式,根据使用不等式的限制,c列已经属于最右边。 //查询语句 ... WHERE b IN (1,2,3) AND c NOT NULL AND d='hello' 索引将不会被使用,因为没有使用前导列,这个查询会是一个全表查询。 //对于between,or,like语句,都无法使用索引
SQLite 触发器(Trigger) 是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。
关键字
INSERT、DELETE 和 UPDATE创建触发器的基本语法
CREATE TRIGGER trigger_name [BEFORE|AFTER] event_name ON table_name BEGIN -- 触发器逻辑.... END;
UPDATE指定字段创建触发器语法(INSERT、DELETE没有此特性)
CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name ON table_name BEGIN -- 触发器逻辑.... END;
列出触发器
SELECT name FROM sqlite_master WHERE type = 'trigger';
SELECT name FROM sqlite_master WHERE type = 'trigger' AND tbl_name = 'tablename';
删除触发器
DROP TRIGGER trigger_name;
实例
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL );
CREATE TRIGGER audit_log AFTER INSERT ON COMPANY BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now')); END;
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 );
COMPANY表
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Paul | 32 | California | 20000.0 |
AUDIT 表
EMP_ID | ENTRY_DATE |
---|---|
1 | 2013-04-05 06:26:00 |
开启事务命令
BEGIN; 或者 BEGIN TRANSACTION
提交事务命令
COMMIT 或者 END TRANSACTION
回滚命令
ROLLBACK
实例
BEGIN; DELETE FROM COMPANY WHERE AGE = 25; ROLLBACK;
BEGIN; DELETE FROM COMPANY WHERE AGE = 25; COMMIT;
DML(Data Manipulation Lanaguage,数据操纵语言)
DML就是我们经常用到的SELECT、INSERT、UPDATE和DELETE语句,主要是用来对数据进行CRUD:增查改删(create, read (retrieve), update, delete)操作。
DDL(Data Definition Language,数据定义语言)
DDL就是我们在创建表的时候用到的一些语句,比如说CREATE、ALTER、DROP等。DDL主要是用在定义或改变表的结构、数据类型、表之间的链接或约束等初始化工作上。
DCL(Data Control Language,数据库控制语言)
DCL是用来设置或更改数据库用户或角色权限的语句,包括GRANT、DENY、REVOKE等语句。