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

MySQL数据库基础(DCL,DDL,DML)详解

目录

  • MySQL数据库入门:从零开始掌握数据库开发
  • 数据库概述
    • 一、MySQL 的宏观定位
      • DBMS
    • 二、MySQL 与 SQL:语言与引擎的关系
    • 三、SQL语言的三大支柱:DDL, DML, DCL
    • DCL
      • 查询所有用户
      • 创建一个用户
      • 授予用户权限
      • 登录新用户
    • DDL
      • create 创建一个数据库/表
      • drop 删除一个数据库/表
      • 创建表(comment添加注释)
      • 查看表结构
      • rename 修改表名
      • alter 更改表结构
        • 增加一个字段
        • 删除一个字段
        • 修改一个字段
        • 总结:DDL
    • DML
      • insert 插入语句
      • select(重点)查询语句
        • 查询所有部门
        • 查询带条件的部门
          • 带有 id 条件
          • 带有 name 条件
          • 同时带有 id 和 name条件 and 链接
          • 带有id 或者 name条件 or 链接
      • update更新语句
      • delete 删除语句
    • 数据库名和表名的大小写敏感性
    • 列名和别名的大小写敏感性
    • 关键字大小写敏感性

MySQL数据库入门:从零开始掌握数据库开发

MySQL数据库是我们从事开发路上必须学习的一部分。下面我们从数据库概述、基础语句、基础操作到练习题,系统性地学习MySQL数据库的基础操作。

数据库概述

一、MySQL 的宏观定位

MySQL 是一个全球最流行的开源关系型数据库管理系统。它是 LAMP(Linux, Apache, MySQL, PHP/Python/Perl)和 LEMP 现代Web应用栈的核心组件,充当着数据的“仓库”角色,负责所有数据的存储、组织、检索和管理。

DBMS

DBMS全称(Database Management system)
一套软件系统,用于创建、管理、使用和维护数据库

二、MySQL 与 SQL:语言与引擎的关系

MySQL是一个数据库管理系统,而SQL是用于管理这个系统的语言。

MySQL (DBMS):好比是一个汽车引擎。它提供动力、机制和所有运行所需的基础部件。

SQL (Language):好比是方向盘、油门和刹车。它是你与引擎交互、控制汽车的方式。

通过SQL语言向MySQL引擎发送指令,它接收、处理并返回结果。

三、SQL语言的三大支柱:DDL, DML, DCL

SQL语言根据其功能,可分为三大类,它们共同构成了数据库管理的基石。

对于应用程序开发者来说,在日常业务代码中很少编写GRANT和REVOKE语句。但对于数据库管理员和系统架构师来说,DCL是至关重要、必须熟练掌握的核心技能。

  • DDL:定义数据(创建/修改表结构)

  • DML:操作数据(增删改查表中的数据)

  • DCL:控制数据(管理权限和事务)

DCL

查询所有用户

在这里插入图片描述
一般来说,我们在管理数据库时使用 root 用户, root 用户拥有最高权限。

创建一个用户

SQL语句:

CREATE USER 'app_user'@'%' IDENTIFIED BY 'YourStrongPassword123!';
  • ‘app_user’: 自定义的用户名。

  • ‘%’: 允许从任何主机连接。为了更安全,可以限制为特定IP或域名,如 ‘192.168.1.%’ 或 ‘app-server.example.com’。

  • IDENTIFIED BY ‘…’: 设置用户的登录密码。

实践一下:在本机创建一个user_demo用户

 create user 'user_demo' @'localhost' identified by '1234';

在这里插入图片描述
创建成功,现在查看一下这个用户的权限

show grants for 'user_demo'@'localhost';

在这里插入图片描述
GRANT USAGE ON * . * 的含义:

  • 用户存在,可以连接到MySQL服务器

  • 但没有对任何数据库的任何权限

  • 不能查询、插入、修改或删除任何数据

  • 不能创建数据库或表

授予用户权限

现在我们要授予其权限,使用 grant 语句,这里我们先授予其创建、查询权限、写权限;

grant select , create , insert , update on demo_dcl.* to 'user_demo'@'localhost';

执行完毕,重新查询这个用户的权限
在这里插入图片描述

ok,有了,接下来我们退出root,改为通过user_demo这个用户访问数据库

exit;

登录新用户

mysql -u user_demo -p

之后输入密码,进入数据库
查询当前权限

show grants;

在这里插入图片描述
由于只授予了demo_dcl的权限,所以在这个用户视角只有demo_dcl这一个数据库,information_schema :

  1. 系统内置数据库
  • information_schema 是 MySQL 自动创建和维护的系统数据库

  • 它包含所有数据库、表、列、权限等的元数据信息

  • 每个 MySQL 实例都有这个数据库

  1. 只读访问权限
  • 所有用户默认都有 information_schema 的只读权限

  • 这是为了让用户能够查询数据库结构信息

  • 只能查询,不能修改其中的数据

在这里插入图片描述
选中demo_dcl数据库

use demo_dcl;

为了方便演示,已经准备好了一个dept表,现在我们看一下这个表的结构
在这里插入图片描述
由 4 个字段构成
在这里插入图片描述
根据我们赋予的权限,我们只可以查表,建表,更新表,写入表 ,是没有办法删除表中的元素的,不信来试试。

删除表的语句(删除 id = 5 的信息):
在这里插入图片描述
命令被拒绝,无法删除,所以说,一般的删库跑路是做不到滴。

回到我们的root用户

DDL

create 创建一个数据库/表

create database demo_2;

drop 删除一个数据库/表

drop database demo_2;

创建表(comment添加注释)

在这里插入图片描述

查看表结构

show create table dept;

在这里插入图片描述

 desc dept;

在这里插入图片描述

rename 修改表名

rename table 旧表名 to 新表名

在这里插入图片描述

alter 更改表结构

增加一个字段
alter table new_dept add email varchar(50);

在这里插入图片描述

删除一个字段
alter table new_dept drop email;

在这里插入图片描述

修改一个字段
alter table new_dept modify column name varchar(200);

在这里插入图片描述

总结:DDL

主要操作集中在数据库和表结构上

DML

insert 插入语句

insert into 表名 value(与表名对应的值);
INSERT INTO new_dept(id, name, create_time, update_time) VALUES (1,'学工部','2023-09-25 09:47:40','2024-07-25 09:47:40'),(2,'教研部','2023-09-25 09:47:40','2024-08-09 15:17:04'),(3,'咨询部','2023-09-25 09:47:40','2024-07-30 21:26:24'),(4,'就业部','2023-09-25 09:47:40','2024-07-25 09:47:40'),(5,'人事部','2023-09-25 09:47:40','2024-07-25 09:47:40'),(6,'行政部','2023-11-30 20:56:37','2024-07-30 20:56:37');

select(重点)查询语句

select 需要查询的字段 from 表名 where 条件过滤
查询所有部门
* 代表查询所有

在这里插入图片描述

查询带条件的部门
带有 id 条件

查询 id = 1 的部门所有信息

 select * from new_dept where id = 1;

在这里插入图片描述

带有 name 条件

查询 name = ‘教研部’ 的部门所有信息

 select * from new_dept where name= '教研部';

在这里插入图片描述

同时带有 id 和 name条件 and 链接

查询 id = 3 并且 name = ‘教研部’ 的部门所有信息

 select * from new_dept where id= 3 and name= '教研部';

在这里插入图片描述

带有id 或者 name条件 or 链接

查询 id = 3 或者 name = ‘教研部’ 的部门所有信息
在这里插入图片描述

update更新语句

将 id = 3 的部门 name 更新为后勤部

update new_dept set name ='后勤部' where id = 3;

在这里插入图片描述

delete 删除语句

删除 id = 2 和 name ='后勤部’的信息

delete from new_dept where id = 2 or name = '后勤部';

在这里插入图片描述

数据库名和表名的大小写敏感性

这个层面的敏感性主要取决于操作系统。

  • 操作系统: Linux / Unix 大小写敏感 mytable 和 MyTable 是两个不同的表
  • 操作系统: Windows / macOS 大小写不敏感

列名和别名的大小写敏感性

列名和别名在任何平台上都是大小写不敏感的

关键字大小写敏感性

SQL 关键字(如 SELECT, FROM, WHERE, INSERT, UPDATE 等)在所有的 SQL 数据库系统中都是大小写不敏感的。


文章转载自:

http://pGNeuWUz.mLycx.cn
http://PzfsObBS.mLycx.cn
http://9tTAK7Zp.mLycx.cn
http://vA43kYfO.mLycx.cn
http://MpD2eyQS.mLycx.cn
http://0pLEGwtk.mLycx.cn
http://5S9tF2B6.mLycx.cn
http://BqUfLphZ.mLycx.cn
http://V4mM0KP7.mLycx.cn
http://WrOQ58gP.mLycx.cn
http://PTY1UgY0.mLycx.cn
http://mXCLvFOW.mLycx.cn
http://KjO9k760.mLycx.cn
http://dzA0k38J.mLycx.cn
http://nzxvzGWp.mLycx.cn
http://cvvhm3bR.mLycx.cn
http://4B5SwI1X.mLycx.cn
http://wqfSX6Lt.mLycx.cn
http://YsdOu6BT.mLycx.cn
http://Khxwdew7.mLycx.cn
http://I5ASGpn0.mLycx.cn
http://PIkn9Z93.mLycx.cn
http://LWJjB85f.mLycx.cn
http://6jA0girs.mLycx.cn
http://zkwgupUR.mLycx.cn
http://bbmbufRm.mLycx.cn
http://HNcfBiMQ.mLycx.cn
http://TOIzcXJU.mLycx.cn
http://056EORG2.mLycx.cn
http://AYmWMYVt.mLycx.cn
http://www.dtcms.com/a/368323.html

相关文章:

  • 反序列化的学习笔记
  • Kafka 内存池MemoryPool 设计
  • 【论文阅读】FedsNet: the real‑time network for pedestrian detection based on RT‑DETR
  • Selenium元素定位终极指南:8种方式全面解析+实战代码,告别找不到元素的烦恼!
  • 【MFC Picture Control 控件属性】
  • 迁移学习实战:基于 ResNet18 的食物分类
  • python用selenium怎么规避检测?
  • Rust 的生命周期与借用检查:安全性深度保障的基石
  • 面试 TOP101 贪心专题题解汇总Java版(BM95 —— BM96)
  • 软件启动时加配置文件 vs 不加配置文件
  • 工业跨网段通信解决方案:SG-NAT-410 网关,无需改参数,轻松打通异构 IP 网络
  • Elasticsearch-java 使用例子
  • 我改写的二分法XML转CSV文件程序速度追上了张泽鹏先生的
  • GPU测速方法
  • OpenCV C++ 色彩空间详解:转换、应用与 LUT 技术
  • 前端笔记2025
  • 跨境电商:如何提高电商平台数据抓取效率?
  • python + Flask模块学习 2 接收用户请求并返回json数据
  • K8S-Pod(上)
  • 【代码随想录day 23】 力扣 93.复原IP地址
  • 数据结构:栈和队列(下)
  • SAP官方授权供应商名单2025
  • 结构体简介
  • UE4 Mac构建编译报错 no template named “is_void_v” in namespace “std”
  • 嵌入式系统学习Day30(udp)
  • 【Linux】Linux进程状态和僵尸进程:一篇看懂“进程在忙啥”
  • 理解UE4中C++17的...符号及enable_if_t的用法及SFINAE思想
  • 某头部能源集团“数据治理”到“数智应用”跃迁案例剖析
  • 阿里云服务器配置ssl-docker nginx
  • 2025年COR SCI2区,基于近似细胞分解的能源高效无人机路径规划问题用于地质灾害监测,深度解析+性能实测