[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,一经查实,立即删除!

相关文章

[NOIP2006 普及组] 明明的随机数

题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到 1000 之间的随机整数 (N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同…

webpack使用详解

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

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

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

找树根和孩子c++

题目描述 给定一棵树&#xff0c;输出树的根root&#xff0c;孩子最多的结点max以及他的孩子 输入 第一行&#xff1a;n&#xff08;0<结点数<100&#xff09;&#xff0c;m&#xff08;0<边数<200&#xff09;。 以下m行&#xff1b;每行两个结点x和y&#xf…

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

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

数据挖掘(七)

数据挖掘&#xff08;七&#xff09; 文章目录 数据挖掘&#xff08;七&#xff09;加载数据集用现有模型进行分类构建网络 寻找子图连通分支 社交网络具有很高的商业价值&#xff0c;比如QQ、微信等拥有大量活跃用户的应用&#xff0c;通过投放广告可以获得不菲的收入。对于网…

深度学习-迁移学习

深度学习中的迁移学习是通过在大规模数据上训练的模型&#xff0c;将其知识迁移到数据相对较少的相关任务中&#xff0c;能显著提升目标任务的模型性能。 一、迁移学习的核心概念 源任务&#xff08;Source Task&#xff09;与目标任务&#xff08;Target Task&#xff09;&…

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

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

flutter 写个简单的界面

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

.NET 8 中 Entity Framework Core 的使用

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

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

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

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

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

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

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

指派问题的求解

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

商品满减、限时活动、折扣活动的计算最划算 golang

可以对商品的不同活动&#xff08;如满减、限时价和折扣&#xff09;进行分组&#xff0c;并在购物车中显示各个活动标签下的最优价格组合。以下代码将商品按活动类别进行分组计算&#xff0c;并输出在购物车中的显示信息。 package mainimport ("fmt""math&qu…

AWS RDS Oracle hit ORA-39405

报错信息&#xff1a; ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version 42 into a target database with TSTZ version 35. 分析过程&#xff1a; 这个报错是由于timezone_file的版本&#xff0c;源端比目标端高&#xf…

显卡服务器和普通服务器之间的区别有哪些?

显卡服务器也被称之为GPU服务器&#xff0c;显卡服务器与普通的服务器之间有着很明显的区别&#xff0c;下面就让我们共同来了解一下吧&#xff01; 普通服务器的主要处理器通常都是配备的中央处理器&#xff0c;可以用于执行大部分通用计算任务和操作系统的管理&#xff1b;而…

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

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

Python自动化运维:技能掌握与快速入门指南

#编程小白如何成为大神&#xff1f;大学生的最佳入门攻略# 在当今快速发展的IT行业中&#xff0c;Python自动化运维已经成为了一个不可或缺的技能。本文将为您详细介绍Python自动化运维所需的技能&#xff0c;并提供快速入门的资源&#xff0c;帮助您迅速掌握这一领域。 必备…

深入理解跨域资源共享(CORS)安全问题原理及解决思路

目录 引言 CORS 基础 CORS 安全问题原理 解决思路 结论 引言 跨域资源共享&#xff08;CORS, Cross-Origin Resource Sharing&#xff09;是现代Web应用中不可或缺的一部分&#xff0c;特别是在前后端分离的架构中。CORS允许一个域上的Web应用请求另一个域上的资源&#…