zoukankan      html  css  js  c++  java
  • sqlite数据表的增删改查操作 Marathon

    sqlite 数据库的表信息查看

    ubuntu18.04通过sqlite3的数据表进行CRUD操作,

    首先安装sqlite3

    # 1.sudo apt-get install sqlite3
    # 安装后可查看对应版本信息,sqlite3 --version
    # 2.cd sqlite.db文件夹
    # 3.sqlite3 xx.db
    # 此时,进入了该数据库,接下来就是表的操作及常用sql语句的crud
    # 这里记录几个常用的:
    # 1.查看库中表格table
    # sqlite>.tables
    # 2.查看某表的信息
    # select * from xx_table;
    

    sqlite常用命令

    假设你已经通过 sqlite3 db_name进入到数据库,接下来看看可能会使用的这些命令吧。

    输出帮助信息

    sqlite>.help
    

    查看数据库文件信息命令(注意命令前带字符'.')

    sqlite>.database
    

    退出sqlite终端命令

    sqlite>.quit 或者 sqlite>.exit
    

    显示数据库结构

    sqlite>.schema    表名
    实就是一些 SQL 语句,他们描述了数据库的结构
    

    格式化输出

    sqlite>.header on
    sqlite>.mode column
    sqlite>.timer on
    

    结果如图:

    新建库

    sqlite3 库名
    ls # 查看新建库
    

    新建表

    create table table_name(field1 type1, field2 type1, ...);
    
    table_name是要创建数据表名称,fieldx是数据表内字段名称,typex则是字段类型。
    如:CREATE TABLE IF NOT EXISTS "itm_session" ("sessionID" varchar(40) NOT NULL PRIMARY KEY, "clientIP" varchar(32) NOT NULL, "created" datetime NOT NULL, "sessionTimeout" integer NOT NULL, "user_id" integer NOT NULL REFERENCES "auth_user" ("id"));
    sql的指令格式:所有sql指令都是以分号(;)结尾,两个减号(--)则表示注释。
    

    CRUD

    create

    insert into table_name(列field1, field2, ...) values(值val1, val2, ...);
    valx为需要存入字段的值。
    例,往老师信息表添加数据
    

    update

    UPDATE 表 SET 列 = '新值' 【WHERE 条件语句】
    
    UPDATE 语句用来更新表中的某个列,如果不设定条件,则所有记录的这一列都被更新; 如果设定了条件,则符合条件的记录的这一列被更新, WHERE 子句被用来设定条件,
    

    delete

    DELETE FROM 表 【WHERE 条件语句】
    如果设定 WHERE 条件子句,则删除符合条件的数据记录;如果没有设定条件语句,则删除所有记录
    
    删除特定时间范围的记录
    delete from table_name where datetime(字段)<datetime("time str");
    # "time str" >>> 年月日时分秒,如"2021-01-16 10:00:00",或者"2021-01-15"
    # 删除表中时间早于特定时间的记录
    

    read

    a、查询输出所有数据记录
    select * from table_name;
    
    b、限制输出数据记录数量
    
    若数据库中的数据太多,全部返回可不行,可以限制返回的数量,还可以设定返回的起始位置
    select * from table_name limit val;
    
    c、升序输出数据记录
    select * from table_name order by field asc;
    
    d、降序输出数据记录
    select * from table_name order by field desc;
    
    e、条件查询
    select * from table_name where expression;
    
    IN (集合)
    select * from table_name where field in ('val1', 'val2', 'val3');
    
    BETWEEN 值1 AND 值2
    select * from table_name where field between val1 and val2;
    
    f、查询记录数目
    
    select count (*) from table_name;
    
    g、区分列数据
    select distinct field from table_name;
    有一些字段的值可能会重复出现,distinct去掉重复项,将列中各字段值单个列出。
    
    h、别名 SELECT 列 AS 别名,列 AS 别名 FROM
    
    可以给返回数据集中的某些列起一个比较直观的名字,比如把 Cost 改为"Price Of Car"
    
    
    
     
    
    I、条件查询 SELECT 列 FROM 表 【WHERE 条件语句】
    
    一般的条件语句都是大于、小于、等于之类的,这里有几个特别的条件语句
    
    LIKE
    
    ------------------------------
    
    LIKE 用通配符匹配字符串
    
    下划线 _ 匹配一个字符串
    
    百分号 % 匹配多个字符串
    
    LIKE 匹配字符串时不区分大小写
    
     
    
    
    
    GLOB
    
     
    
    J 区分 DISTINCT 列
    
    有一些字段的值可能会出现重复,比如订单表中,一个客户可能会有好几份订单,因此客户的名字会重复出现。
    
    到底有哪些客户下了订单呢?下面的语句将客户名字区分出来。
    
     
    
    
    
    k分组 GROUP BY 列
    
    分组和前面的区分有一点类似。区分仅仅是为了去掉重复项,而分组是为了对各类不同项进行统计计算。
    
    比如上面的例子,我们区分出 5 个客户,这 5 个客户一共下了 11 个订单,说明很多客户都下了不止一个订单。
    
    下面的语句统计每个客户在订单上总共花费了多少钱。
    
    
    
    这里 Sum 是 SQLite 内置的统计函数,在这个例子中用来求每个顾客的订单价格的和。
    
    统计结果也可以设定返回条件,但是不能用 WHERE 子句,而是用 HAVING 子句,如下例,返回订单总额大于 1000 的顾客。
    
    p.s. 关于时间的操作
    select * from table_name where datetime(字段)<datetime("time str");
    # 查询创建日期早于某时间的记录
    

    建立index

    建立索引
    当说数据表存在大量记录,索引有助于加快查找数据表速度。
    create index index_name on table_name(field);
    例,针对学生表stu_no字段,建立一个索引:
    create index student_index on student_table(stu_no);
    建立完成后,sqlite3在对该字段查询时,会自动使用该索引。
     
    删除数据表或索引
    drop table table_name;
    drop index index_name;
    
    

    sqlite3 数据类型

    NULL:标识一个NULL值
    INTERGER:整数类型
    REAL:浮点数
    TEXT:字符串
    BLOB:二进制数
    

    sqlite3存储数据的约束条件

    Sqlite常用约束条件如下:
    PRIMARY KEY - 主键:
    1)主键的值必须唯一,用于标识每一条记录,如学生的学号
    2)主键同时也是一个索引,通过主键查找记录速度较快
    3)主键如果是整数类型,该列的值可以自动增长
    NOT NULL - 非空:
    约束列记录不能为空,否则报错
    UNIQUE - 唯一:
    除主键外,约束其他列的数据的值唯一
    CHECK - 条件检查:
    约束该列的值必须符合条件才可存入
    DEFAULT - 默认值:
    列数据中的值基本都是一样的,这样的字段列可设为默认值
    

    导入数据

    .read 数据文件

    打开记事本,并将下列 SQL 语句复制到记事本中,保存为 test.sql ,在命令行环境中输入
    
    .read   test.sql
    
    即将所有的数据导入到 test.db 数据库中。
    
     
    
    BEGIN TRANSACTION;
    CREATE TABLE Cars(Id integer PRIMARY KEY, Name text, Cost integer);
    INSERT INTO Cars VALUES(1,'Audi',52642);
    INSERT INTO Cars VALUES(2,'Mercedes',57127);
    INSERT INTO Cars VALUES(3,'Skoda',9000);
    INSERT INTO Cars VALUES(4,'Volvo',29000);
    INSERT INTO Cars VALUES(5,'Bentley',350000);
    INSERT INTO Cars VALUES(6,'Citroen',21000);
    INSERT INTO Cars VALUES(7,'Hummer',41400);
    INSERT INTO Cars VALUES(8,'Volkswagen',21600);
    COMMIT;
    
    BEGIN TRANSACTION;
    CREATE TABLE Orders(Id integer PRIMARY KEY, OrderPrice integer CHECK(OrderPrice>0), 
                        Customer text);
    INSERT INTO Orders(OrderPrice, Customer) VALUES(1200, "Williamson");
    INSERT INTO Orders(OrderPrice, Customer) VALUES(200, "Robertson");
    INSERT INTO Orders(OrderPrice, Customer) VALUES(40, "Robertson");
    INSERT INTO Orders(OrderPrice, Customer) VALUES(1640, "Smith");
    INSERT INTO Orders(OrderPrice, Customer) VALUES(100, "Robertson");
    INSERT INTO Orders(OrderPrice, Customer) VALUES(50, "Williamson");
    INSERT INTO Orders(OrderPrice, Customer) VALUES(150, "Smith");
    INSERT INTO Orders(OrderPrice, Customer) VALUES(250, "Smith");
    INSERT INTO Orders(OrderPrice, Customer) VALUES(840, "Brown");
    INSERT INTO Orders(OrderPrice, Customer) VALUES(440, "Black");
    INSERT INTO Orders(OrderPrice, Customer) VALUES(20, "Brown");
    COMMIT;
    

    收缩数据库

    # 进入数据库
    sqlite3 db.xxx
    
    # 清空数据
    sqlite> vacuum;
    

    参考: https://www.cnblogs.com/senior-engineer/p/7028972.html
    更多参考:菜鸟教程-https://www.runoob.com/sqlite/sqlite-commands.html

  • 相关阅读:
    python分包写入文件,写入固定字节内容,当包达到指定大小时继续写入新文件
    java 封装及this 用法
    [效率提升] 记一次使用工具编辑正则表达式快速输出匹配结果
    java用星星符号打印出一个直角三角形
    java按行和列进行输出数据
    java 三种循环及注意事项
    数据的运算,求和,两数求最大,三数求最大,两数是否相等
    采用位异或方式将两个变量数值调换
    今天遇到一件开心事,在eclipse编写的代码在命令窗口中编译后无法运行,提示 “错误: 找不到或无法加载主类”
    定义 java 基本数据类型
  • 原文地址:https://www.cnblogs.com/davis12/p/14062371.html
Copyright © 2011-2022 走看看