当前位置: 首页 > news >正文

SQL入门大全

SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准编程语言。它具有数据操纵和数据定义等多种功能,为数据库管理系统提供了强大的交互性特点,能够极大地提高计算机应用系统的工作质量与效率。SQL语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,与其他程序语言一起优化程序功能,为用户提供更多更全面的信息。

SQL介绍:

SQL数据库的结构一般是通过表来存储和管理数据,表的结构类似于Excel,但具有一些特殊的特点和要求,如列名称为字段,每个字段都有自己的数据类型和名称;行称为记录,数据库以记录为单位进行读写操作;单元格只能输入一个数据,且不可再拆分。SQL数据库一般采用CS(客户端/服务器)结构,客户端程序(如Web浏览器、SQL客户端工具等)通过数据库管理系统(DBMS)与服务器端的数据库进行交互。

SQL语句是SQL语言的核心,通过关键字、库名、表名、列名等组合而成,用于操作数据库。

SQL语句主要分类:

数据定义语言(DDL) 用于定义和管理数据库中的对象(视图、索引等),包括CREATE、DROP、ALTER等关键字。
数据操纵语言(DML): 用于查询和修改数据库中的数据,包括SELECT、INSERT、UPDATE、DELETE等关键字。
数据控制语言(DCL): 用于控制数据库的访问权限和事务处理,包括COMMIT、ROLLBACK、GRANT、REMOVE等关键字。

常见的数据库

Oracle数据库: 甲骨文公司的一款关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。
DB2数据库: IBM开发的数据库,采取了对外开放的政策,有多个版本,如DB2工作组版、DB2企业版和DB2个人版等。
SQL Server数据库: 美国微软公司开发的一种关系型数据库系统,对所有的主流服务器骨架都有很好的支持,扩展性、高性能、系统管理先进性突出。
PostgreSQL数据库: 以加州大学伯克利分校计算机系开发的POSTGRES为基础,现已更名为PostgreSQL,特性齐全,对象软件自由,支持世界上最丰富的数据类型。
MySQL数据库: 一种开放源代码的关系型数据库管理系统,对外开放且免费使用,功能一般,性能中等,在小型办公方面占有一定优势。
达梦数据库: 一款性能较好、支持大容量数据的关系型数据库管理系统,适用于企业级的数据管理需求国产

数据库基本操作及示例

数据定义语言(DDL)

数据定义语言(DDL)是用于定义或修改数据库结构的SQL语句。在MySQL中,DDL语句主要用于创建、删除、修改数据库、表、索引等对象。以下是一些常见的DDL关键字以及它们在MySQL中的使用示例:

  1. 创建数据库
CREATE DATABASECREATE DATABASE database_name;  
-- 例如:  
CREATE DATABASE my_database;
  1. 删除数据库
DROP DATABASE
DROP DATABASE database_name;  
-- 例如:  
DROP DATABASE my_database;
  1. 创建表
CREATE TABLECREATE TABLE table_name (  column1 datatype,  column2 datatype,  column3 datatype,  ...  
);  -- 例如:  
CREATE TABLE employees (  id INT AUTO_INCREMENT PRIMARY KEY,  name VARCHAR(50),  age INT,  email VARCHAR(100)  
);
  1. 删除表
DROP TABLEDROP TABLE table_name;  
-- 例如:  
DROP TABLE employees;
  1. 修改表
ALTER TABLE
添加列ALTER TABLE table_name ADD column_name datatype;  
-- 例如:  
ALTER TABLE employees ADD address VARCHAR(100);
删除列
ALTER TABLE table_name DROP COLUMN column_name;  
-- 例如:  
ALTER TABLE employees DROP COLUMN address;
修改列的数据类型
ALTER TABLE table_name MODIFY COLUMN column_name new_datatype;  
-- 例如:  
ALTER TABLE employees MODIFY COLUMN age TINYINT;
修改列的名称
MySQL没有直接的MODIFY COLUMN来重命名列,但你可以使用CHANGE关键字:ALTER TABLE table_name CHANGE old_column_name new_column_name datatype;  
-- 例如:  
ALTER TABLE employees CHANGE age employee_age INT;
添加主键ALTER TABLE table_name ADD PRIMARY KEY (column_name);  
-- 例如:  
ALTER TABLE employees ADD PRIMARY KEY (id);

删除主键
注意:MySQL没有直接的DDL语句来删除主键,但你可以通过修改表结构来删除它(通常是通过删除主键约束并重新添加它,但不指定为主键)。

添加索引
CREATE INDEX index_name ON table_name (column_name);  
-- 或者使用 ALTER TABLE  
ALTER TABLE table_name ADD INDEX index_name (column_name);  
-- 例如:  
ALTER TABLE employees ADD INDEX idx_email (email);
删除索引DROP INDEX index_name ON table_name;  
-- 或者使用 ALTER TABLE  
ALTER TABLE table_name DROP INDEX index_name;  
-- 例如:  
ALTER TABLE employees DROP INDEX idx_email;

数据操纵语言(DML)

数据操纵语言(DML)是用于查询和修改数据的SQL语句。在MySQL中,DML语句主要包括SELECT、INSERT、UPDATE和DELETE等关键字。以下是这些关键字的使用示例,按照分点表示和归纳的方式呈现:

  1. SELECT
    功能:从数据库中检索数据。

示例:

SELECT column1, column2, ...  
FROM table_name  
WHERE condition;  -- 例如,查询名为"employees"的表中所有年龄大于30的员工姓名和年龄:  
SELECT name, age  
FROM employees  
WHERE age > 30;
  1. INSERT
    功能:向数据库表中插入新的行或数据。

示例:

方式一:插入单行数据

INSERT INTO table_name (column1, column2, ...)  
VALUES (value1, value2, ...);  -- 例如,向"employees"表中插入一条新数据:  
INSERT INTO employees (name, age, email)  
VALUES ('John Doe', 35, 'john@example.com');

方式二:插入多行数据

INSERT INTO table_name (column1, column2, ...)  
VALUES   
(value1a, value2a, ...),  
(value1b, value2b, ...),  
...;  -- 例如,向"employees"表中插入多条新数据:  
INSERT INTO employees (name, age, email)  
VALUES   
('Jane Smith', 30, 'jane@example.com'),  
('Bob Johnson', 40, 'bob@example.com');
  1. UPDATE
    功能:更新数据库表中的现有行或数据。

示例:

UPDATE table_name  
SET column1 = value1, column2 = value2, ...  
WHERE condition;  -- 例如,将"employees"表中所有年龄为35的员工的姓名改为"John Updated":  
UPDATE employees  
SET name = 'John Updated'  
WHERE age = 35;
  1. DELETE
    功能:从数据库表中删除行或数据。

示例:

DELETE FROM table_name  
WHERE condition;  -- 例如,删除"employees"表中所有年龄大于40的员工:  
DELETE FROM employees  
WHERE age > 40;  -- 注意:如果省略WHERE子句,将会删除表中的所有数据。这通常被称为TRUNCATE TABLE操作,但DELETE语句没有直接提供TRUNCATE的功能。

数据控制语言(DCL, Data Control Language)

数据控制语言(DCL, Data Control Language)主要用于管理数据库用户的权限和访问控制。虽然DCL不像DML(数据操纵语言)或DDL(数据定义语言)那样经常使用,但它在确保数据库的安全性和访问控制方面起着至关重要的作用。
最常用的关键字是GRANT和REVOKE,它们分别用于授予和撤销用户的权限。

  1. GRANT
    GRANT语句用于授予用户或角色对数据库、表或列的特定权限。

示例:
授予用户user1从任何主机连接到MySQL服务器的权限,并允许其使用密码password1进行身份验证:

GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' IDENTIFIED BY 'password1';

注意:. 表示所有数据库的所有表。在生产环境中,为了安全起见,应尽量避免使用这种通配符组合,而应明确指定所需的数据库和表。

授予用户user2对mydb数据库中所有表的SELECT和INSERT权限:

GRANT SELECT, INSERT ON mydb.* TO 'user2'@'localhost';

授予用户user3对mydb数据库中mytable表的UPDATE权限:

GRANT UPDATE ON mydb.mytable TO 'user3'@'localhost';
  1. REVOKE
    REVOKE语句用于撤销先前授予的权限。

示例:
撤销用户user1从mydb数据库中所有表的SELECT权限:

REVOKE SELECT ON mydb.* FROM 'user1'@'%';

撤销用户user2的所有权限:

REVOKE ALL PRIVILEGES ON *.* FROM 'user2'@'localhost';

注意事项:
在使用GRANT和REVOKE语句时,请始终确保您明确知道要授予或撤销的权限,以及要影响的用户、主机和数据库/表。
在生产环境中,应尽量避免使用通配符(如*.*),而应明确指定所需的数据库、表和权限。
权限的更改通常需要FLUSH PRIVILEGES;语句来使更改生效,但MySQL通常会在会话结束时自动执行此操作。然而,在某些情况下,您可能需要手动执行此语句来确保权限更改立即生效。
在授予权限时,请始终考虑安全性。不要授予不必要的权限,并确保只向可信的用户和主机授予权限。

SELECT拓展(重要)

SELECT语句是SQL中最基础和最常用的语句之一,它提供了丰富的功能和灵活性,可以根据需要进行数据的查询、筛选、排序、聚合等操作。通过以上各种用法的介绍,可以更加清晰地理解和使用SELECT语句。

  1. 选择所有列
    用法:使用通配符*来选择所有列。
    示例:SELECT * FROM table_name;
  2. 选择特定列
    用法:指定要查询的列名,用逗号分隔多个列名。
    示例:SELECT column1, column2 FROM table_name;
  3. 使用别名
    用法:使用AS关键字给列名或表名指定别名。
    示例:SELECT column1 AS alias1, column2 AS alias2 FROM table_name;
  4. 按条件选择数据
    用法:使用WHERE子句来筛选满足指定条件的行。
    示例:SELECT * FROM table_name WHERE condition;
  5. 对查询结果排序
    用法:使用ORDER BY子句来按照指定列的升序或降序对结果进行排序。
    示例:
    升序(默认):SELECT * FROM table_name ORDER BY column1 ASC;
    降序:SELECT * FROM table_name ORDER BY column1 DESC;
  6. 限制结果集大小
    用法:使用LIMIT关键字来限制查询结果的数量。
    示例:SELECT * FROM table_name LIMIT 10;(选择前10行)
  7. 消除重复行
    用法:使用DISTINCT关键字来消除查询结果中的重复行。
    示例:SELECT DISTINCT column1, column2 FROM table_name;
  8. 连接多个表
    用法:使用JOIN语句来连接多个表,根据指定的条件关联它们的行。
    示例:SELECT * FROM table1 JOIN table2 ON table1.column1 = table2.column1;
  9. 聚合函数
    用法:使用聚合函数对数据进行操作,如COUNT(), SUM(), AVG(), MAX(), MIN()等。
    示例:SELECT COUNT(column1) FROM table_name;(计算column1的非空值数量)
  10. 分组和过滤结果
    用法:使用GROUP BY和HAVING子句来对结果进行分组和过滤。
    示例:SELECT column1, COUNT(column2) FROM table_name GROUP BY column1 HAVING COUNT(column2) > 10;(按column1分组,并筛选column2数量大于10的组)

事务拓展(重要)

在关系型数据库管理系统(RDBMS)中,事务(Transaction)是一个作为单个逻辑单元执行的工作单位。事务可以确保数据库从一个一致性状态转变到另一个一致性状态。如果事务中的某个操作失败,那么整个事务将被回滚(Rollback),数据库将返回到事务开始之前的状态。

在SQL中,事务的关键字主要包括:

BEGIN TRANSACTION 或 START TRANSACTION:开始一个新的事务。
示例(MySQL):
START TRANSACTION或BEGIN;

COMMIT:提交事务,使事务中的更改永久化。
示例(MySQL):
COMMIT;
ROLLBACK:撤销事务,回滚到事务开始之前的状态。
示例(MySQL):
ROLLBACK;
SAVEPOINT:在事务中设置一个保存点,允许你在后续的操作中回滚到该保存点,而不是事务的开始。
示例(MySQL):

SAVEPOINT savepoint_name;
ROLLBACK TO SAVEPOINT:回滚到指定保存点的状态。

示例(MySQL):

ROLLBACK TO SAVEPOINT savepoint_name;
RELEASE SAVEPOINT:删除一个保存点。
示例(MySQL):
RELEASE SAVEPOINT savepoint_name;
SET TRANSACTION:设置事务的属性,如隔离级别。
示例(MySQL):

SET TRANSACTION ISOLATION LEVEL READ-COMMITTED;

MySQL中使用事务时,通常需要设置事务的隔离级别。MySQL支持以下隔离级别:
  1. READ UNCOMMITTED(未提交读):允许读取并发事务尚未提交的数据。
  2. READ COMMITTED(提交读):对同一字段的多次读取结果都是一致的。当某个事务读取该字段时,其他事务对该字段的修改对其不可见。
  3. REPEATABLE READ(可重复读):对同一字段的多次读取结果都是一致的。对同一字段的多次读取结果都是事务开始时的值。
  4. SERIALIZABLE(可串行化):最高的隔离级别,所有的事务依次逐个执行,这样事务之间就不可能产生干扰。
    使用事务时,通常的步骤是:

使用 START TRANSACTION 或 BEGIN 开始一个新的事务。
执行一系列的SQL语句,这些语句要么全部成功,要么全部失败。
如果所有语句都成功执行,使用 COMMIT 提交事务,使更改永久化。
如果在事务执行过程中发生错误,使用 ROLLBACK 撤销事务,回到事务开始之前的状态。
使用事务可以确保数据的完整性和一致性,特别是在涉及多个表或复杂操作的情况下。

相关文章:

SQL入门大全

SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准编程语言。它具有数据操纵和数据定义等多种功能,为数据库管理系统提供了强大的交互性特点,能够极大地提高计算机应用系统的工作质量与…...

【深度优先搜索 广度优先搜索】297. 二叉树的序列化与反序列化

本文涉及知识点 深度优先搜索 广度优先搜索 深度优先搜索汇总 图论知识汇总 LeetCode297. 二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传…...

App UI 风格,引领设计风向

App UI 风格,引领设计风向...

TIM—通用定时器高级定时器

通用/高级定时器的功能 在基本定时器功能的基础上新增功能: 通用定时器有4个独立通道,且每个通道都可以用于下面功能。 (1)输入捕获:测量输入信号的周期和占空比等。 (2)输出比较:产…...

【数据结构与算法(C语言)】循环队列图解

目录 1. 前言1.1 普通循环队列假溢出1.1.1 初始化队列1.1.2 插满队列1.1.3 删除元素后,再插入元素 1.2 循环队列1.2.1 插入元素,队列已满1.2.2 将元素J1、J2出列,循环队列又空出两个空间1.2.3 元素J6可以继续入列 2. 存储结构和函数说明2.1 队…...

私域流量转化不济的原因

你是不是也曾感到私域流量的转化一直不如意?让我来告诉你,这六大问题是为什么,以及如何轻松解决它们,提升你的私域流量转化率! 1. 问题:目标不明确 你是否常常感到茫然,不知道私域流量应该有何目…...

百万上下文RAG,Agent还能这么玩

❝ 在AI技术飞速发展的今天,我们见证了许多令人惊叹的突破。最近,Qwen2模型的开源引起了广泛的关注,它不仅展示了超越闭源模型的能力,还带来了一个全新的框架——Qwen-Agent。 Qwen-Agent的设计思路虽然与LangChain相似&#xff0…...

【后端开发】服务开发场景之高可用(冗余设计,服务限流,降级熔断,超时重试,性能测试)

【后端开发】服务开发场景之高可用(冗余设计,服务限流,降级熔断,超时重试,性能测试) 文章目录 序:如何设计一个高可用的系统?可用性的判断指标是什么?哪些情况会导致系统…...

在 Selenium 中更改 User-Agent | 步骤与最佳实践

在 Selenium 中更改 User Agent 是许多网页抓取任务中的关键步骤。它有助于将自动化脚本伪装成常规浏览器,从而避免被网站检测到。本指南将带您了解如何在 Selenium 中更改 Google Chrome 的 User Agent,并提供最佳实践以确保您的网页抓取任务顺利进行。…...

2024酒店IPTV云桌面系统建设方案

Hello大家好,我是点量小芹,这一年多的时间一直在分享实时云渲染像素流相关的内容,今天和大家聊聊酒店IPTV云桌面电视系统解决方案,或者有的朋友也会称之为IPTV服务器。熟悉小芹的朋友知道,IPTV软件系统是我们一直在推的…...

java Thrift TThreadPoolServer 多个processor 的实现

当我们使用Thrift 通信的时候,服务端有时候需要注册多个类,去实现通信,这时候我们就不能再使用单一Processor的方式,就要使用多个Processor,那么如何去实现呢? 多个Process 服务端 public static void m…...

失眠焦虑的解脱之道:找回内心的平静

🍃 在这个快节奏的时代,失眠与焦虑似乎成了许多人的隐形敌人。每当夜幕降临,它们便悄悄潜入心底,扰乱我们的思绪,让宁静的夜晚变得无比漫长。然而,生活总有办法让我们找回内心的平静,只需稍作调…...

OLED柔性屏的显示效果如何

OLED柔性屏的显示效果非常出色,具有多方面的优势。以下是关于OLED柔性屏显示效果的详细分析: 色彩表现:OLED柔性屏的每个像素都可以独立发光,因此色彩准确性极高。黑色呈现得非常深邃,而亮部则展现出鲜明而生动的细节。…...

百货商城优选 伊利牛奶推出全国首款减甲烷环保学生奶

近日,伊利集团受邀参加在全国首个“国际首脑峰会零碳场馆”召开的“降碳增产科技助力奶业绿色高质量发展”首款低碳饲料创新大会。会上,伊利宣布将推出全国首款减甲烷环保学生牛奶——伊利QQ星学生纯牛奶,进一步将可持续发展落到实处&#xf…...

Fluid 1.0 版发布,打通云原生高效数据使用的“最后一公里”

作者:顾荣 前言 得益于云原生技术在资源成本集约、部署运维便捷、算力弹性灵活方面的优势,越来越多企业和开发者将数据密集型应用,特别是 AI 和大数据领域应用,运行于云原生环境中。然而,云原生计算与存储分离架构虽…...

软件测试--第十一章 设计和维护测试用例

1.单选题 (2分) 下面有关测试设计的叙述,说法不正确的是( )。 A 测试用例的设计是一项技术性强.智力密集型的活动 B 在开展测试用例设计前,必须将测试需求进行详细展开 C 在一般的测试组织内,测试用例的评审可能不是正式的评审会 D 在测试用例设计时,只设计覆盖正常流程和操…...

前端只允许一次函数调用

如果你正在进行前端开发,并且只想允许一次函数调用,你可以使用JavaScript的闭包结构创建一个只能被调用一次的函数。这样的函数有时被称为单次调用函数(“one-time call” functions)或一次性函数(“once” functions&…...

visdom使用时所遇的问题及解决方法

最近在用visdom进行可视化的过程中,虽然可有效的避免主机拒绝访问(该问题的解决方法,请参考深度学习可视化工具visdom使用-CSDN博客)即在终端输入python -m visom.server 1.训练过程中visdom出现ValueError: too many file descr…...

密封类(sealed class)

在 Kotlin 中,密封类(sealed class)是一种受限的类层次结构,允许您定义一个封闭的类层次结构,其中类的所有可能子类都已知并且位于同一文件中。密封类的主要作用是提供类型安全的受限层次结构,使得 when 表…...

私域引流宝PHP源码 以及搭建教程

私域引流宝PHP源码 以及搭建教程...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

深度学习习题2

1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...