当前位置: 首页 > 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源码 以及搭建教程...

React Native 导航系统实战(React Navigation)

导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

网络编程(UDP编程)

思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

消息队列系统设计与实践全解析

文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...