前言

记录一下常用的Sqlite语句,防止以后需要的时候忘记!~

要注意的地方

  1. 文本类型的值要加单引号,数值可以不用加
  2. 清空数据库后文件大小不变怎么解决,清空后执行下面语句即可
没错,就是这个单词,执行一下就好了
vacuum

在末尾插入每一列数据

INSERT INTO 表名 VALUES (值1, 值2,....)

在末尾插入指定列数据

INSERT INTO 表名 (列1, 列2,...) VALUES (值1, 值2,....)

删除指定行语句

DELETE FROM 表名 WHERE 字段名 = 值

清空表语句

DELETE FROM 表名

删除重复字段内容保留一条

delete from 表名 where rowid not in(select max(rowid) from 表名 group by 要检查的字段名)
或
delete from 表名 where 唯一ID字段名 not in(select max(唯一ID字段名) from 表名 group by 要检查的字段名)

SQLite中每个表都默认包含一个隐藏列rowid,使用WITHOUT ROWID定义的表除外。通常情况下,rowid可以唯一的标记表中的每个记录。表中插入的第一个条记录的rowid为1,后续插入的记录的rowid依次递增1。即使插入失败,rowid也会被加一。所以,整个表中的rowid并不一定连续,即使用户没有删除过记录。

由于唯一性,所以rowid在很多场合中当作主键使用。在使用的时候,select from tablename 并不能获取rowid,必须显式的指定。例如,select rowid, from tablename 才可以获取rowid列。查询rowid的效率非常高,所以直接使用rowid作为查询条件是一个优化查询的好方法。

但是rowid列作为主键,在极端情况下存在隐患。由于rowid值会一直递增,如果达到所允许的最大值9223372036854775807后,它会自动搜索没有被使用的值,重新使用,并不会提示用户。这时,使用rowid排序记录,会产生乱序,并引入其他的逻辑问题。所以,如果用户的数据库存在这种可能的情况,就应该使用AUTOINCREMENT定义主键,从而避免这种问题。使用AUTOINCREMENT设置自增主键,虽然也会遇到9223372036854775807问题,但是它会报错,提示用户,避免产生rowid所引发的问题。

修改单条

UPDATE 表名 SET 字段名 = 新值 WHERE 字段名 = 旧值

修改多条

UPDATE 表名 SET 字段名 = 新值,字段名 = 新值,.... WHERE 字段名 = 旧值

取出单列或多列字段

SELECT 字段名1,字段名2,字段名3 FROM 表名

取出所有字段

SELECT * FROM 表名

取出某列包含某值的字段

SELECT * FROM 表名 WHERE 列标题='某值'

排除包含关键词的字段

SELECT * FROM 表名 WHERE 字段名 NOT LIKE '%关键词%'

排除多个包含关键词的字段

SELECT * FROM 表名 WHERE 字段名 NOT LIKE '%关键词%' AND 字段名 NOT LIKE'%关键词%'

取出包含关键词的字段

SELECT * FROM 表名 WHERE 字段名 LIKE '%关键词%'

取出值为关键词的字段

SELECT * FROM 表名 WHERE INSTR ('关键词',字段名)>0

随机取出一行数据

limit 1表示只取一条记录

SELECT * FROM 表名 ORDER BY RANDOM() limit 1

现在功能实现了,但是这样效率比较低,我们对sql语句改造如下:

SELECT * FROM 表名 WHERE id in (SELECT id FROM 表名 order by RANDOM() limit 10)

如果只想取其中的一条记录也可以把WHERE id in替换成WHERE id=,如下所示:

SELECT * FROM 表名 WHERE id = (SELECT id FROM 表名 order by RANDOM() limit 10) 

另外在MySQL中也有一个RAND()函数可以实现类似功能,在MSSQL中可以通过order by GUID来实现

查找表中多余的重复记录

SELECT * FROM 表名 group by 字段名 having count(*) > 1;

查找表中多字段多余的重复记录

SELECT * FROM 表名 GROUP BY    字段名1,    字段名2,    字段名3,... HAVING (count(要检查的字段或唯一ID字段) > 1)

查找表中多字段多余的重复记录2

select * from 表名 where 要检查的字段名 in (select  content  from  表名  group  by  要检查的字段名  having  count(要检查的字段或唯一ID字段) > 1)

多表查询

SELECT * FROM 表名1 AS A JOIN 表名2 AS B WHERE A.id = 99 AND B.id =99

意思是将表1作为A代替 表2作为B代替 查询表1与表2值为99的字段

取出数据库中的总行数

SELECT Count(*) FROM 表名

取出某字段为空的数据

SELECT * FROM 表名 WHERE 字段名 is null

取出某字段不为空的数据

SELECT * FROM 表名 WHERE 字段名 is NOT null

其它

自增时间字段(建议使用例1)

例1

创建表:

create table Account( username char, password char,  date timestamp NOT null default (datetime('now','localtime')))

添加数据:

insert into Account ("username","password") VALUES('13201544054','aa123456')

例2

创建表:

create table Accounts( username char, password char, date DATETIME NOT null default CURRENT_TIMESTAMP)

添加数据:

insert into Accounts ("username","password") VALUES('13201544054','aa123456')
最后修改:2022 年 11 月 17 日
如果觉得我的文章对你有用,请随意赞赏~