zoukankan      html  css  js  c++  java
  • sqlite学习笔记未完成

    SQLite命令

    点命令

    使用.help可以获取点命令的清单

    命令 选项 描述
    .backup ?DB? FILE 备份 DB 数据库(默认是 "main")到 FILE 文件。
    .bail ON|OFF 发生错误后停止。默认为 OFF。
    .databases 列出数据库的名称及其所依附的文件。
    .dump ?TABLE? 以 SQL 文本格式转储数据库。
    如果指定了 TABLE 表,则只转储匹配 LIKE 模式的 TABLE 表。
    .echo ON|OFF 开启或关闭 echo 命令。
    .exit 退出 SQLite 提示符。
    .explain ON|OFF 开启或关闭适合于 EXPLAIN 的输出模式。
    如果没有带参数,则为 EXPLAIN on,即开启 EXPLAIN。
    .header(s) ON|OFF 开启或关闭头部显示。
    .help 显示消息。
    .import FILE TABLE 导入来自 FILE 文件的数据到 TABLE 表中。
    .indices ?TABLE? 显示所有索引的名称。
    如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表的索引。
    .load FILE ?ENTRY? 加载一个扩展库。
    .log FILE|off 开启或关闭日志。FILE 文件可以是 stderr(标准错误)/stdout(标准输出)。
    .mode MODE 设置输出模式,MODE 可以是下列之一:
    1. csv 逗号分隔的值
    2. column 左对齐的列
    3. html HTML 的 <table> 代码
    4. insert TABLE 表的 SQL 插入(insert)语句
    5. line 每行一个值
    6. list 由 .separator字符串分隔的值
    7. tabs 由 Tab 分隔的值
    8. tcl TCL 列表元素
    .nullvalue STRING 在 NULL 值的地方输出 STRING 字符串。
    .output FILENAME 发送输出到 FILENAME 文件。
    .output stdout 发送输出到屏幕。
    .print STRING... 逐字地输出 STRING 字符串。
    .prompt MAIN CONTINUE 替换标准提示符。
    .quit 退出 SQLite 提示符。
    .read FILENAME 执行 FILENAME 文件中的 SQL。
    .schema ?TABLE? 显示 CREATE 语句。
    如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表。
    .separator STRING 改变输出模式和 .import 所使用的分隔符。
    .show 显示各种设置的当前值。
    .stats ON|OFF 开启或关闭统计。
    .tables ?PATTERN? 列出匹配 LIKE 模式的表的名称。
    .timeout MS 尝试打开锁定的表 MS 毫秒。
    .width NUM NUM 为 "column" 模式设置列宽度。
    .timer ON|OFF 开启或关闭 CPU 定时器。
    sqlite> .databases
    main: E:\myfile\python\pycharm\test\sqlite3.db
    sqlite>
    sqlite> .dump book
    PRAGMA foreign_keys=OFF;
    BEGIN TRANSACTION;
    CREATE TABLE book(
            id   int primary key,
            sort int,
            name text,
            price real,
            category int,
            foreign key (category) references category(id) on update cascade on delete cascade
        );
    INSERT INTO book VALUES(2,3,'Python Intro',17.5,2);
    COMMIT;
    sqlite> 
    

    格式化输出

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

    SQLite语法

    语法 说明
    大小写 SQLite不区分大小写,但个别命令要区分,比如GLOB和glob是不相同的。
    注释
    1. 不能嵌套
    2. 以两个连续“-”开始,到下一个换行符或输入结束位置
    3. 以“/”开始,到“/”字符或输入结束
    语句 以关键字开始,以分号结束,常用关键字
    • select
    • insert
    • update
    • delete
    • alter
    • drop

    数据类型

    常用类型

    SQLite中,每一列、每个变量、每个表达式都有相关的数据类型。
    可以在创建表时使用这些数据类型。

    存储类 描述
    NULL 值是一个 NULL 值。
    INTEGER 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。
    REAL 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。
    TEXT 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
    BLOB 值是一个 blob 数据,完全根据它的输入存储。

    亲和(Affinity)类型

    亲和类型 描述
    TEXT
    NUMERIC
    INTEGER
    REAL
    NONE

    亲和类型及类型名称

    boolean数据类型

    SQLite没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)。

    Date与Time数据类型

    SQLite 没有一个单独的用于存储日期和/或时间的存储类,但 SQLite 能够把日期和时间存储为 TEXT、REAL 或 INTEGER 值。

    创建数据库

    创建

    PS E:\myfile\python\pycharm\test> sqlite3.exe test.db
    SQLite version 3.27.2 2019-02-25 16:06:06
    Enter ".help" for usage hints.
    sqlite> 
    sqlite> .databases
    main: E:\myfile\python\pycharm\test\test.db
    

    导出

    PS E:\myfile\python\pycharm\test> sqlite3 test.db .dump > test.db.sql
    PS E:\myfile\python\pycharm\test> cat test.db.sql
    PRAGMA foreign_keys=OFF;
    BEGIN TRANSACTION;
    COMMIT;
    PS E:\myfile\python\pycharm\test>
    

    还可以从.sql文件中恢复数据库
    $sqlite3 test.db < test.db.sql #注,该命令在window下不成功,原因不明。

    附加数据库

    PS E:\myfile\python\pycharm\test> sqlite3 sqlite3.db
    SQLite version 3.27.2 2019-02-25 16:06:06
    Enter ".help" for usage hints.
    sqlite> 
    sqlite> .database
    main: E:\myfile\python\pycharm\test\sqlite3.db
    sqlite> 
    sqlite> attach database 'test.db' as 'test';
    sqlite> 
    sqlite> .database
    main: E:\myfile\python\pycharm\test\sqlite3.db
    test: E:\myfile\python\pycharm\test\test.db
    sqlite>
    

    注意,main和temp这两个名称是保留的,所以不能被attach

    sqlite> attach database 'test.db' as 'temp';
    Error: database temp is already in use
    sqlite> 
    sqlite> attach database 'test.db' as 'main';
    Error: database main is already in use
    sqlite>
    

    分离数据库

    无法分离main和temp
    如果是内存中的数据库或临时数据库,detach后对应数据库将会被摧毁,内容将会丢失。

    sqlite>.databases
    seq  name             file
    ---  ---------------  ----------------------
    0    main             /home/sqlite/testDB.db
    2    test             /home/sqlite/testDB.db
    3    currentDB        /home/sqlite/testDB.db
    sqlite> 
    sqlite> DETACH DATABASE 'currentDB';
    sqlite> .databases
    seq  name             file
    ---  ---------------  ----------------------
    0    main             /home/sqlite/testDB.db
    2    test             /home/sqlite/testDB.db
    

    创建表

  • 相关阅读:
    深入c#的String类
    C#语法快速热身
    【BZOJ】1676: [Usaco2005 Feb]Feed Accounting 饲料计算
    【BZOJ】2056: gift? 高精度?
    【BZOJ】3036: 绿豆蛙的归宿
    【BZOJ】2321: [BeiJing2011集训]星器
    【VIJOS】P1401复制CS
    【BZOJ】2453: 维护队列&&【BZOJ】2120: 数颜色 二分+分块 双倍经验
    【BZOJ】3343: 教主的魔法
    【BZOJ】1452: [JSOI2009]Count 树状数组
  • 原文地址:https://www.cnblogs.com/gaiqingfeng/p/12870011.html
Copyright © 2011-2022 走看看