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 :
- 系统内置数据库
-
information_schema 是 MySQL 自动创建和维护的系统数据库
-
它包含所有数据库、表、列、权限等的元数据信息
-
每个 MySQL 实例都有这个数据库
- 只读访问权限
-
所有用户默认都有 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 数据库系统中都是大小写不敏感的。