【Mysql】万字长文带你快速掌握数据库基础概念及SQL基本操作

文章目录

  • 前言
  • 一、数据库相关概念
    • 1. 什么是数据库
    • 2. 数据库的种类
    • 3. Mysql 简介
    • 4. SQL简介
    • 5. 数据库中常见的数据类型
  • 二、SQL基础
    • 1. SQL通用语法
    • 2. SQL的主要分类
    • 3. DDL(数据库,表,索引,视图)
    • 4. DML(数据的插入,更新,删除)
    • 5. DQL(数据查询)
    • 6. DCL(数据访问权限控制)
  • 三、SQL入门案例
    • 1. DDL入门案例
    • 2. DML入门案例
    • 3. DQL入门案例
    • 4. DCL入门案例
  • 总结


前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)


一、数据库相关概念


1. 什么是数据库

数据库是指一组相互关联的数据集合,它们以一定的方式组织、存储和管理,以方便数据的查找、访问和管理。在计算机科学中,数据库是一种用于存储和管理数据的软件系统,它支持数据的创建、读取、更新和删除操作


2. 数据库的种类

  • 常见的数据库种类包括关系型数据库和非关系型数据库
  • 关系型数据库是指使用关系模型来组织和管理数据的数据库。关系模型是一种基于表的数据模型,其中每个表代表一种实体类型,而每个行代表一个实体实例。关系型数据库使用结构化查询语言(SQL)来管理和操作数据常见的关系型数据库包括MySQL、Oracle 和 SQL Server 等
  • 非关系型数据库是指不使用关系模型来组织和管理数据的数据库。它们使用不同的数据模型和查询语言来管理和操作数据。非关系型数据库通常用于处理大量非结构化数据,例如文本、图像和音频等。常见的非关系型数据库包括MongoDB、Redis和Cassandra等

3. Mysql 简介

1. 认识Mysql

MySQL是一种开源的关系型数据库管理系统(RDBMS),它是目前最流行和广泛使用的数据库之一。 MySQL以其高性能、可靠性和易用性而闻名,并被广泛应用于各种规模的应用程序和网站

2. MySQL的特点和功能

  • 开源性:MySQL是开源软件,可以免费获得并进行修改和定制。这使得它非常适合个人开发者和小型企业
  • 跨平台:MySQL可在多个操作系统上运行,包括Windows、Linux、macOS等,提供了广泛的平台支持
  • 高性能:MySQL通过优化的查询处理、索引机制和缓存策略等技术,提供了出色的性能和响应速度。它能够处理大规模数据集和高并发访问
  • 可扩展性:MySQL支持水平和垂直扩展,可以根据需求轻松地扩展数据库的容量和性能
  • 完整的功能集:MySQL支持标准的SQL查询语言,具有丰富的特性和功能,包括事务支持、触发器、存储过程、复制和高可用性选项等
  • 数据安全:MySQL提供了强大的安全机制,包括用户认证、权限管理、数据加密和安全连接等,以保护数据的机密性和完整性
  • 大型社区支持:MySQL拥有庞大的开源社区,提供了丰富的文档、教程和支持资源。开发者可以从社区中获取帮助、分享经验和解决问题

总体而言,MySQL是一种可靠、高性能且易于使用的关系型数据库管理系统。无论是用于小型网站、企业应用还是大规模数据处理,MySQL都提供了强大的功能和灵活的解决方案。它是许多开发人员和组织构建可靠数据库应用程序的首选工具之一


4. SQL简介

SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准化查询语言。 SQL由美国国家标准学会(ANSI)和国际标准化组织(ISO)制定并标准化,它定义了一组操作关系型数据库的语法和语义规则。SQL被广泛应用于各种类型的应用程序和网站,并成为了处理和管理数据的标准方式


5. 数据库中常见的数据类型

  • 在DDL(数据定义语言)中,您可以使用不同的数据类型来定义表中的列。不同的数据库管理系统(DBMS)支持的数据类型可能会有所不同,以下是一些常见的DDL表操作数据类型示例:
数据类型示例
整数类型INT(整数)、BIGINT(大整数)、SMALLINT(小整数)、TINYINT(微小整数)
浮点数类型FLOAT(浮点数)、DOUBLE(双精度浮点数)、DECIMAL(固定精度的十进制数)
字符串类型CHAR(n)(固定长度的字符)、VARCHAR(n)(可变长度的字符)、TEXT(长文本)
日期和时间类型DATE(日期)、TIME(时间)、DATETIME(日期和时间)、TIMESTAMP(时间戳)
布尔类型BOOLEAN(布尔值)
二进制类型BLOB(二进制大对象)、BINARY(二进制数据)、VARBINARY(可变长度的二进制数据)
其他特殊类型ENUM(枚举类型,限定为预定义的值列表)、SET(集合类型,限定为预定义的值集合)

这些是一些常见的数据类型示例,实际上不同的DBMS可能还支持其他的数据类型或拥有特定的数据类型命名约定。在创建表时,您可以根据需要选择适当的数据类型来定义表中的列。确保根据数据的特性和需求选择正确的数据类型,以确保数据的准确性和一致性。


二、SQL基础


1. SQL通用语法

  1. SQL语句可以单行或多行书写,以分号结尾
  2. SQL语句可以使用空格/缩进来增强语句的可读性
  3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
  4. 注释
    ---- 单行注释 : - - 注释内容 或 # 注释内容(MySQL特有)
    ---- 多行注释 : /注释内容/

2. SQL的主要分类

分类全称说明
DDLData Definition Language数据定义语言用来定义数据库对象(数据库,表,字段)
DMLData Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改
DOLData Querv Language数据查询语言,用来查询数据库中表的记录
DCLData ControlLanguage数据控制语言,用来创建数据库用户、控制数据库的访问权限

3. DDL(数据库,表,索引,视图)

在关系型数据库中,DDL(数据定义语言)扮演着至关重要的角色。DDL是一组用于定义数据库结构和模式的SQL命令,它使我们能够创建、修改和删除数据库对象,如表、视图和索引

1. DDL – 数据库操作

  • 创建数据库CRFATE DATABASE [ IF NOT EXISTS ] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则]):例如,示例命令语句创建了一个名为"my_database"的数据库。
CREATE DATABASE my_database;
  • 删除数据库DROP DATABASE),例如,示例命令语句删除了名为"my_database"的数据库。
DROP DATABASE my_database;
  • 查询所有数据库SHOW DATABASES

  • 查询当前数据库SELECT DATABASE)

  • 使用数据库USE 数据库名

2. DDL – 表操作

  • 创建表CREATE TABLE):创建表是数据库设计的第一步。使用CREATE TABLE语句可以定义表的名称、列名和数据类型。例如,下面的语句创建了一个名为"users"的表,包含id、name和age三个列:
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);
  • 查询表
  1. 查询当前数据库所有表
SHOW TABLES
  1. 查询表结构
DESC 表名
  1. 查询指定表的建袭语句
SHOW CREATE TABLE 表名
  • 修改表结构ALTER TABLE):在数据库使用过程中,可能需要修改表的结构,例如添加新列、更改列的数据类型或删除列。ALTER TABLE语句用于这些操作。下面是一些示例
  1. 添加新列:
ALTER TABLE users
ADD email VARCHAR(100);
  1. 修改列的数据类型
ALTER TABLE Customers
ADD COLUMN phone_number VARCHAR(20);
  1. 删除列
ALTER TABLE users
DROP COLUMN email;
  • 删除表DROP TABLE):如果不再需要某个表,可以使用DROP TABLE语句将其从数据库中删除。请谨慎使用该命令,因为删除表将同时删除表中的所有数据。示例如下
DROP TABLE users;

3. 创建索引(CREATE INDEX)

索引可以提高对表中数据的检索效率。 使用 CREATE INDEX 语句可以在表的列上创建索引。例如,以下命令在"users"表的"name"列上创建了一个索引

CREATE INDEX idx_users_name ON users (name);

4. 创建视图(CREATE VIEW)

视图是基于表的虚拟表,它是通过SELECT语句定义的。 使用 CREATE VIEW 语句可以创建视图。例如,以下命令创建了一个名为"active_users"的视图,该视图包含所有"users"表中状态为"active"的行

CREATE VIEW active_users AS
SELECT * FROM users WHERE status = 'active';

4. DML(数据的插入,更新,删除)

1. 认识DML

在关系型数据库中,DML(数据操纵语言)是一组用于操作数据库中数据的SQL命令。DML允许我们对表中的数据进行插入、更新、删除和查询操作,是SQL中最常用的部分之一

2. 插入数据(INSERT)

插入数据是向表中添加新行的操作。使用INSERT语句可以将数据插入到表中的特定列。 例如,下面的语句将一条新记录插入到名为"users"的表中

INSERT INTO users (name, age, email) VALUES ('John Doe', 25, 'johndoe@example.com');
  • 给指定字段添加数据
  1. 语法格式 :INSERT INTO 表名(字段名1, 字段名2,…) VALUES (值1,值2,…);
  • 给全部字段添加数据

语法格式:INSERT INTO 表名 VALUES (值1, 值2, …);

  • 批量添加数据

语法格式:

  1. INSERTINTO 表名(字段名1, 字段名2, …) VALUES(值1,值2,…), (值1,值2,…),(值1, 值2,…);
  2. INSERTINTO 表名 VALUES (值1, 值2,…),(值1, 值2, …),(值1,值2,…) ;
  • 注意事项
  1. 插入数据时,指定的字段顺序需要与值的顺序是一一对应的
  2. 字符串和日期型数据应该包含在引号中
  3. 插入的数据大小,应该在字段的规定范围内

3. 更新数据(UPDATE)

更新数据是修改表中现有行的操作。使用UPDATE语句可以更改表中的数据。 例如,下面的语句将名为"John Doe"的用户年龄更新为30

UPDATE users SET age = 30 WHERE name = 'John Doe';
  • 一般格式
  1. 语法格式:UPDATE 表名 SET 字段名1 = 值1,字段名2= 值2,…[ WHERE 条件];
  • 注意事项

修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据

4. 删除数据(DELETE)

删除数据是从表中删除行的操作。使用DELETE语句可以删除满足特定条件的行。 例如,下面的语句将删除名为"John Doe"的用户

DELETE FROM users WHERE name = 'John Doe';
  • 一般格式
  1. 语法格式:DELETE FROM 表名[WHERE 条件]
  • 注意事项
  1. DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
  2. DELETE 语句不能删除某一个字段的值(可以使用UPDATE)。

5. DQL(数据查询)

1. 认识DQL

在关系型数据库中,DQL(数据查询语言)是一组用于从数据库中检索数据的SQL命令。DQL允许我们以各种条件和方式查询表中的数据,获取所需的结果

2. 基本查询(SELECT)

  • 查询多个字段

语法格式

  1. SELECT 字段1,字段2, 字段3 … FROM 表名)
  2. SELECT*FROM 表名:
SELECT * FROM users;

基本查询是最常见的DQL操作,用于从表中检索数据。 使用SELECT语句可以选择列和行,从而获取所需的数据。例如,上面的语句将检索名为"users"的所有行和列

  • 设置别名

语法格式:SELECT 字段1 [AS 别名1],字段2 [AS 别名2] … FROM 表名

  • 去除重复记录

语法格式:SELECT DISTINCT 字段列表 FROM 表名

3. 条件查询(WHERE)

条件查询允许我们根据指定的条件检索符合条件的数据。 使用WHERE子句可以过滤查询结果。例如,下面的语句将检索名为"John Doe"的用户信息

SELECT * FROM users WHERE name = 'John Doe';
  • 一般格式

语法格式:SELECT 字段列表 FROM 表名 WHERE 条件列表

  • 条件列表
比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<> 或 !=不等于
BETWEEN … AND …在某个范围之内(含最小、最大值)
IN(…)在in之后的列表中的值,多选一
LIKE 占位符模糊匹配(_匹配单个字符,%匹配任意个字符)
IS NULL是NULL
逻辑运算符功能
AND 或&&并且(多个条件同时成立)
OR或或者(多个条件任意一个成立)
NOT 或!非,不是

4. 排序查询(ORDER BY)

排序查询允许我们按照指定的列对查询结果进行排序。使用ORDER BY子句可以按升序(ASC)或降序(DESC)对查询结果进行排序。 例如,下面的语句将按年龄对用户进行降序排序

SELECT * FROM users ORDER BY age DESC;
  • 一般格式
  1. 语法格式:SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2
  • 排序方式
  1. ASC:升序 (默认值)
  2. DESC:降序

5. 聚合查询(GROUP BY)

聚合查询允许我们根据指定的列对数据进行分组,并对每个组应用聚合函数(如SUM、COUNT、AVG等),使用GROUP BY子句可以执行聚合查询。 例如,下面的语句将计算每个城市的用户数量

SELECT city, COUNT(*) FROM users GROUP BY city;
  • 一般格式
  1. 语法格式:SELECT 聚合函数(字段列表) FROM 表名
  • 常见聚合函数
函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和
  • 注意

null值不参与所有聚合函数运算

6. 分组查询

数据库分组查询是一种对数据库表进行聚合计算和分组的查询方式。 它可以根据指定的字段进行分组,并对每个分组进行聚合计算,例如求和、平均值、最大值、最小值等常见的分组查询语句是SQL语句中的GROUP BY子句。 下面是一个示例,它查询一个订单表中每个客户的总订单金额:

SELECT customer_id, SUM(total_amount)
FROM orders
GROUP BY customer_id;

在上面的查询中,GROUP BY子句指定了按照customer_id字段进行分组,SUM函数对每个分组内的total_amount字段进行求和计算。查询结果将返回每个客户的customer_id和对应的总订单金额

  • 一般格式
  1. 语法格式:SELECT 字段列表 FROM 表名[WHERE 条件] GROUP BY 分组字段名[HAVING 分组后过滤条件];
  • where与having区别
  1. 执行时机不同: where是分组之前进行过滤,不满足where条件,不参与分组,而having是分组之后对结果进行过滤。
  2. 判断条件不同: where不能对聚合函数进行判断,而having可以

7. 分页查询

分页查询是一种对数据库中的数据进行分段查询的方式,通常用于显示大量数据的情况下,将数据分页显示,提高浏览效率。分页查询可以通过LIMIT和OFFSET关键字来实现。

  • 一般格式
  1. 语法格式:SELECT 字段列表 FROM 表名 LIMIT 起始索引查询记录数;

假设我们有一个员工表,其中包含员工的姓名和工资信息,我们想要查询前10个工资最高的员工,并按照工资从高到低排序,可以使用以下SQL语句:

SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10;

在上面的查询中,我们使用ORDER BY子句按照工资从高到低进行排序,并使用LIMIT关键字限制返回的记录数为10条。这将返回工资最高的前10个员工的姓名和工资信息。

如果我们想要从第11个记录开始查询下一页数据,可以使用OFFSET关键字,例如:

SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10 OFFSET 10;

这个查询将返回第11到第20个工资最高的员工的姓名和工资信息

  • 注意
  1. 起始索引从0开始,起始索引= (查询页码 -1) * 每页显示记录数
  2. 分页查询是数据库的方言,不同的数据库有不同的实现,MysQL中是LIMIT
  3. 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10
  4. 在使用OFFSET时应当考虑到数据的变化,因为如果在两次分页查询之间有新的数据被添加或删除,可能会导致分页结果出现重叠或遗漏的情况

8. 连接查询(JOIN)

连接查询允许我们从多个表中检索相关数据。使用JOIN子句可以根据指定的条件将多个表连接起来。 例如,下面的语句将从"users"表和"orders"表中检索有关用户和订单的信息

SELECT users.name, orders.order_id FROM users JOIN orders ON users.id = orders.user_id;

9. DQL执行顺序

在这里插入图片描述


6. DCL(数据访问权限控制)

1. 认识DCL

在关系型数据库中,DCL(数据控制语言)是一组用于管理和控制数据库中的数据访问权限的SQL命令。 通过使用DCL命令,我们可以定义用户权限、授予或撤销权限,并管理数据库对象的安全性

2. 用户权限管理

  • 基础命令

用户权限管理是DCL的重要部分,它涉及定义和管理用户对数据库的访问权限。
以下是一些常用的DCL命令用于用户权限管理

命令说明
CREATE USER创建新用户,并分配用户名和密码
ALTER USER修改用户的属性,例如修改密码或锁定用户账户
DROP USER删除用户,同时撤销其对数据库的访问权限
GRANT授予用户特定的权限,例如SELECT、INSERT、UPDATE等
REVOKE撤销用户的权限,限制其对数据库对象的访问
  • 示例

查询用户

USE mysql;
SELECT * FROM user;

创建用户

CREATE USER  '用户名'@'主机名' IDENTIFIED BY '密码'

修改用户密码

ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

删除用户

DROP USER '用户名'@'主机名';
  • 注意
  1. 主机名可以使用 % 通配
  2. 这类SQL开发人员操作的比较少,主要是DBA ( Database Administrator 数据库管理员) 使用

3. 对象权限管理

  • 基础权限

对象权限管理涉及定义和管理用户对数据库对象(如表、视图、存储过程等)的访问权限。 以下是一些常用的DCL命令用于对象权限管理

权限说明
GRANT授予用户对特定对象的权限,例如SELECT、INSERT、UPDATE等
REVOKE撤销用户对特定对象的权限,限制其对对象的访问
WITH GRANT OPTION允许被授权的用户将其权限授予其他用户
ALL,ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
ALTER修改表
DROP删除数据库/表/视图
CREATE创建数据库/表
  • 示例
  1. 查权限
SHOW GRANTS FOR '用户名'@'主机名';
  1. 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'
  1. 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
  • 注意
  1. 多个权限之间,使用逗号分隔
  2. 授权时,数据库名和表名可必使用 * 进行通配,代表所有

4. 事务管理

事务管理是DCL的一部分,它涉及控制和管理数据库中的事务。 以下是一些常用的DCL命令用于事务管理

命令说明
COMMIT提交事务,将已执行的操作永久保存到数据库中
ROLLBACK回滚事务,撤销已执行的操作,恢复到事务开始之前的状态
SAVEPOINT设置保存点,允许在事务中创建一个标记,以便在需要时回滚到该标记所在的状态

5. 数据库对象的安全性

DCL也涉及管理和维护数据库对象的安全性。 以下是一些常用的DCL命令用于数据库对象的安全性管理

命令说明
CREATE SCHEMA创建模式,用于组织和管理数据库对象
ALTER SCHEMA修改模式的属性,例如更改模式的所有者
DROP SCHEMA删除模式,同时删除其中的所有对象

三、SQL入门案例


1. DDL入门案例

  • 案例需求:设计一张员工信息表,要求如下:
  1. 编号(纯数字)
  2. 员工工号(字符串类型,长度不超过10位)
  3. 员工姓名(字符串类型,长度不超过10位)
  4. 性别(男/女,存储一个汉字)
  5. 年龄(正常人年龄,不可能存储负数)
  6. 身份证号(二代身份证号均为18位,身份证中有X这样的字符)
  7. 入职时间 (取值年月日即可)
  • SQL语句
CREATE TABLE employee (
  id INT PRIMARY KEY COMMENT '编号',
  employee_number VARCHAR(10) COMMENT '员工工号',
  name VARCHAR(10) COMMENT '员工姓名',
  gender CHAR(1) COMMENT '男/女',
  age TINYINT COMMENT '正常人年龄,不可能存储负数',
  id_card CHAR(18) COMMENT '二代身份证号均为18位,身份证中有X这样的字符',
  hire_date DATE COMMENT '取值年月日即可'
) COMMENT '员工信息表';
  • 效果及解析

在上面的表中,每个字段的含义如下:

  1. id: 员工信息的唯一编号,采用纯数字类型,使用INT类型,作为表的主键,中文别名为“编号”。
  2. employee_number: 员工工号,采用字符串类型,长度不超过10位,使用VARCHAR(10)类型,中文别名为“员工工号”。
  3. name: 员工姓名,采用字符串类型,长度不超过10位,使用VARCHAR(10)类型,中文别名为“员工姓名”。
  4. gender: 员工性别,使用一个汉字表示,采用CHAR(1)类型,中文别名为“性别”。
  5. age: 员工年龄,采用TINYINT类型,适合存储正常人的年龄,不可能存储负数,中文别名为“年龄”。
  6. id_card: 员工身份证号,采用CHAR(18)类型,适合存储18位身份证号码,包括可能出现的字符X,中文别名为“身份证号”。
  7. hire_date: 员工入职时间,采用DATE类型,存储年月日即可,中文别名为“入职时间”。

2. DML入门案例


假设我们有一个学生表,其中包含学生的学号、姓名、年龄和班级信息。我们可以使用DML语句向该表中插入一条学生记录,例如:

INSERT INTO students (id, name, age, class)
VALUES ('1001', '张三', 18, '一班');

在上面的语句中,我们使用INSERT INTO关键字指定要插入数据的表名和列名,并使用VALUES关键字指定要插入的数据值。这个语句将向students表中插入一条学号为’1001’,姓名为’张三’,年龄为18,班级为’一班’的学生记录。

接下来,我们可以使用UPDATE语句来修改该学生的年龄信息,例如:

UPDATE students
SET age = 19
WHERE id = '1001';

在上面的语句中,我们使用UPDATE关键字指定要更新的表名和列名,并使用SET关键字指定要更新的数据值。这个语句将更新学号为’1001’的学生的年龄为19岁。

最后,我们可以使用DELETE语句来删除该学生的记录,例如:

DELETE FROM students
WHERE id = '1001';

在上面的语句中,我们使用DELETE FROM关键字指定要删除的表名,并使用WHERE关键字指定要删除的记录条件。这个语句将删除学号为’1001’的学生记录。

需要注意的是,DML语句会对数据库中的数据进行增删改操作,因此在使用时需要谨慎,避免误操作造成数据丢失或数据不一致的情况。


3. DQL入门案例

1. 查询年龄为20,21,22,23岁的员工信息

SELECT *
FROM employees
WHERE age IN (20, 21, 22, 23);

2. 查询性别为 男,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工

SELECT name
FROM employees
WHERE gender = '男' AND age BETWEEN 20 AND 40 AND LENGTH(name) = 3;

3. 统计员工表中年龄小于60岁的,男性员工和女性员工的人数

SELECT gender, COUNT(*)
FROM employees
WHERE age < 60
GROUP BY gender;

4. 查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序

SELECT name, age
FROM employees
WHERE age <= 35
ORDER BY age ASC, hire_date DESC;

5. 查询性别为男,且年龄在20-40 岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序

SELECT *
FROM employees
WHERE gender = '男' AND age BETWEEN 20 AND 40
ORDER BY age ASC, hire_date ASC
LIMIT 5;

4. DCL入门案例

  • 案例背景:

假设我们有一个名为"OnlineStore"的关系型数据库,其中包含以下两个表:Customers(顾客)和Orders(订单)。我们希望通过DCL命令来管理和控制用户对这些表的访问权限

  • 用户权限管理:

首先,我们需要创建一个新用户,并分配用户名和密码。假设我们要创建一个名为"manager"的用户。下面是创建用户的DCL命令

CREATE USER manager IDENTIFIED BY 'password';

接下来,我们可以使用GRANT命令授予用户相应的权限。例如,我们可以授予"manager"用户对Customers表的SELECT和INSERT权限。下面是授予权限的DCL命令

GRANT SELECT, INSERT ON Customers TO manager;
  • 对象权限管理:

在上述案例中,我们已经授予了"manager"用户对Customers表的SELECT和INSERT权限。现在,假设我们想撤销该用户对Customers表的INSERT权限。下面是撤销权限的DCL命令

REVOKE INSERT ON Customers FROM manager;

此时,"manager"用户只能对Customers表执行SELECT操作,而无法执行INSERT操作

  • 事务管理:

事务管理是DCL的一部分,它涉及控制和管理数据库中的事务。假设我们想在Orders表中插入一条新订单,并确保该操作是原子的(要么全部成功,要么全部回滚)。下面是使用事务管理的DCL命令

BEGIN TRANSACTION;
INSERT INTO Orders (order_id, customer_id, total_amount) VALUES (1, 1001, 50.00);
COMMIT;

如果在插入订单的过程中发生任何错误,可以使用ROLLBACK命令回滚事务,撤销已执行的操作,恢复到事务开始之前的状态

  • 数据库对象的安全性:

DCL也涉及管理和维护数据库对象的安全性。假设我们想创建一个新的模式(Schema)来存储敏感数据,并将其保护起来,只允许特定的用户访问。下面是创建模式和设置权限的DCL命令

CREATE SCHEMA secure_schema;
GRANT ALL PRIVILEGES ON SCHEMA secure_schema TO manager;

通过以上命令,我们创建了一个名为"secure_schema"的模式,并授予"manager"用户对该模式的所有权限


总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

60 # http 的基本概念

什么是 HTTP&#xff1f; 通常的网络是在 TCP/IP 协议族的基础上来运作的&#xff0c;HTTP 是一个子集。http 基于 tcp 的协议&#xff0c;在 tcp 的基础上增加了一些规范&#xff0c;就是 header&#xff0c;学习 http 就是学习每个 header 它有什么作用。 TCP/IP 协议族 协…

数据结构day8(2023.7.25)

一、排序算法 排序&#xff1a;把无需序列转换为有序序列的一种算法。 内排&#xff1a;在计算机内存中实现的排序算法【多用适用于数据量较小的情况】 外排&#xff1a;在计算机内存以及外部介质实现的排序算法【先内存&#xff0c;在外部】 排序的分类&#xff1a; 交换排…

华为OD机试真题 Java 实现【AI面板识别】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明4、控制台输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08…

前端生成批量二维码,并且下载到本地

Ⅰ- 壹 - 功能展示和使用需求 需求描述 前端生成批量二维码&#xff0c;并且下载&#xff0c;本项目使用了 vue3. 功能展示 Ⅱ - 贰 - 封装代码 需要的库 yanr add qrcodejs2-fix // 生成二维码 yarn add html2canvas // 转图片 yarn add jszip// 压缩包 yarn add file-sa…

Asp.Net 6中使用Log4Net

Asp.Net 6中使用Log4Net 1. 先新建一个ASP.NET Core空项目 2. 通过Nuget包管理器安装下面两个包 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore 3. 在项目根目录下新建log4net的配置文件log4net.config&#xff0c;并将其设置为始终复制。 <?xml version&quo…

Cesium 实战 - Blender调整模型组件原点,实现直升机尾翼旋转

Cesium 实战 - Blender调整模型组件原点&#xff0c;实现直升机尾翼旋转 1.模型原点问题2.导入模型&#xff08;zhisheng.glb&#xff09;3.导出模型4. 通过 czml 调试代码 某个项目需求&#xff0c;在操作直升机模型的时候&#xff0c;希望直升机机翼和尾翼旋转起来。 机翼旋…

Kafka 入门到起飞 - Kafka怎么做到保障消息不会重复消费的? 消费者组是什么?

Kafka怎么做到避免消息重复消费的&#xff1f; 消费者组是什么&#xff1f; 消费者&#xff1a; 1、订阅Topic&#xff08;主题&#xff09; 2、从订阅的Topic消费&#xff08;pull&#xff09;消息&#xff0c; 3、将消费消息的offset&#xff08;偏移量&#xff09;保存在K…

Codeforces算法心得——A. Escalator Conversations

大家好&#xff0c;我是晴天学长&#xff0c;今天开始尝试一些外国的题目了&#xff0c;不得不说&#xff0c;创新性挺高的&#xff0c;然后是全英文&#xff0c;也可以练练英文的水平&#xff0c;后面我会持续的更新的&#xff01;加油&#xff01;&#x1f4aa;&#x1f4aa;…

100% RNN language model ChatRWKV 相关开源项目

RWKV(读作RwaKuv)借鉴了RNN的移动平均模型&#xff08;MA&#xff09;&#xff0c;将transformer的 O ( T 2 d ) O(T^2d) O(T2d)复杂度降低到 O ( T d ) O(Td) O(Td)&#xff0c;同时保持较好的结果表现。RWKV也是一个开源模型&#xff0c;甚至其介绍主页的html代码都有开源。以…

《Vue3+Typescript》一个简单的日历组件实现

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 目录 一、…

如何彻底卸载VMware

目录 第一章、停止并卸载VMware程序1.1&#xff09;停止VMware有关的服务1.2&#xff09;打开任务管理器停止进程1.3&#xff09;卸载VMware程序 第二章、残留文件删除2.1&#xff09;打开注册表2.2&#xff09;删除注册表残留文件2.3&#xff09;C盘文件删除 友情提醒&#xf…

从分片传输到并行传输之大文件传输加速技术

随着大文件的传输需求越来越多&#xff0c;传输过程中也会遇到很多困难&#xff0c;比如传输速度慢、文件安全性低等。为了克服这些困难&#xff0c;探讨各种大文件传输加速技术。其中&#xff0c;分片传输和并行传输是两种比较常见的技术&#xff0c;下面将对它们进行详细说明…

MySQL之深入InnoDB存储引擎——物理文件

文章目录 一、参数文件二、日志文件三、表结构定义文件四、InnoDB 存储引擎文件1、表空间文件2、重做日志文件 一、参数文件 当 MySQL 实例启动时&#xff0c;数据库会先去读一个配置参数文件&#xff0c;用来寻找数据库的各种文件所在位置以及指定某些初始化参数。在默认情况…

【Python】logging模块笔记

目录 日志级别 四个组件 记录器 处理器 处理器 格式化器 格式 用法1&#xff1a;小项目可以采用编程的方法 用法2&#xff1a;建议采用配置文件的方式 用法3&#xff1a; 字典配置 日志级别 #默认的日志输出为warning # 使用baseConfig() 来指定日志输出级别 # 同时&#x…

【广州华锐互动】无人值守变电站AR虚拟测控平台

无人值守变电站AR虚拟测控平台是一种基于增强现实技术的电力设备巡检系统&#xff0c;它可以利用增强现实技术将虚拟信息叠加在真实场景中&#xff0c;帮助巡检人员更加高效地完成巡检任务。这种系统的出现&#xff0c;不仅提高了巡检效率和准确性&#xff0c;还降低了巡检成本…

【Nginx12】Nginx学习:HTTP核心模块(九)浏览器缓存与try_files

Nginx学习&#xff1a;HTTP核心模块&#xff08;九&#xff09;浏览器缓存与try_files 浏览器缓存在 Nginx 的 HTTP 核心模块中其实只有两个简单的配置&#xff0c;这一块也是 HTTP 的基础知识。之前我们就一直在强调&#xff0c;学习 Nginx 需要的就是各种网络相关的基础知识&…

C++设计模式笔记

设计模式 如何解决复杂性&#xff1f; 分解 核心思想&#xff1a;分而治之&#xff0c;将大问题分解为多个小问题&#xff0c;将复杂问题分解为多个简单的问题。 抽象 核心思想&#xff1a;从高层次角度讲&#xff0c;人们处理复杂性有一个通用的技术&#xff0c;及抽象。…

《重构的时机和方法》——让你的代码更健壮、更易维护

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主&#x1f4d5;系列专栏&#xff1a;Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

微服务体系<1>

我们的微服务架构 我们的微服务架构和单体架构的区别 什么是微服务架构 微服务就是吧我们传统的单体服务分成 订单模块 库存模块 账户模块单体模块 是本地调用 从订单模块 调用到库存模块 再到账户模块 这三个模块都是调用的同一个数据库 这就是我们的单体架构微服务 就是…

8.docker仓库

文章目录 Docker仓库本地私有仓库Docker HarborDocker harbor部署访问页面创建用户下载私有仓库镜像harbor同步 Docker仓库 本地私有仓库 ##先下载 registry 镜像docker pull registry##修改配置文件&#xff0c;在 daemon.json 文件中添加私有镜像仓库地址vim /etc/dock…