[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.xdnf.cn/news/320.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

redis:基本全局命令-键管理(1)

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言KEYSEXISTSDELEXPIRETTLTYPE 总结 前言 本文是作为基本全局命令-键管理的学习笔记 redis 是按照键值对的方式存储数据的,red…

【工具变量】大数据管理机构改革DID(2007-2023年)

数据简介:数字ZF是指以新一代信息技术为支撑,重塑政务信息化管理架构、业务架构、技术架构的现代化治理模式。随着数字政府的建设,特别是借助大数据等新一代数字技术,极大地提升了政府的治理能力,从而起到辅助监管机构…

自编以e为底的对数函数ln,性能接近标准库函数

算法描述: (1). 先做自变量x的范围检查,不能出现负数和0. 自己使用时,如果能通过其它途径保证自变量为正,那么可以省略这两个判断,提高速度。 (2). 根据IEEE 754浮点数的格式,,则 ln(x)kln(2)ln…

[vulnhub] billu: b0x

https://www.vulnhub.com/entry/billu-b0x,188/ 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的,所以靶机IP是168 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-28 18:54 CST Nmap scan report for 192.…

《机器人SLAM导航核心技术与实战》第1季:第10章_其他SLAM系统

视频讲解 【第1季】10.第10章_其他SLAM系统-视频讲解 【第1季】10.1.第10章_其他SLAM系统_RTABMAP算法-视频讲解 【第1季】10.2.第10章_其他SLAM系统_VINS算法-视频讲解 【第1季】10.3.第10章_其他SLAM系统_机器学习与SLAM-视频讲解 第1季:第10章_其他SLAM系统 …

JDK8---Stream流详解

Stream流 一.概述二.数据准备二.Stream流的创建2.1 单列集合创建Stream流.2.2 数组创建Stream流2.3 双列集合创建Stream流 三. 中间操作.3.1 filter(过滤操作)3.2 map(计算或者转换)3.3 distinct(去重操作)3.4 sorted(排序操作)3.5 limit (设置流的长度)3.6 skip(跳过前n个元素…

tcp shutdown, fin_wait1, fin_wait2, close_wait, last_ack, 谢特!

TCP 作为双向传输协议,如果你想只收不发,可以单向关掉发,shutdown(socket.SHUT_WR),但不建议这么做。 看以下代码: #!/Users/zhaoya/myenv/bin/python3 # client import socketclient_socket socket.socket(socket.…

算法详解——线段树

1. 线段树介绍 线段树是一个高度平衡二叉树,它主要用来高效动态地管理一个序列。线段树叶子结点存储序列元素值,分支结点存储一个连续地子区间的某种聚合信息,例如最值、均值等信息。 如图所示: 用这样一个树状结构来管理序列…

XXL-JOB

Github 地址: https://github.com/xuxueli/xxl-job/ 。 官⽅介绍: https://www.xuxueli.com/xxl-job/ 。 XXL-JOB 于 2015 年开源,是⼀款优秀的轻量级分布式任务调度框架,⽀持任务可视化管理、弹性 扩容缩容、任务失败重试和告…

基于 Python 的 Django 框架开发的电影推荐系统

项目简介:本项目是基于 Python 的 Django 框架开发的电影推荐系统,主要功能包括: 电影信息爬取:获取并更新电影数据。数据展示:提供电影数据的列表展示。推荐系统:基于协同过滤算法实现个性化推荐。用户系…

服务器的免密登录和文件传输

在天文学研究中,通常会采用ssh登录服务器,把复杂的计算交给服务器,但是如果你没有进行额外的配置,那么登录服务器,以及和服务器进行文件传输,每次都要输入账号和密码,比较不方便,Win…

interrupt、interrupted、isInterrupted方法详解

interrupt方法的源码: public void interrupt() {if (this ! Thread.currentThread())checkAccess();synchronized (blockerLock) {Interruptible b blocker;if (b ! null) {interrupt0(); //仅仅对当前线程的中断位进行标记b.interrupt();return;}}interrupt0()…

yarn 下载安装、下载依赖、通过 vscode 运行服务(Windows11)

目录 yarn工具前置要求:安装node.js并配置好国内镜像源下载安装下载依赖特别的: 启动服务 yarn 工具 系统:Windows 11 前置要求:安装node.js并配置好国内镜像源 参考:本人写的《node.js下载、安装、设置国内镜像源…

JDK8 Kylin jdk-8u341-linux-x64.tar.gz

JDK8 Kylin jdk-8u341-linux-x64.tar.gz chmod 777 jdk-8u341-linux-x64.tar.gz tar -zxvf jdk-8u341-linux-x64.tar.gz chmod 777 -R jdk1.8.0_341 vi /etc/profile ESC :wq source /etc/profile java -version eclipse JRE tomcat

ssm基于vue框架和elementui组件的手机官网+vue

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2 目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 2.1 SSM框…

如何封装一个可取消的 HTTP 请求?

前言 你可能会好奇什么样的场景会需要取消 HTTP 请求呢? 确实在实际的项目开发中,可能会很少有这样的需求,但是不代表没有,比如: 假如要实现上述这个公告栏,每点击一个 tab 按钮就会切换展示容器容器中…

关于武汉芯景科技有限公司的马达驱动芯片AT6237开发指南(兼容DRV8837)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 逻辑功能

sqlserver、达梦、mysql调用存储过程(带输入输出参数)

1、sqlserver,可以省略输出参数 --sqlserver调用存储过程,有输入参数,有输出参数--省略输出参数 exec proc_GetReportPrintData 1, , , 1--输出参数为 null exec proc_GetReportPrintData 1, , , 1, null--固定输出参数 exec proc_GetReport…

leetcode 1470.重新排列数组

1.题目要求: 2.题目代码: class Solution { public:vector<int> shuffle(vector<int>& nums, int n) {vector<int> x_array(nums.begin(),nums.begin() n);vector<int> y_array(nums.begin() n,nums.end());int x_index 0;int y_index 0;for…

各地级市能源消耗量数据-基于灯光数据的反演(2000-2022年)

今天带来的数据是的全国各省市能源消耗量数据&#xff0c;省级的能源消耗量数据可以在统计年鉴之中查到&#xff0c;但市级的数据却暂无统计。但今天我们基于一篇论文提供的思路&#xff0c;通过夜间灯光与省级能源消耗量对更小尺度的地区能源消耗量进行反算。原文提供1995-200…