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

目录

前文提要

数据定义语言DDL

数据操作语言DML

数据控制语言DCL

基础知识:

标识符(命名规则):

数据定义语言DDL

创建和管理数据库.:

管理数据库

切换数据库

修改数据库

更改数据库字符集

删除数据库

如何创建表

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

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

数据控制语言DCL

DCL中COMMIT和ROLLBACK的讲解

[对比TRUNCATE TABLE 和DELETE FROM](#对比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中和事务相关的内容我们就说到这,剩下的我们下篇再继续说事务的事

相关推荐
Dlwyz7 分钟前
问题: redis-高并发场景下如何保证缓存数据与数据库的最终一致性
数据库·redis·缓存
如意机反光镜裸1 小时前
如何快速将Excel数据导入到SQL Server数据库
数据库
不爱学习的啊Biao1 小时前
初识mysql数据库
数据库·mysql·oracle
执键行天涯1 小时前
【日常经验】修改大数据量的表字段类型,怎么修改更快
sql
SRC_BLUE_172 小时前
SQLI LABS | Less-55 GET-Challenge-Union-14 Queries Allowed-Variation 2
oracle·c#·less
宛唐羁客2 小时前
ODBC连接PostgreSQL数据库后,网卡DOWN后,客户端进程阻塞问题解决方法
网络·数据库
sevevty-seven2 小时前
幻读是什么?用什么隔离级别可以防止幻读
大数据·sql
吴半杯3 小时前
Redis-monitor安装与配置
数据库·redis·缓存
是桃萌萌鸭~3 小时前
mysqldbcompare 使用及参数详解
数据库·mysql
gma9993 小时前
brpc 与 Etcd 二次封装
数据库·c++·rpc·etcd