建网站 备案,网页设计代码含js,上海小学网站建设招标,做二手车有哪些网站有哪些手续文章目录 前言SQL的概念与表格相关的操作i.创建表格#xff08;增#xff09;ii 删除表格#xff08;删#xff09;iii 更改表格#xff08;改#xff09;iv 查询表格#xff08;查#xff09; 与记录相关的操作i 插入记录ii 删除记录iii 查询记录iv 修改记录 Linux中使… 文章目录 前言SQL的概念与表格相关的操作i.创建表格增ii 删除表格删iii 更改表格改iv 查询表格查 与记录相关的操作i 插入记录ii 删除记录iii 查询记录iv 修改记录 Linux中使用sqlite3 前言
SQLite是一款轻型的数据库是遵守ACID的关系型数据库管理系统。
SQLite 非常适合用于嵌入式系统、物联网设备、移动应用程序和客户端应用程序它不需要服务器简单易用。
SQL的概念
SQLite3是一个数据库而SQL是一种编程语言。我们需要使用SQL来操作SQLite3数据库。
SQL语言包括四种主要程序设计语言类别的语句数据定义语言(DDL)数据查询语言(DQL)数据操作语言(DML)数据控制语言(DCL)。
SQL语言中完成核心功能的9个动词
SQL功能动词数据定义DDCreate、Drop删除、Alter修改数据查询DQSelect数据操纵DMInsert插入、Update更新、Delete删除数据控制DCGrant授权、Revoke撤销授权
SQLite3 是一个 轻量级的嵌入式数据库系统它仅实现了 SQL 标准的一个子集。即SQLite3中只能使用部分SQL语句而且不支持数据控制语句(DCL)。
SQLITE3支持的 DML关键字有 CREATE:创建一个新的表一个表的视图或者数据库中的其他对象ALTER:修改数据库中的某个已有的数据库对象比如一个表DROP删除整个表或者表的视图或者数据库中的其他对象 SQLITE3支持的 DDL关键字有 INSERT:创建一条记录UPDATE:修改记录DELETE:删除记录 SQLITE3支持的 DQL关键字有 SELECT:从一个或多个表中检索某些记录
与表格相关的操作
i.创建表格增
基本语法
CREATE TABLE IF NOT EXISTS table_name (column1_name data_type [constraints],column2_name data_type [constraints],...columnN_name data_type [constraints]
);例子
-- 创建一个名为 users 的表格
CREATE TABLE IF NOT EXISTS users (user_id INT PRIMARY KEY,username TEXT NOT NULL,email TEXT UNIQUE,password TEXT NOT NULL
);CREATE TABLE: 创建表格的关键字。 IF NOT EXISTS: 可以避免出现添加已存在数据表的SQL错误信息table_name: 要创建的表格的名称。column_name: 列的名称。data_type: 数据类型例如 INT, TEXT, REAL, BLOB 等。constraints: 约束例如 PRIMARY KEY, UNIQUE, NOT NULL, FOREIGN KEY 等。
列字段相关的配置
每个列字段都有对应的配置如列名称列数据类型类约束列默认值等。列配置的具体内容如下 列的数据类型 INT: 整数。TEXT: 文本字符串。REAL: 浮点数。BLOB: 二进制数据。专门用于存放图像、视频动画和其他类型的文件等。DATE: 日期。DATETIME: 日期和时间。 列的默认值 DEFAULT 关键字用于为表格中的列设置默认值。当插入新记录时注意这不是创建表时存在的默认值如果该列的值没有被明确指定则会自动使用默认值。 CREATE TABLE table_name ( column_name data_type DEFAULT default_value, ... ); DEFAULT: 设置默认值的关键字。 default_value: 默认值可以是常量、表达式、函数等 列字段的约束 PRIMARY KEY: 主键用于唯一标识每条记录。 在数据表中能够唯一识别记录的字段都会被人们设置为主键如“学号”字段。 当某个字段被设置为主键后该字段中就不能再有重复值也不能有空值数据库管理系统将强制执行这一规则这就是主键约束。FOREIGN KEY: 外键用于建立两个表格之间的关系。 列的索引略读 索引 (INDEX)定义索引用于提高查询效率。除表之外索引是大型数据库系统中最重要的对象之一索引是一种树形结构如果使用正确的话可以减少定位和查询数据所需的IO操作。 索引的用途 索引类似于书籍的目录它让数据库系统不必扫描整个表就能快速定位到需要的数据行。 如果一个查询的 WHERE 子句中包含了索引列数据库系统可以快速地找到匹配的行从而提高查询速度。 索引的创建需要消耗磁盘空间和一些额外的维护成本但是对查询速度的提升通常是值得的。 如何创建索引 使用 CREATE INDEX 语句来创建索引。 以下是 SQLite 中创建索引的语法 CREATE INDEX 索引名 ON 表名 (列名1, 列名2, ...); 索引名: 为索引取一个名称。 表名: 要为其创建索引的表。 列名1, 列名2, ...: 要索引的列。 多个列可以同时索引复合索引提高多条件查询的效率。 示例 假设有一个名为 products 的表包含 id、name 和 price 列。 你想在 name 列上创建索引 CREATE INDEX idx_product_name ON products (name); 或者你想在 name 和 price 列上创建复合索引 CREATE INDEX idx_product_name_price ON products (name, price);
ii 删除表格删
使用drop删除表会将表彻底的删除掉包括表结构和表数据。
DROP TABLE table_name;例子
-- 删除一个名为 users 的表格
DROP TABLE users;用户若只是想删除表的数据 可以通过 删除记录的SQL语句 DELETE FROM 表名; 来实现相同的相关
iii 更改表格改
SQLite只支持部分的SQL更改表格的语句。支持的操作有
修改表名添加列
SQLite 不直接支持的修改表结构的操作有
删除列 SQLite 不直接支持删除列。 要删除列你需要创建一个新的表只包含你想要保留的列然后将数据从旧表复制到新表最后删除旧表并将新表改名为旧表的名称。修改主键: SQLite 不直接支持修改主键。 通常需要创建新的表添加新的主键并复制数据。 修改表名SQLite支持
ALTER TABLE old_table_nameRENAME TO new_table_name;例子
-- 名为 users_new 的表格修改名字为“users”
ALTER TABLE users_new RENAME TO users;old_table_name要修改的表格的旧名称。new_table_name要修改的表格的新名称。 添加列SQLite支持
ALTER TABLE table_name ADD column_name data_type [column_attributes];例子
-- 名为 users 的表格增加一列列名称为job 列数据类型为TEXT约束为NOT NULL默认值为 default_value
ALTER TABLE users ADD job TEXT NOT NULL DEFAULT default_value;table_name要修改的表格名。column_name要添加的列名。data_type新列的数据类型。column_attributes可选的列属性例如 NOT NULL、DEFAULT 等。 删除列SQLite间接支持
SQLite虽然不可以直接通过DROP来删除列但是却可通过间接的方法实现如下。
假设你有一个名为 users 的表包含 id (INTEGER) 和 name (TEXT) 列。
ALTER TABLE users ADD job TEXT NOT NULL DEFAULT default_value;删除 job 列 (间接方法):
-- 创建一个新的表不包含 email 列
CREATE TABLE users_new (id INTEGER, name TEXT);-- 将数据从旧表复制到新表
INSERT INTO users_new SELECT id, name FROM users;-- 删除旧表
DROP TABLE users;-- 将新表改名为旧表的名称
ALTER TABLE users_new RENAME TO users;iv 查询表格查
在linux系统中使用sqlite3命令进入数据库后可以通过.schema来查看所有的表格信息
sqlite.schema
CREATE TABLE IF NOT EXISTS users (user_id INT PRIMARY KEY,username TEXT NOT NULL,email TEXT UNIQUE,password TEXT NOT NULL
);
您可以使用 SQLIte 命令中的 .tables 命令来验证表是否已成功创建该命令用于列出附加数据库中的所有表。
sqlite.tables
users 与记录相关的操作
i 插入记录
在 SQLite 数据库中用户可以使用 INSERT 语句来添加新的记录到表中。 INSERT 语句有多种形式取决于你如何指定要插入的值。
指定所有列的值:
这是最常用的方法你需要指定表中的每一列的值并按照列的顺序排列。
INSERT INTO 表名 (列名1, 列名2, 列名3, ...) VALUES (值1, 值2, 值3, ...);例子
假设你有一个名为 users 的表包含 id (INTEGER), name (TEXT), age (INTEGER) 列。 要添加一个新的用户记录
INSERT INTO users (id, name, age) VALUES (1, John Doe, 30);表名: 要插入记录的表名。列名1, 列名2, 列名3, …: 表中的列名必须与 VALUES 子句中的值一一对应。值1, 值2, 值3, …: 要插入的值数据类型必须与相应的列匹配。
省略列名 (自动推断):
如果你要为表中的所有列都赋值你可以省略列名只需要提供值即可。 但是值的顺序必须与表中列的顺序一致。
INSERT INTO 表名 VALUES (值1, 值2, 值3, ...);示例 (延续上例):
INSERT INTO users VALUES (2, Jane Doe, 25);使用默认值:
如果你想使用列的默认值如果列定义了默认值你可以省略该列的值。 但是你必须至少提供一个列的值。
示例 (假设 age 列有默认值 20):
INSERT INTO users (id, name) VALUES (3, Peter Pan);插入多行记录:
你可以使用单一 INSERT 语句插入多行记录
INSERT INTO 表名 (列名1, 列名2, ...)
VALUES (值1, 值2, ...),(值3, 值4, ...),(值5, 值6, ...);省略列名也可以。
INSERT INTO 表名
VALUES (值1, 值2, ...),(值3, 值4, ...),(值5, 值6, ...);示例
INSERT INTO users (id, name, age)
VALUES (4, Alice, 28),(5, Bob, 35);注意事项
数据类型匹配: 确保你提供的值与表中列的数据类型匹配。 否则插入操作可能会失败。主键冲突: 如果你有主键约束确保插入的主键值是唯一的。 否则插入操作会失败并返回错误。自动递增: 如果你的表中有一列定义为 AUTOINCREMENT则该列的值会自动生成。 你不需要在 INSERT 语句中提供该列的值。事务处理: 如果你要插入多行记录或者需要将插入操作与其他数据库操作组合在一起建议使用事务处理 (BEGIN TRANSACTION, COMMIT, ROLLBACK) 来确保数据的一致性。
ii 删除记录
在 SQLite 数据库中用户可以使用 DELETE 语句来删除表中的记录。 DELETE 语句的基本语法如下
DELETE FROM 表名
WHERE 条件;DELETE FROM 表名: 指定要删除记录的表名。 WHERE 条件: 指定删除哪些记录。 这部分是必须的否则会删除表中的所有记录 条件可以使用各种比较运算符, !, , , , AND 和 OR 运算符组合条件以及其他 SQL 函数如LIKEBETWEEN xx AND xx。 具体的运用请看示例。
示例
假设你有一个名为 users 的表包含 id、name 和 email 列。
删除 id 为 1 的记录:
DELETE FROM users
WHERE id 1;删除 name 为 ‘John Doe’ 的记录:
DELETE FROM users
WHERE name John Doe;删除 email 包含 ‘example.com’ 的记录:
DELETE FROM users
WHERE email LIKE %example.com%;删除 id 在 1 到 5 之间的记录注意这是闭区间包含了id1和id5的记录:
DELETE FROM users
WHERE id BETWEEN 1 AND 5;删除多条件: 删除 id 为 1 并且 name 为 ‘Alice’ 的记录:
DELETE FROM users
WHERE id 1 AND name Alice;删除全部记录
DELETE FROM users;重要提示 谨慎使用 DELETE 语句 没有 WHERE 子句的 DELETE 语句会删除表中的所有记录。 在执行 DELETE 语句之前务必仔细检查你的 WHERE 子句确保它只删除你想要删除的记录。 备份数据库: 在执行重要的 DELETE 操作之前最好先备份你的数据库以防万一发生错误。 事务处理: 对于多个 DELETE 操作或与其他操作一起进行 DELETE 操作建议使用事务处理 (BEGIN TRANSACTION, COMMIT, ROLLBACK) 来确保数据的一致性。 例如
BEGIN TRANSACTION;
DELETE FROM users WHERE id 1;
DELETE FROM orders WHERE user_id 1;
COMMIT; -- or ROLLBACK;iii 查询记录
在 SQLite 数据库中用户可以使用 SELECT 语句来查询表中的记录。 SELECT 语句有很多种形式可以满足各种查询需求。
查询所有列的所有记录:
这是最简单的查询方式它会返回表中所有列的所有记录。
SELECT * FROM 表名;例如如果你的表名为 users则查询语句为
SELECT * FROM users;查询指定的列:
你可以选择只查询表中的某些列而不是所有列。
SELECT 列名1, 列名2, ... FROM 表名;例如要查询 users 表中的 name 和 email 列
SELECT name, email FROM users;使用 WHERE 子句过滤记录:
你可以使用 WHERE 子句来过滤记录只返回满足特定条件的记录。
SELECT * FROM 表名 WHERE 条件;例如要查询 users 表中 id 为 1 的记录
SELECT * FROM users WHERE id 1;用户可以使用各种比较运算符, !, , , , AND 和 OR 运算符组合条件以及 LIKE 运算符进行模式匹配。 查询 age 大于 25 的用户SELECT * FROM users WHERE age 25; 查询 name 包含 “John” 的用户SELECT * FROM users WHERE name LIKE %John%; 查询 age 大于 25 且 email 包含 “example.com” 的用户SELECT * FROM users WHERE age 25 AND email LIKE %example.com%;
使用 ORDER BY 子句排序记录:
用户可以使用 ORDER BY 子句来对查询结果进行排序。
SELECT * FROM 表名 ORDER BY 列名 [ASC|DESC];ASC 表示升序排序默认DESC 表示降序排序。
例如要按 age 升序排序查询结果
SELECT * FROM users ORDER BY age ASC;要按 name 降序排序
SELECT * FROM users ORDER BY name DESC;使用 LIMIT 子句限制返回的记录数: 你可以使用 LIMIT 子句来限制返回的记录数。
SELECT * FROM 表名 LIMIT n;n 表示要返回的记录数。
例如要只返回前 10 条记录
SELECT * FROM users LIMIT 10;你还可以指定起始位置和返回的记录数
SELECT * FROM 表名 LIMIT m, n;m 表示起始位置从 0 开始n 表示返回的记录数。 例如返回从第 5 条记录开始的 10 条记录
SELECT * FROM users LIMIT 4, 10;使用 OFFSET 子句 (与LIMIT配合使用): OFFSET 用于跳过指定数量的行数之后才开始返回结果常与 LIMIT 子句一起使用。
SELECT * FROM 表名 LIMIT n OFFSET m;这些是 SQLite 中 SELECT 语句的一些基本用法你可以根据实际需要组合使用这些功能来实现更复杂的查询。 记住在编写复杂查询时使用括号来明确操作的优先级。
使用DISTINCT去除重复的信息 DISTINCT 关键字用于在 SQL 查询结果中去除重复的行。 它只返回唯一的值。 DISTINCT 放在要返回的列的列表的前面。
SELECT DISTINCT 列名1, 列名2, ...
FROM 表名
[WHERE 条件];DISTINCT: 关键字表示只返回唯一的值。列名1, 列名2, ...: 要选择的列。 如果省略则表示对所有列进行去重。FROM 表名: 指定要查询的表。WHERE 条件 (可选): 用于过滤记录在去除重复行之前进行筛选。
前面介绍了SELECT语句最基本的语法格式,实际上SELECT语句的完整语法格式要比其复杂得多。
下面将经常用到的带有主要子句的语法格式归纳如下
SELECT [DISTINCTIALL] select list
FROM table source
[WHERE search condition]
[GROUPBY group_by_expression]
[HAVING searching_condition]
[ORDER BY order_expression[ASC|DESC]]假设SELECT语句带有所有的子句则其执行顺序如下 1FROM 子句。 2WHERE 子句。 3GROUP BY 子句。 4HAVING 子句。 5SELECT 子句。 6ORDER BY 子句
iv 修改记录
在 SQLite 数据库中用户可以使用 UPDATE 语句来修改表中的记录。 UPDATE 语句的基本语法如下
UPDATE 表名
SET 列名1 新值1, 列名2 新值2, ...
WHERE 条件;UPDATE 表名: 指定要修改记录所在的表名。SET 列名1 新值1, 列名2 新值2, ...: 指定要修改的列以及它们的新值。 可以用逗号分隔多个列和值。WHERE 条件: 指定要修改哪些记录。 这部分是必须的否则会更新表中的所有记录 条件可以使用各种比较运算符, !, , , , AND 和 OR 运算符组合条件以及其他 SQL 函数。
示例
假设你有一个名为 users 的表包含 id、name、email 和 age 列。
修改 id 为 1 的用户的 name 和 age:
UPDATE users
SET name John Doe Updated, age 35
WHERE id 1;修改 email 包含 ‘example.com’ 的用户的 age:
UPDATE users
SET age 40
WHERE email LIKE %example.com%;修改多个列多条件更新: 修改 id 为 2 并且 name 为 ‘Jane Doe’ 的用户的 email 和 age
UPDATE users
SET email jane.doe.updatedexample.com, age 30
WHERE id 2 AND name Jane Doe;注意点 谨慎使用 UPDATE 语句 没有 WHERE 子句的 UPDATE 语句会更新表中的所有记录。 在执行 UPDATE 语句之前务必仔细检查你的 WHERE 子句确保它只更新你想要更新的记录。 备份数据库: 在执行重要的 UPDATE 操作之前最好先备份你的数据库以防万一发生错误。 事务处理: 对于多个 UPDATE 操作或与其他操作一起进行 UPDATE 操作建议使用事务处理 (BEGIN TRANSACTION, COMMIT, ROLLBACK) 来确保数据的一致性。 数据类型: 确保新值的数据类型与要更新的列的数据类型匹配。 如果不匹配更新操作可能会失败或导致数据错误。
Linux中使用sqlite3
待续
参考内容 菜鸟教程-sqlite3