MySQL数据库语言(DDL,DML,DCL,DQL)

文章目录

前言

一、DDL语言

数据库的操作

表的操作 

二、DML语言

插入数据

修改数据

删除数据

面试题:

三、DCL语言

新建用户

授予权限

撤销权限

查看用户权限

删除用户

修改用户密码

四、DQL语言

总结


前言

        上一篇讲到Mysql数据库的基本概念和它的分类,其中就讲到了数据库语言的四种分类,这四种语言是数据库管理系统(DBMS)中的常用语言,用于对数据库进行定义、操作、控制和查询。不同的DBMS可能有略微不同的语法和特性。这篇文章主要讲述数据库语言的分类及各自的用法。

一、DDL语言

        DDL语言(Data Definition Language)是用来定义和管理数据库中的数据结构的语言。DDL语言包括创建表、删除表、修改表结构等操作。

数据库的操作

#语法:
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARACTER SET 字符集 COLLATE 排序规则字符集];
#创建数据库:
CREATE DATABASE [IF NOT EXISTS] mydb1;

创建数据库,例如:CREATE DATABASE mydb1,创建一个名为mydb1的数据库。如果这个数据已经存在,那么会报错。例如CREATE DATABASE IF NOT EXISTS mydb1,在名为mydb1的数据库不存在时创建该库,这样可以避免报错。

DEFAULT CHARACTER: 默认的字符集, 如果没有设置,默认是utf8。

COLLATE: 排序规则, 如果没有设置,默认是: utf8_general_ci。

#删除数据库:
DROP DATABASE [IF EXISTS] mydb1;

删除数据库,例如:DROP DATABASE mydb1,删除名为mydb1的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算mydb1不存在,也不会的报错。

#修改数据库编码:
ALTER DATABASE mydb1 CHARACTER SET utf8

修改数据库mydb1的编码为utf8。注意,在MySQL中所有的UTF-8编码都不能使用中间的“-”,即UTF-8要书写为UTF8。

表的操作 

 创建表:

CREATE TABLE 表名(
 列名 列类型,
 列名 列类型,
 ......
);

表的其他操作(包含对列的操作):

--查看当前数据库中所有表名称:
SHOW TABLES;
--查看指定表的创建语句:  查看emp表的创建语句;
SHOW CREATE TABLE emp;

--查看表结构:
DESC emp; --查看emp表结构;

--删除表:
DROP TABLE emp; --删除emp表;

--修改表:
--1. 修改之添加列:给stu表添加classname列:
ALTER TABLE stu ADD (classname varchar(100));

--2. 修改之修改列类型:修改stu表的gender列类型为CHAR(2):
ALTER TABLE stu MODIFY gender CHAR(2);

--3. 修改之修改列名:修改stu表的gender列名为sex:
ALTER TABLE stu change gender sex CHAR(2);

--4. 修改之删除列:删除stu表的classname列:
ALTER TABLE stu DROP classname;

--5. 修改之修改表名称:修改stu表名称为student:
ALTER TABLE stu RENAME TO student;

二、DML语言

        DML(Data Manipulation Language)是一种数据库操作语言,用于查询、插入、更新和删除数据库中的数据。DML通常用于与数据库管理系统进行交互,对数据库中的数据进行操作和处理。

插入数据

#往表中插入数据
INSERT INTO 表名(列名1,列名2, …) VALUES(值1, 值2)

#插入全部列语法
INSERT INTO 表名 VALUES(值1,值2,…)

注意:所有字符串数据必须使用单引用

修改数据

#修改表中的数据
UPDATE 表名 SET 列名1=值1, … 列名n=值n [WHERE 条件]

删除数据

#带条件的删除表中数据
DELETE FROM 表名 [WHERE 条件]

#删除所有  慎用
DELETE FROM 表名;

面试题:

TRUNCATE和DELETE的区别?(两个都可以删除表数据)

DELETE FROM 表名;

TRUNCATE TABLE 表名

1. delete属于DML语句, truncate属于DDL。

2. delete删除可以接条件, truncate不能加条件。

3. delete删除,只是把表中数据删除, truncate删除, 把表删除, 再重新创建表, delete删除, 自增列不会还原, truncate删除, 自增列还原。

4. delete删除可以回滚, truncate 不能回滚。

注意: 在实际开发中, 不会直接使用delete进行数据删除, 这种删除称为硬删除,物理删除

实际开发中, 使用逻辑删除, 软删除, 表中添加一列: 是否删除 0: 未删除 1:删除

 

三、DCL语言

        DCL语言(Data Control Language)是数据库管理系统(DBMS)中的一种语言,用于授权和控制数据库中的数据和数据库对象的访问权限。DCL语言通常用于管理员或拥有特权的用户管理数据库,包括授予和撤销用户权限、管理角色、创建和删除数据库对象等操作。

新建用户

CREATE USER 用户名@地址 IDENTIFIED BY '密码';

@的地址不同访问的权限也不同

--user1用户只能在localhost这个IP登录mysql服务器
CREATE USER user1@localhost IDENTIFIED BY '123';

--user2用户可以在任何电脑上登录mysql服务器
CREATE USER user2@'%' IDENTIFIED BY '123';

新建的用户没有任何权限, 无法访问任何数据库, 只能登录。

授予权限

GRANT 权限1, … , 权限n ON 数据库.* TO 用户名;
#案例
GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;

下图为集中常见权限描述:

其他权限描述及含义,可以直接参考 MySQL :: MySQL 8.0 Reference Manual :: 8.2.2 Privileges Provided by MySQL

 

撤销权限

REVOKE权限1, … , 权限n ON 数据库.* FORM 用户名;
#案例
REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;

查看用户权限

SHOW GRANTS FOR 用户名;
#案例
SHOW GRANTS FOR user1@localhost;

删除用户

DROP USER 用户名;
#案例
DROP USER user1@localhost;

注意事项:

• 在MySQL中需要通过用户名@主机名的方式,来唯一标识一个用户。

• 主机名可以使用 % 通配。

• 这类SQL开发人员操作的比较少,主要是DBA( Database Administrator 数据库管理员)使用。

修改用户密码

USE mysql;
UPDATE USER SET authentication_string=PASSWORD('密码') WHERE User='用户名' and Host='IP';
FLUSH PRIVILEGES;

四、DQL语言

        DQL(Data Query Language)是一种用于从数据库中检索数据的语言。它是SQL(Structured Query Language)的一个子集,专门用于查询数据。DQL允许用户使用各种条件和筛选器来检索数据库中的特定数据,包括使用WHERE子句来限制结果集,使用ORDER BY子句来排序结果,使用GROUP BY子句来对结果进行分组等。通过使用DQL语言,用户可以根据特定的需求从数据库中获取所需的数据。

DQL语言的检索语法(书写时,必须按照这个顺序写,不然会报错):

SELECT selection_list /*要查询的列名称*/

 FROM table_list /*要查询的表名称*/

 WHERE condition /*行条件*/

 GROUP BY grouping_columns /*对结果分组*/

 HAVING condition /*分组后的行条件*/

 ORDER BY sorting_columns /*对结果分组*/

 LIMIT offset_start, row_count /*结果限定*/

        关于DQL语言有很多内容,我会放在专门的一篇博客来讲述,同时还有关于联合查询和子查询等查询方法。


总结

        这篇文章主要讲述了关于四种数据库管理系统的常用语言,其中比较重要的是DML语言和DQL语言,但是由于DQL涉及到的查询内容颇多,所以我会专门讲述,这里只讲到了相关概念和语法。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 07:42:02       106 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 07:42:02       116 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 07:42:02       95 阅读
  4. Python语言-面向对象

    2024-03-25 07:42:02       103 阅读

热门阅读

  1. TS快速入门笔记-第一章

    2024-03-25 07:42:02       36 阅读
  2. 3月23日,每日信息差

    2024-03-25 07:42:02       47 阅读
  3. mac安装openresty

    2024-03-25 07:42:02       39 阅读
  4. conda常用命令

    2024-03-25 07:42:02       45 阅读
  5. 【生产力】Mac 窗口布局工具 Magnet

    2024-03-25 07:42:02       40 阅读
  6. MacOS安装Homebrew教程

    2024-03-25 07:42:02       33 阅读
  7. 前端面试集中复习 - http篇

    2024-03-25 07:42:02       41 阅读
  8. web前端(3.16笔记 html 标签)

    2024-03-25 07:42:02       36 阅读
  9. PHP之CURL和Socket

    2024-03-25 07:42:02       45 阅读