[mysql]数据定义语言DDL和数据操作语言DCL

目录

前文提要

数据定义语言DDL

数据操作语言DML

数据控制语言DCL

基础知识:

标识符(命名规则):

数据定义语言DDL

创建和管理数据库.:

管理数据库

切换数据库

修改数据库

更改数据库字符集

删除数据库

如何创建表

方式1:”白手起家的方式”创建表

方式2:已经有家底的方式,基于现有的表,去创建新的表

数据控制语言DCL

DCL中COMMIT和ROLLBACK的讲解

对比TRUNCATE TABLE 和DELETE FROM


前文提要

到这里我们就把sql查询部分都解决了

前面我们说,SQL被分为3类语句

数据定义语言DDL

CREATE;ALTER;DROP;RENAME;TRUNCATE

数据操作语言DML

INSERT;DELETE;UPDATE;SELECT

数据控制语言DCL

COMMIT;ROLLBACK;SAVEPOINT;GRANT;REVOKE

现在我们把数据操作语言都讲解完了,我们要开始了解数据定义语言.

因为我们必须先创建表才能插入表,修改表,删除表,查询表,

删除表的时候,我们再将数据控制语言,我们会比较浅的讲解一下事务的内容

GRANT和REVOKE我们就后面权限的内容.是下篇的内容.

下面的内容我们会先讲DDL定义语言,然后在删除表的内容中顺便将DCL中的事物commit和rollback内容讲一下.

然后再讲DML中的插入,删除,更新表.查询是之前已经讲过了

基础知识:

巧妇难为无米之炊,数据库是一个整体.我们有一个data的文件里算一个数据库服务器,里面有一个个数据库,数据库里有一个个表.

我们就要先创建数据库,

标识符(命名规则):

这个就是命名的规则:

1表名和数据库名不能超过30个,变量不能超过29个

2只能包含A-Z,a-z,0-9

3不能有空格

4不能同名

5不能和关键词,函数,如果必须要用,那就得用着重号,也就是反引号.

比如ORDER

6保持字段名和类型的一致性.比如数据类型在一个表里是整数型,在另一个表里就千万不要变成字符串了..

之后讲到约束的时候会说到一致性和完整性的内容.

不然每次操作的时候都会转换类型,会很麻烦.

所以这些是必须遵守的规则

数据定义语言DDL

创建和管理数据库.:

如何创建数据库.这里我们列了3种方式.

关键词IF NOT EXISTS

CREATE DATABASE mytest1

注意我们这里是要有权限,我们现在用的是ROOT用户,所以是一定可以创建的.根部用户

SHOW DATABASES

CREATE DATABAS mytest1 CHARATER SET ‘’#这里是要设置字符集

SHOW CREATE DATABASE mytest1

这里我们看看数据库的信息,我们可以查看字符集

这里的字符集是utf8mb4,因为我们默认的字符集就是这个..

SHOW variables like ‘character_%’

CREATE DATABAS mytest2 CHARATER SET ‘GBK’#这里是要设置字符集

#显示了指明了我们需要的字符集

SHOW CREATE DATABASE mytest2

关键词IF NOT EXISTS,为了不报错已经存在的数据库

我们就运行

CREATE DATABAS mytest2 CHARATER SET ‘GBK’

这里我们可以发现,是没有报错的.这里我们看看是覆盖了还是没有执行

CREATE DATABAS mytest2 CHARATER SET ‘UTF8’

SHOW CREATE DATABASE mytest2

所以如果数据库已经存在,创建是会报错,如果不存在就会IS NOT EXISTS不存在就不会报错,也不会覆盖.

管理数据库

我们接下来看看如何使用数据库

SHOW DATABASEs

查看当前连接的数据库有哪些.

切换数据库

USE mytest2

查看数据库中有哪些表.

SHOW TABLES

查看当前使用的数据库.

SELECT DATABASE() FROM DUAL

查看指定数据库下保存的数据表

SHOW TABLES FROM mysql

这是完整的写.如果我们已经用了数据库那么我们就不用写FROM

修改数据库

我们一般都不会修改数据库了,我们因为表里很多内容,如果修改数据库,那么成本是很高的.

CREATE DATABASE mytest2

查看创建数据表的结构.什么我们创建了mytest2

现在我们想改成utf8的字符集

更改数据库字符集

ALTER DATABASE mytest2 CHARACTER SET ‘utf8’

数据库是不能改名的,如果要改名只能新建立一个,然后把表复杂进去.轻易我们不会修改

删除数据库

如果存在就删除成功,如果不存在失败并报错

DROP DATABASE mytest1

如果存在就删除成功,不存在默默结束,不会报错.

DROP DATABASE IF EXISTS mytest1

注意这里大家可以联系一下,但是千万不要用关键的数据库来练习,如果删除了那就是永久的.,所以拿新建立的表来

如何创建表

创建表要知道表里有哪些字段和字段是那种类型,比如员工id,部门

Mysql中的数据类型

现在只讲一个简单的数据类型.因为数据类型有规范,如果选择数据类型偏大,会导致它占用空间太大.

数值类型:

现在只用INT,DECIMAL(目前我们先用DOUBEL)

日期类型

字符串类型

VARCHAR

空间数据类型

空间数据类型用的比较少

我们之后有专门的一章讲这个问题.

方式1:”白手起家的方式”创建表

USE atguigudb

SHOW CREATE DATABASE atguigudb

我们创建数据库用的是CREATE DABASE 创建表用的就是 TABLE

这里还是需要我们有创建表的权限,因为我们是根用户,所以我们肯定是有权限的.下篇我们会讲权限的内容.另外,因为我们有可能有重复的表会报错,所以我们也能使用关键词IF NOT EXISTS

CREATE TABLE IF NOT EXISTS myempl(

ID INT,

EMP_name VARCHAR(15)

HIRE_datae DATE

)

这里我们姑且先用这些简单的类型来创建字段.

查看表结构DESC

DESC myemp1

使用VARCHAR是可变的字符串长度,我们要指明其长度.

SHOW CREATE TABLE myemp1

#默认使用的是utf8,如何创建表没有指明使用的字符集,会使用表所在数据库的字符集.

SELECT * FROM myemp1

方式2:已经有家底的方式,基于现有的表,去创建新的表

我们直接使用AS,

CREATE TABLE myemp2

AS

SELECT employee_id,last_name,salary

FROM employees;

这样myemp2会不会有数据,这里不仅仅只是基于表的结构,还会顺带导入数据

这里我们可以给表起一个别名,如果建立的新表,它的别名也是我们查询中的别名.查询语句也可以结构比较丰富,使用前面讲的的SELECT内容.

CREATE TABLE myemp3

AS

SELECT employee_id,department_id,salary

FROM employees

WHERE department_id>(

        SELECT department_id

        FROM employees

        WHERE employee_id=149)

练习1:创建表employees_copy 实现对employees表的复制,包括表数据

CREATE employees_copy

AS

SELECT * FROM employees

SELECT * FROM employees_copy

这是复制的,删除一个表,另一个表是不会有影响的

练习2:创建一个表employees_blank实现对employees表的复制,不包括表数据.

CREATE TABLE employees_copy

AS

SELECT * FROM employees

WHERE 'a'='b'

SELECT * FROM employees_copy

这里我们可以把字段全部筛去,比如员工id大于0,这里我们可以选择一个绝对不可能,山无陵天地合乃刚与君绝,这就可以将数据表的结构复制了.

数据控制语言DCL

DCL中COMMIT和ROLLBACK的讲解

COMMIT:提交数据,一旦执行COMMIT数据就被永久保存内容,意味数据不可以回滚

ROLLBACK:回滚数据,一旦ROLLBACK撤销,就可以回滚到最近的一次COMMIT之后,如果COMMIT的之前就不能撤销了.

比如C1运行一次comitc2运行一次commit c3没有运行,那么c3就会被撤销

事务我们先不解释,那么我们先把这两个和

对比TRUNCATE TABLE 和DELETE FROM

相同点:都可以实现对表的数据删除,表结构还在

不同点:

TRUNCATE TABLE表数据全部清除,同时数据不可以回滚

DELECT FROM 一旦执行此操作,表数据可以全部清除.不带WHERE就可以全部清除,可以实现回滚,也可以不实现,我们就可以引入

DDL数据定义语言和DML数据操作语言

DDL的操作,创建表,删除表,创建数据库,删除数据库一旦运行,就不能撤回

DML的操作,默认情况下一旦执行也是不能回滚但是我们可以修改参数SET autocommit =FALSE,则执行DML操作就可以进行回滚,

也就是这个参数值只对DML生效

演示:

DELETE FROM 我们建立一个表

CREATE TABLE myemp3

AS

SELECT * FROM employees

我们先COMMIT一下

然后取消一下不能撤销关键词

SET autocommit =FALSE

删除一下表

DELETE FROM myemp3

我们查询之后就没有数据了

我们回滚一下再查询

发现回滚有效,是不是就ROLLBACK到我们COMMIT之后.

现在我们再进行一下TRUNCATE TABLE

实际DDL有一个自动的COMMIT操作,这个操作不会收到关键词 AUTOCOMMIT影响

因为他只影响DML

所以使用DDL一定要谨慎.

DCL中和事务相关的内容我们就说到这,剩下的我们下篇再继续说事务的事

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webpack使用详解

摘要:webpack作为一款主流的构建工具,对比后来者Vite虽然存在一些缺点,例如启动慢,配置复杂等。在很多项目中使用依然基于webpack构建,有必要掌握其概念、构建流程和配置方法。 1 webpack概述 1.1 基本概念 webpack …

基于YOLO11/v10/v8/v5深度学习的维修工具检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

Zypher Network:全栈式 Web3 游戏引擎,服务器抽象叙事的引领者

近期,《黑神话:悟空》的爆火不仅让 AAA 游戏重回焦点,也引发了玩家与开发者的热议。Web2 游戏的持续成功导致部分 Web3 玩家们的倒戈,对比之下 Web3 游戏存在生命周期短且商业模式难以明确的问题,尤其在当前加密市场环…

H7-TOOL自制Flash读写保护算法系列,为兆易创新GD32E23X制作使能和解除算法,支持在线烧录和脱机烧录使用(2024-10-29)

说明: 很多IC厂家仅发布了内部Flash算法文件,并没有提供读写保护算法文件,也就是选项字节算法文件,需要我们制作。 实际上当前已经发布的TOOL版本,已经自制很多了。但是依然有些厂家还没自制,所以陆续开始…

flutter 写个简单的界面

起因, 目的: 来源: 客户需求。 着急要,我随便写的,应付一下。 过程: 略,直接看代码,看注释。 代码 1 xxx import package:flutter/material.dart;void main() {runApp(const MyApp()); }// # class MyApp extends…

.NET 8 中 Entity Framework Core 的使用

本文代码:https://download.csdn.net/download/hefeng_aspnet/89935738 概述 Entity Framework Core (EF Core) 已成为 .NET 开发中数据访问的基石工具,为开发人员提供了强大而多功能的解决方案。随着 .NET 8 和 C# 10 中引入的改进,开发人…

推荐一款可视化和检查原始数据的工具:RawDigger

RawDigger是一款强大的工具,旨在可视化和检查相机记录的原始数据。它被称为一种“显微镜”,使用户能够深入分析原始图像数据,而不对其进行任何更改。RawDigger并不是一个原始转换器,而是一个帮助用户查看将由转换器使用的数据的工…

第三十三章 Vue路由进阶路由模块封装

目录 一、引言 二、完整代码 main.js index.js App.vue Find.vue My.vue 一、引言 在上一个章节中,我们将所有的路由配置都堆在main.js中来实现路径组件的路由,这样做的话非常不利于我们后期对项目的维护。因此正确的做法是将路由模块抽离出来&a…

基于java+SpringBoot+Vue的新闻推荐系统设计与实现

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven mysql5.7或8.0等等组成&#x…

指派问题的求解

实验类型:◆验证性实验 ◇综合性实验 ◇设计性实验 实验目的:学会使用Matlab求解指派问题。 实验内容:利用Matlab编程实现枚举法求解指派问题。 实验例题:有5人分别对应完成5项工作,其各自的耗费如下表所示&#…

下载安装COPT+如何在jupyter中使用(安装心得,windows,最新7.2版本)

目录 1.到杉树科技官网申请下载COPT 2.安装COPT&配置许可文件 3.在jupyter中使用COPT的python接口 最近看到一本和数学建模有关的新书:《数学建模与数学规划:方法、案例及编程实战》,作为数学建模老手,肯定要学习一下&…

基于“互联网+”医养结合的智慧养老实训室建设方案

一、建设背景 根据国家统计局的数据,截至2023年末,我国60岁及以上的老年人口已达到29,697万人,占总人口的21.1%;其中,65岁及以上的人口为21,676万人,占总人口的15.4%。这一数据表明,我国正面临…

为什么需要MQ消息系统,mysql 不能满足需求吗?

大家好,我是锋哥。今天分享关于【为什么需要MQ消息系统,mysql 不能满足需求吗?】面试题?希望对大家有帮助; 为什么需要MQ消息系统,mysql 不能满足需求吗? 1000道 互联网大厂Java工程师 精选面试…

计算机网络-以太网小结

前导码与帧开始分界符有什么区别? 前导码--解决帧同步/时钟同步问题 帧开始分界符-解决帧对界问题 集线器 集线器通过双绞线连接终端, 学校机房的里面就有集线器 这种方式仍然属于共享式以太网, 传播方式依然是广播 网桥: 工作特点: 1.如果转发表中存在数据接收方的端口信息…

C/C++常用编译工具链:GCC,Clang

目录 GNU Compiler Collection GCC的优势 编译产生的中间文件 Clang Clang的特点 什么是LLVM? Clang编译过程中产生的中间表示文件 关于Clang的调试 C 编译工具链中有几个主要的编译工具,包括: GNU Compiler Collection (GCC…

NNLM——预测下一个单词

一、原理篇 NNLM(Neural Network Language Model,神经网络语言模型)是一种通过神经网络进行语言建模的技术,通常用于预测序列中的下一个词。 NNLM的核心思想是使用词嵌入(word embedding)将词转换为低维向…

【C++】类和对象(十二):实现日期类

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的实现日期类&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1 /!/>/</>/<运算符重载2 /-//-运算符重载(A) 先写&#xff0c;再通过写(B…

KTHREAD--InitialStack和KernelStack和TSS的esp0

InitialStack和TSS.esp0的关系,在这里可以看到 mov ecx, [esi_KTHREAD.InitialStack] ; esi: newthread lea eax, [ecx-210h] ; 越过FPXSAVE指令存储地址 test byte ptr [eax-1Ah], 2 ; 判断efalgs寄存器的VIF位是否为1 jnz short loc_458743 sub eax, 10h…

xlrd.biffh.XLRDError: Excel xlsx file; not supported

文章目录 一、问题报错二、报错原因三、解决思路四、解决方法 一、问题报错 在处理Excel文件时&#xff0c;特别是当我们使用Python的xlrd库来读取.xlsx格式的文件&#xff0c;偶尔会遇到这样一个错误&#xff1a;“xlrd.biffh.XLRDError: Excel xlsx file; not supported”。…

二叉树进阶-二叉搜索树

目录 1.二叉树的概念 2.二叉搜索树的操作 2.1二叉搜索树的结构 2.2实现节点的查找&#xff08;find&#xff09; 2.3实现增加节点&#xff08;insert&#xff09; 2.4实现删除节点&#xff08;erase&#xff09; 2.5析构函数 2.6二叉搜索树的完整实现 3.二叉搜索树的应…