SQL-DDL操作及8.0DDL原子性新特性

#第10章_创建和管理表

SELECT *
FROM `order`;

#1. 创建和管理数据库

#1.1 如何创建数据库
#方式1:
CREATE DATABASE mytest1; # 创建的此数据库使用的是默认的字符集

#查看创建数据库的结构
SHOW CREATE DATABASE mytest1;

#方式2:显式了指名了要创建的数据库的字符集
CREATE DATABASE mytest2 CHARACTER SET 'gbk';

#
SHOW CREATE DATABASE mytest2;

#方式3(推荐):如果要创建的数据库已经存在,则创建不成功,但不会报错。
CREATE DATABASE IF NOT EXISTS mytest2 CHARACTER SET 'utf8';

#如果要创建的数据库不存在,则创建成功
CREATE DATABASE IF NOT EXISTS mytest3 CHARACTER SET 'utf8';

SHOW DATABASES;

#1.2 管理数据库
#查看当前连接中的数据库都有哪些
SHOW DATABASES;

#切换数据库
USE atguigudb;

#查看当前数据库中保存的数据表
SHOW TABLES;

#查看当前使用的数据库
SELECT DATABASE() FROM DUAL;

#查看指定数据库下保存的数据表
SHOW TABLES FROM mysql;

#1.3 修改数据库
#更改数据库字符集
SHOW CREATE DATABASE mytest2;

ALTER DATABASE mytest2 CHARACTER SET 'utf8';

#1.4 删除数据库
#方式1:如果要删除的数据库存在,则删除成功。如果不存在,则报错
DROP DATABASE mytest1;

SHOW DATABASES;

#方式2:推荐。 如果要删除的数据库存在,则删除成功。如果不存在,则默默结束,不会报错。
DROP DATABASE IF EXISTS mytest1;

DROP DATABASE IF EXISTS mytest2;

#2. 如何创建数据表
USE atguigudb;

SHOW CREATE DATABASE atguigudb; #默认使用的是utf8

SHOW TABLES;

#方式1:"白手起家"的方式
CREATE TABLE IF NOT EXISTS myemp1( #需要用户具备创建表的权限。
id INT,
emp_name VARCHAR(15), #使用VARCHAR来定义字符串,必须在使用VARCHAR时指明其长度。
hire_date DATE
);
#查看表结构
DESC myemp1;
#查看创建表的语句结构
SHOW CREATE TABLE myemp1; #如果创建表时没有指明使用的字符集,则默认使用表所在的数据库的字符集。
#查看表数据
SELECT * FROM myemp1;

#方式2:基于现有的表,同时导入数据
CREATE TABLE myemp2
AS
SELECT employee_id,last_name,salary
FROM employees;

DESC myemp2;
DESC employees;

SELECT *
FROM myemp2;

#说明1:查询语句中字段的别名,可以作为新创建的表的字段的名称。
#说明2:此时的查询语句可以结构比较丰富,使用前面章节讲过的各种SELECT
CREATE TABLE myemp3
AS
SELECT e.employee_id emp_id,e.last_name lname,d.department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id;

SELECT *
FROM myemp3;

DESC myemp3;

#练习1:创建一个表employees_copy,实现对employees表的复制,包括表数据
CREATE TABLE employees_copy
AS
SELECT *
FROM employees;

SELECT * FROM employees_copy;

#练习2:创建一个表employees_blank,实现对employees表的复制,不包括表数据
CREATE TABLE employees_blank
AS
SELECT *
FROM employees
#where department_id > 10000;
WHERE 1 = 2; #山无陵,天地合,乃敢与君绝。


SELECT * FROM employees_blank;

#3. 修改表 --> ALTER TABLE
#3.1 添加一个字段
ALTER TABLE myepm1
ADD salary DOUBLE(10,2); #默认添加到表中的最后一个字段
DESC myepm1;
ALTER TABLE myepm1
ADD phone_numbe VARCHAR(20) FIRST;

ALTER TABLE myepm1
ADD email VARCHAR(45) AFTER emp_name;

#3.2 修改一个字段:数据类型、长度、默认值(略)
ALTER TABLE myepm1
MODIFY emp_name VARCHAR(25);

ALTER TABLE myepm1
MODIFY emp_name VARCHAR(35) DEFAULT 'aaa';
#重命名一个字段
ALTER TABLE myepm1
CHANGE salary monthly_salary DOUBLE(10,2);
DESC myepm1;
#删除 一个字段
ALTER TABLE myepm1
DROP COLUMN email;
DESC myepm1;
#重命名表
RENAME TABLE myepm1
TO myemp4;
#删除表
DROP TABLE IF EXISTS myemp4;
#6.清空表
SELECT * FROM employees_copy;
TRUNCATE TABLE employees_copy;
DESC employees_copy;
#7.DCL 中 commit 和 rollback
#commit:调教数据,一旦执行了commit,则数组就永久保存在了数据库中,意味着数据不可以回滚
#rollback:回滚数据,一旦执行rollback,则可以实现数据饿回滚,回滚到最近的一次commit操作
#8.对比 truncate table delete from
#相同点:都可以实现对表中所有的数据的删除,同时保存表数据
/**
不同点: truncate table : 一旦执行此操作。表数据全部清除,同时,数据时不可以回滚的
delete from 一旦执行此操作,表数据可以全部清除 (不带 where)同时,数据是可以回滚的

*/
#9.
/*
DDL 和 DML (增改)
DDL的操作一旦执行,就不可以回滚 原因:
在执行DDL后一定会执行COMMIT的操作,这个操作不会受到 set autocommit = false的影响
DML的操作默认情况下: 一旦执行,也是不可回滚的 ,但是在执行DML之前,执行了 set autocommit = fasle ,则
执行的DML操作就可以实现回滚


*/
#演示:delete from
CREATE TABLE myemp5
AS
SELECT * FROM employees;
SELECT * FROM myemp5;
#
COMMIT;
SET autocommit = FALSE;
DELETE FROM myemp5;
ROLLBACK;
SELECT * FROM myemp5;
#演示:trucante from 显示不能回滚
#8.0DDL 的原子化操作
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(255)
);
CREATE DATABASE mytest;
USE mytest;
SHOW TABLES ;
DROP TABLE book1,book2;
#在5.0版本中 book1会删除

#如图显示:8.0版本中

 

 #5.0以上的版本中如图:

 

posted @   wiselee/  阅读(48)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示