sqliteSQL基础

SQL基础

SQLite 数据库简介

SQLite 是一个开源的、 内嵌式的关系型数据库, 第一个版本诞生于 2000 年 5 月, 目前最高版本为 SQLite3。

下载地址: https://www.sqlite.org/download.html

菜鸟教程 : https://www.runoob.com/sqlite/sqlite-tutorial.html

Linux 下 字符界面

sudo apt-get install sqlite3

Linux 下 图形界面

sudo apt-get install sqlitebrowser

该教程没有使用这个, 因为我下载时找不到

sudo apt-get install sqliteman

SQLite 特性:

  • 零配置
  • 灵活
  • 可移植
  • 自由的授权
  • 紧凑
  • 可靠
  • 简单
  • 易用

SQL 语句基础

SQL 是一种结构化查询语言(Structured Query Language) 的缩写, SQL 是一种专门用来与数据库通信的语言。

SQL 目前已成为应用最广的数据库语言。

SQL 已经被众多商用数据库管理系统产品所采用, 不同的数据库管理系统在其实践过程中都对 SQL 规范作了某些编改和扩充。 故不同数据库管理系统之间的 SQL 语言不能完全相互通用。

SQLite 数据类型 :

一般数据采用固定的静态数据类型, 而 SQLite 采用的是动态数据类型, 会根据存入值自动判断。

SQLite 具有以下五种基本数据类型 :

  • integer: 带符号的整型(最多 64 位) 。
  • real: 8 字节表示的浮点类型。
  • text: 字符类型, 支持多种编码(如 UTF-8、 UTF-16) , 大小无限制。
  • blob: 任意类型的数据, 大小无限制。
  • BLOB(binary large object)二进制大对象, 使用二进制保存数据
  • null: 表示空值

对数据库文件 SQL 语句:

创建、 打开数据库:

当*.db 文件不存在时, sqlite 会创建并打开数据库文件。

当*.db 文件存在时, sqlite 会打开数据库文件。

sqlite3 test.db

image-20200809124512574

SQL 的语句格式:

所有的 SQL 语句都是以分号结尾的, SQL 语句不区分大小写。 两个减号“–” 则代表注释。

关系数据库的核心操作:

  • 创建、 修改、 删除表
  • 添加、 修改、 删除行
  • 查表

创建表: create 语句

语法:

create table 表名称 (列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, ...);

创建一表格该表包含 3 列, 列名分别是: “id” 、 “name” 、 “addr” 。

create table cpucode (id integer, name text, addr text);

image-20200809125437496

创建表: create 语句 (设置主键)

在用 sqlite 设计表时, 每个表都可以通过 primary key 手动设置主键, 每个表只能有一个主键, 设置为主键的列数据不可以重复。

语法:

create table 表名称 ( 列名称1 数据类型 primary key, 列名称2 数据类型,列名称3 数据类型, ...);
create table test (id integer primary key, name text, addr text);

image-20200809124801066

查看表: .table

查看数据表的结构:

.schema[表名]
.tables

image-20200809124825297

.schema

image-20200809125503551

退出数据库命令

.quit
.exit

image-20200809125554172

图形化的软件查看表的结构 :

sqlitebrowser test.db

image-20200809125700156

image-20200809125806604

修改表: alter 语句

在已有的表中添加删除列以及修改表名。(添加、 删除-sqlite3 暂不支持、 重命名)

语法 :

alter table 表名 add 列名 数据类型;
alter table cpucode add sex text;

image-20200809130120229

语法: (alter 修改表名)

alter table 表名 rename to 新表名;
.tables
alter table cpucode rename to new_cpucode;
.tables

image-20200809130242617

删除表: drop table 语句

用于删除表(表的结构、 属性以及表的索引也会被删除)

语法:

drop table 表名称;
drop table new_cpucode;

image-20200809131750952

插入新行: insert into 语句(全部赋值)

给一行中的所有列赋值。

当列值为字符串时要加上‘ ’ 号。

语法:

insert into 表名 values (列值 1, 列值 2, 列值 3, 列值 4, ...);
create table cpucode (id integer, name text, addr text);

image-20200809132249261

insert into cpucode values (1, 'code', 'changsha');

image-20200809132551917

sqlitebrowser test.db

image-20200809132524349

image-20200809132446540

插入新行: insert into 语句部分赋值)

给一行中的部分列赋值

语法:

insert into 表名 (列名 1, 列名 2, ...) values (列值 1, 列值 2, ...);
insert into cpucode (id, name) values (1, 'cpu');

image-20200809133320623

sqlitebrowser test.db

image-20200809133413766

image-20200809133347328

修改表中的数据: update 语句

使用 where 根据匹配条件, 查找一行或多行, 根据查找的结果修改表中相应行的列值(修改哪一列由列名指定)。

语法:

update 表名 set 列 1 = 值1 [, 列2 = 值2, ...] [匹配条件];

匹配: where 子句

where 子句用于规定匹配的条件。

操作数描述
=等于
<>不等于
>大于
<小于
>=大于等于
<=小于等于

匹配条件语法:

where 列名 操作符 列值
update cpucode set id=2, addr='shenzhen' where name='cpu';

image-20200809140409888

sqlitebrowser test.db

image-20200809140353950

当表中有多列、 多行符合匹配条件时会修改相应的多行。 当匹配条件为空时则匹配所有。

image-20200809140325506

当表中有多列、 多行符合匹配条件时会修改相应的多行 :

查询

select * from cpucode;

image-20200810095855079

插入

insert into cpucode values (3, 'test', 'changsha');

查询

select * from cpucode;

image-20200810095748022

修改

update cpucode set name='cpu' where addr='changsha';

image-20200810111341800

查看

select * from cpucode;

当匹配条件为空时则匹配所有 :

修改 :

update cpucode set addr='shenzhen';

image-20200810111523513

删除表中的数据: delete 语句

使用 where 根据匹配条件, 查找一行或多行, 根据查找的结果删除表中的查找到的行。

当表中有多列、 多行符合匹配条件时会删除相应的多行。

语法:

delete from 表名 [匹配条件];

删除

delete from cpucode where name='cpu';

查看

select * from cpucode;

image-20200810112210025

insert into cpucode values (1, 'code', 'changsha');
insert into cpucode values (2, 'cpu', 'shenzhen');
insert into cpucode values (3, 'test', 'beijing');

image-20200810112452676

查询: select 语句

用于从表中选取数据, 结果被存储在一个结果表中(称为结果集) 。

星号(*) 是选取所有列的通配符

语法:

 select * from 表名 [匹配条件];
select 列名 1[, 列名 2, ...] from 表名 [匹配条件];
select * from cpucode

image-20200810112826421

查看

select * from cpucode where id=2;

image-20200810113213821

select name from cpucode;

image-20200810113232766

select name from cpucode where id = 1;

image-20200810113321806

列名显示

.headers on

左对齐

.mode column
select * from cpucode where id = 3;

image-20200810113454155

匹配条件语法

数据库提供了丰富的操作符配合 where 子句实现了多种多样的匹配方法。

  • in 操作符
  • and 操作符
  • or 操作符
  • between and 操作符
  • like 操作符
  • not 操作符

in 允许我们在 where 子句中规定多个值。

匹配条件语法:

where 列名 in (列值 1, 列值 2, ...)
select * from 表名 where 列名 in (值 1, 值 2, ...);
select 列名 1[,列名 2,...] from 表名 where 列名 in (列值 1, 列值 2, ...);
select * from cpucode where id in (1, 2);

image-20200810113901131

select name from cpucode where id in(2, 3);

image-20200810113915934

and 可在 where 子语句中把两个或多个条件结合起来(多个条件之间是与的关系) 。

匹配条件语法:

where 列 1 = 值 1 [and 列 2 = 值 2 and ...]
select * from 表名 where 列 1 = 值 1 [and 列 2 = 值 2 and ...];
select 列名 1[, 列名 2, ...] from 表名 where 列 1 = 值 1 [and 列 2 = 值 2 and ...];
select * from cpucode where     id =1 and addr = 'changsha';

image-20200810114705475

select addr from cpucode where id = 2 and name = 'cpu';

image-20200810114823444

or 可在 where 子语句中把两个或多个条件结合起来(多个条件之间是或的关系) 。

匹配条件语法:

where 列 1 = 值 1 [or 列 2 = 值 2 or ...]
select * from 表名 where 列 1 = 值 1 [or 列 2 = 值 2 or ...];
select 列名 1[,列名 2,...] from 表名 列 1 = 值 1 [or 列 2 = 值 2 or ...];
select * from cpucode where id = 1 or addr = 'beijing';

image-20200810115842372

select name from cpucode where id = 3 or addr = 'shenzhen';

image-20200810115958013

between A and B 会选取介于 A、 B 之间的数据范围。 这些值可以是数值、 文本或者日期。

匹配字符串时会以 ascii 顺序匹配。

不同的数据库对 between A and B 操作符的处理方式是有差异的。

  • 有些数据库包含 A 不包含 B。
  • 有些包含 B 不包含 A
  • 有些既不包括 A 也不包括 B。
  • 有些既包括 A 又包括 B

匹配条件语法:

where 列名 between A and B
select * from 表名 where 列名 between A and B;
select 列名 1[,列名 2,...] from 表名 where 列名 between A and B;
select * from cpucode where id between 1 and 3;

image-20200810120415025

select * from cpucode where addr between 'a' and 'f';

image-20200810120425867

like 用于模糊查找

匹配条件语法:

若列值为数字 , 相当于列名=列值

若列值为字符串 , 可以用通配符“ % ” 代表缺少的字符(一个或多个) 。

where 列名 like 列值
select * from cpucode where id like 2;

image-20200810120638870

select * from cpucode where name like '%u%';

image-20200810120653093

not 可取出原结果集的补集

匹配条件语法:

where 列名 not in 列值等
where 列名 not in (列值 1, 列值 2, ...)
where not (列 1 = 值 1 [and 列 2 = 值 2 and ...])
where not (列 1 = 值 1 [or 列 2 = 值 2 or ...])
 where 列名 not between A and B
where 列名 not like 列值
select * from cpucode where id not in (1);

image-20200810123016883

select * from cpucode where addr not like '%zhen';

image-20200810123116343

order by 语句

根据指定的列对结果集进行排序。

默认按照升序对结果集进行排序, 可使用 desc 关键字按照降序对结果集进行排序。

升序

select * from 表名 order by 列名;

降序

select * from 表名 order by 列名 desc;
select * from cpucode order by name;

image-20200810123322828

select * from cpucode order by id;

image-20200810123351083

select * from cpucode order by addr;

image-20200810123412496

select * from cpucode order by id desc;

image-20200810123337554

事务

事务(Transaction) 可以使用 BEGIN TRANSACTION 命令或简单的 BEGIN 命令来启动。 此类事务通常会持续执行下去, 直到遇到下一个 COMMITROLLBACK 命令。 不过在数据库关闭或发生错误时, 事务处理也会回滚。 以下是启动一个事务的简单语法:

在 SQLite 中, 默认情况下, 每条 SQL 语句自成事务。

begin: 开始一个事务, 之后的所有操作都可以取消

commit: 使 begin 后的所有命令得到确认。

rollback: 取消 begin 后的所有操作。

begin;delete from cpucode;rollback;select * from cpucode;

image-20200810123809245

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WHAT - package.json 解释

目录 一、前言二、介绍2.1 package.json 文件示例2.2 关键字段2.3 常用命令2.4 自定义脚本 三、element-plus 完整示例3.1 main 和 module1. main 字段2. module 字段3. 综合示例 3.2 types1. 示例2. TypeScript 类型定义文件的作用3. 类型定义文件示例4. 发布带有类型定义的包…

Redis相关详解

什么是 Redis&#xff1f;它主要用来什么✁&#xff1f; Redis&#xff0c;英文全称是 Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源✁使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化✁日志型、Key-Value 数据库&#xff…

Elasticsearch 认证模拟题 -2

一、题目 有一个索引 task3&#xff0c;其中有 fielda&#xff0c;fieldb&#xff0c;fieldc&#xff0c;fielde 现要求对 task3 重建索引&#xff0c;重建后的索引新增一个字段 fieldg 其值是fielda&#xff0c;fieldb&#xff0c;fieldc&#xff0c;fielde 的值拼接而成。 …

css :hover的使用

参考未整理 即鼠标移入类名为btn的元素时&#xff0c;她的子元素i样式发生改变 自身的样式也发生改变 &#xff0c;如果他有更多的子元素也可以这样写

机器学习笔记(1):sklearn是个啥?

sklearn 简介 Sklearn是一个基于Python语言的开源机器学习库。全称Scikit-Learn&#xff0c;是建立在诸如NumPy、SciPy和matplotlib等其他Python库之上&#xff0c;为用户提供了一系列高质量的机器学习算法&#xff0c;其典型特点有&#xff1a; 简单有效的工具进行预测数据分…

自动化安装Nginx

1. 指定版本号和用户&#xff1b; 2. 确定安装目录&#xff1b; 3. 确定安装编译模块&#xff1b; 4. 安装相关依赖&#xff1b; 5. 下载源码包并解压&#xff1b; 6. 编译安装&#xff1b; 7. 文件授权及临时文件清理。 #!/bin/bash# 用户输入的Nginx版本号NGIN…

VMware虚拟机安装Ubuntu-Server版教程(超详细)

目录 1. 下载2. 安装 VMware3. 安装 Ubuntu3.1 新建虚拟机3.2 安装操作系统 4. SSH方式连接操作系统4.1 好用的SSH工具下载&#xff1a;4.2 测试SSH连接 5. 开启root用户登录5.1 设置root用户密码5.2 传统方式切换root用户5.3 直接用root用户登录5.4 SSH启用root用户登录 6. 安…

CV每日论文--2024.5.31

1、X-VILA: Cross-Modality Alignment for Large Language Model 中文标题&#xff1a;X-VILA: 跨模态对齐的大型语言模型 简介&#xff1a;我们提出了X-VILA,这是一种全模态模型,旨在通过整合图像、视频和音频模态来扩展大型语言模型(LLM)的能力。X-VILA通过将模态特定的编码…

Spring Cache自定义序列化解决乱码问题

Spring Cache数据缓存到 Redis中的 value是乱码问题&#xff08;包含日期格式转换&#xff09;&#xff0c;主要是因为序列化方式导致的。 Spring Cache使用 Redis缓存管理器时&#xff0c;默认 value使用的是 JDK序列化值的方式&#xff0c;所以导致缓存的 value乱码的问题。 …

【OceanBase诊断调优】—— 执行内存占用高问题汇总

执行内存占用高问题经常在不同环境中遇到, 在内存较大的租户场景下, 问题可能暴露不明显, 但小规格场景下, 如果执行内存占用非常高, 往往有上 G 甚至几十G 的情况, 可能导致整个租户无内存使用。本文汇总执行内存占用高问题。 获取内存高的 mod 的代码 backtrace 方式 对于执…

构建坚不可摧的Web安全防线:深入剖析二阶注入与全面防御策略

引言 在数字化时代&#xff0c;数据安全是企业和个人最为关注的问题之一。网络攻击手段层出不穷&#xff0c;其中SQL注入攻击尤为狡猾&#xff0c;它允许攻击者通过Web应用的漏洞对数据库进行非法操作。更隐蔽的是二阶注入攻击&#xff0c;它不仅威胁当前操作&#xff0c;还能…

音视频开发—FFmpeg打开麦克风,采集音频数据

文章目录 1.使用命令行实现采集PCM数据2.使用代码实现3.播放PCM4.PCM转换为WAV 1.使用命令行实现采集PCM数据 确保你的系统有FFmpeg安装。你可以通过在终端运行ffmpeg -version来检查是否已安装。 找出你的麦克风设备名。在Linux中&#xff0c;你可以使用arecord -l命令列出所…

通过强化学习彻底改变大型数据集特征选择

文章目录 一、说明二、强化学习&#xff1a;特征选择的马尔可夫决策问题三、用于使用强化学习进行特征选择的 python 库3.1. 数据预处理3.2. 安装和导入FSRLearning库 四、结论和参考文献 一、说明 了解强化学习如何改变机器学习模型的特征选择。通过实际示例和专用的 Python 库…

【Python】解决Python错误报错:IndexError: tuple index out of range

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

ROS2从入门到精通2-1:launch多节点启动与脚本配置

目录 0 专栏介绍1 ROS2的启动脚本优化2 ROS2多节点启动案例2.1 C架构2.2 Python架构 3 其他格式的启动文件3.1 .yaml启动3.2 .xml启动 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS2进行实际项目的…

采用java18+vue语言+springboot开发的家政上门服务平台源码,(平台管理端+用户端+服务端全套源码)

采用java18vue语言springboot开发的家政上门服务平台源码&#xff0c;&#xff08;平台管理端用户端服务端全套源码&#xff09; 家政管理平台系统是运用现代计算机和网络技术&#xff0c;集信息网、服务网为一体&#xff0c;对社区家政需求信息汇集整理、综合处理&#xff0c;…

【无人机】基于排队论系统、三角模型和马尔可夫链构建航空交通系统综合模型附matlab代码

目录 研究背景:研究目标:研究思路:研究内容:研究步骤:代码框架研究背景: 随着无人机技术的不断发展和应用,无人机在航空交通系统中的角色变得越来越重要。然而,随着无人机数量的增加,如何高效地管理和调度无人机的交通成为一个挑战。为了解决这个问题,研究者们开始利…

GPT-4o:未来语言模型的典范

​​​​​​​在人工智能的快速发展中&#xff0c;GPT-4o作为GPT系列的最新成员&#xff0c;以其卓越的性能和创新功能&#xff0c;成为了业界关注的焦点。 技术架构 GPT-4o假设拥有1000亿个参数&#xff0c;是GPT-4参数数量的两倍。这一庞大的模型规模&#xff0c;使得GPT-4…

重生之 SpringBoot3 入门保姆级学习(11、日志的进阶使用)

重生之 SpringBoot3 入门保姆级学习&#xff08;11、日志的进阶使用&#xff09; 3.2.4 文件输出3.2.5 日志文档的归档与切割 3.2.4 文件输出 配置 application.properties # 日志文件名 如果不写路径默认就是在项目根路径建立 demo.log 文件 推荐写法 D:\\demo.log 路径 文…

OSError: [Errno 117] Structure needs cleaning

一 问题描述 OSError: [Errno 117] Structure needs cleaning: /tmp/pymp-wafeatri 我重新使用SSH登录也会提示这个类似问题 二 解决方法 2.1 尝试删除报错的文件 &#xff08;想直接看最终解决方法的可忽略此处&#xff09; sudo rm -rf /tmp/pymp-wafeatri 此种方法只能保证…