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中的使用示例:
- 创建数据库
 
CREATE DATABASECREATE DATABASE database_name;  
-- 例如:  
CREATE DATABASE my_database; 
- 删除数据库
 
DROP DATABASE
DROP DATABASE database_name;  
-- 例如:  
DROP DATABASE my_database;
 
- 创建表
 
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)  
);
 
- 删除表
 
DROP TABLEDROP TABLE table_name;  
-- 例如:  
DROP TABLE employees;
 
- 修改表
 
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等关键字。以下是这些关键字的使用示例,按照分点表示和归纳的方式呈现:
- SELECT
功能:从数据库中检索数据。 
示例:
SELECT column1, column2, ...  
FROM table_name  
WHERE condition;  -- 例如,查询名为"employees"的表中所有年龄大于30的员工姓名和年龄:  
SELECT name, age  
FROM employees  
WHERE age > 30;
 
- 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');
 
- UPDATE
功能:更新数据库表中的现有行或数据。 
示例:
UPDATE table_name  
SET column1 = value1, column2 = value2, ...  
WHERE condition;  -- 例如,将"employees"表中所有年龄为35的员工的姓名改为"John Updated":  
UPDATE employees  
SET name = 'John Updated'  
WHERE age = 35;
 
- 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,它们分别用于授予和撤销用户的权限。
- 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';
 
- 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语句。
- 选择所有列
用法:使用通配符*来选择所有列。
示例:SELECT * FROM table_name; - 选择特定列
用法:指定要查询的列名,用逗号分隔多个列名。
示例:SELECT column1, column2 FROM table_name; - 使用别名
用法:使用AS关键字给列名或表名指定别名。
示例:SELECT column1 AS alias1, column2 AS alias2 FROM table_name; - 按条件选择数据
用法:使用WHERE子句来筛选满足指定条件的行。
示例:SELECT * FROM table_name WHERE condition; - 对查询结果排序
用法:使用ORDER BY子句来按照指定列的升序或降序对结果进行排序。
示例:
升序(默认):SELECT * FROM table_name ORDER BY column1 ASC;
降序:SELECT * FROM table_name ORDER BY column1 DESC; - 限制结果集大小
用法:使用LIMIT关键字来限制查询结果的数量。
示例:SELECT * FROM table_name LIMIT 10;(选择前10行) - 消除重复行
用法:使用DISTINCT关键字来消除查询结果中的重复行。
示例:SELECT DISTINCT column1, column2 FROM table_name; - 连接多个表
用法:使用JOIN语句来连接多个表,根据指定的条件关联它们的行。
示例:SELECT * FROM table1 JOIN table2 ON table1.column1 = table2.column1; - 聚合函数
用法:使用聚合函数对数据进行操作,如COUNT(), SUM(), AVG(), MAX(), MIN()等。
示例:SELECT COUNT(column1) FROM table_name;(计算column1的非空值数量) - 分组和过滤结果
用法:使用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支持以下隔离级别:
- READ UNCOMMITTED(未提交读):允许读取并发事务尚未提交的数据。
 - READ COMMITTED(提交读):对同一字段的多次读取结果都是一致的。当某个事务读取该字段时,其他事务对该字段的修改对其不可见。
 - REPEATABLE READ(可重复读):对同一字段的多次读取结果都是一致的。对同一字段的多次读取结果都是事务开始时的值。
 - 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相似࿰…...
【后端开发】服务开发场景之高可用(冗余设计,服务限流,降级熔断,超时重试,性能测试)
【后端开发】服务开发场景之高可用(冗余设计,服务限流,降级熔断,超时重试,性能测试) 文章目录 序:如何设计一个高可用的系统?可用性的判断指标是什么?哪些情况会导致系统…...
在 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星学生纯牛奶,进一步将可持续发展落到实处…...
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源码 以及搭建教程...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
