MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 10

 第10章_创建和管理表

DDL:数据定义语言。CREATE   \ALTER\   DROP          \RENAME            TRUNCATE
DML:数据操作语言。INSERT   \DELETE    \UPDATE          \SELECT(重中之重)
DCL:数据控制语言。COMMIT   \ROLLBACK    SAVEPOINT    \GRANT     \REVOKE

前面讲的都是DML ,即数据操作语言,现在讲一讲DDL . 

存储数据是处理数据的第一步。只有正确地把数据存储起来,我们才能进行有效的处理和分析。否则,只 能是一团乱麻,无从下手。 那么,怎样才能把用户各种经营相关的、纷繁复杂的数据,有序、高效地存储起来呢? 在 MySQL 中, 一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。

标识符命名规则 看看就好

  • 数据库名、表名不得超过30个字符,变量名限制为29个
  • 必须只能包含 A–Z, a–z, 0–9, _共63个字符
  • 数据库名、表名、字段名等对象名中间不要包含空格
  • 一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
  • 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使 用`(着重号)引起来
  • 保持字段名和类型的一致性:在命名字段并为其指定数据类型的时候一定要保证一致性,假如数据 类型在一个表里是整数,那在另一个表里可就别变成字符型了

2. 创建和管理数据库 

  1. 方式1:创建数据库 CREATE DATABASE 数据库名;
  2. 方式2:创建数据库并指定字符集 CREATE DATABASE 数据库名 CHARACTER SET 字符集;
  3. 方式3:判断数据库是否已经存在,不存在则创建数据库( CREATE DATABASE IF NOT EXISTS 数据库名; 推荐)

如果MySQL中已经存在相关的数据库,则忽略创建语句,不再创建数据库。 注意:DATABASE 不能改名。一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删旧库完成的。

 首先你得有一个

CREATE DATABASE mytest1;
SHOW DATABASES;


会出现一个很长的栏,叫做"create database"里面阐述的数据库使用了什么性质格式

默认的字符集是character_set_server这个参数决定的.  character_set_database这个参数在不同的客户端软件跑出来的结果是不一致的,但是character_set_server是一致的

方式2:语句显式指定数据库的字符集为 gbk
CREATE DATABASE mytest2 CHARACTER SET 'gbk';
SHOW CREATE DATABASE mytest2;


方式3 (推荐):如果数据库已经存在则不会重复创建 ,但是不会报错
CREATE DATABASE IF NOT EXISTS mytest2 CHARACTER SET 'utf8';
SHOW DATABASES;

2.2 管理数据库

查看当前所有的数据库

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

#切换数据库
USE atguigudb;

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

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

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

2.3 修改数据库

DATABASE 不能改名。

更改数据库字符集

ALTER DATABASE 数据库名 CHARACTER SET 字符集;  #比如:gbk、utf8等

举例:
SHOW CREATE DATABASE mytest2;

ALTER DATABASE mytest2 CHARACTER SET 'utf8';

2.4 删除数据库

方式1:删除指定的数据库 DROP DATABASE 数据库名;

方式2:删除指定的数据库( 推荐) DROP DATABASE IF EXISTS 数据库名;

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

SHOW DATABASES;

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

DROP DATABASE IF EXISTS mytest2;
整数类型TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
浮点类型FLOAT、DOUBLE
定点数类型DECIMAL
位类型BIT
日期时间类型YEAR、TIME、DATE、DATETIME、TIMESTAMP
文本字符串类型CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
枚举类型ENUM
集合类型SET
二进制字符串类 型BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
JSON类型JSON对象、JSON数组
空间数据类型单值:GEOMETRY、POINT、LINESTRING、POLYGON; 集合:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、 GEOMETRYCOLLECTION

3. 创建表 

#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;
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;


图中的SQL代码创建了一个新的表myemp3,其内容是两个现有表employees和departments通过JOIN操
作合并后的结果。具体来说,这条SQL语句执行了以下操作:
使用CREATE TABLE myemp3 AS语句创建一个新表myemp3。
使用SELECT语句从employees表和departments表中选择数据。
使用JOIN操作根据department_id字段将employees表和departments表连接起来,这意味着只有当
两个表中的department_id相匹配时,相应的行才会被选中。
选择employees表中的employee_id字段,并将其重命名为emp_id。
选择employees表中的last_name字段,并将其重命名为lname。
选择departments表中的department_name字段。
最终,这条语句创建了一个包含员工ID、员工姓氏和部门名称的新表myemp3,其中每个员工都与其所属的
部门关联起来。这个新表可以用于进一步的查询和分析,例如查找特定部门的所有员工或特定员工的部门
信息。

SELECT *
FROM myemp3;

通过上面两句查询一下,发现就是原数据库中的内容因此有

#说明1:查询语句中字段的别名,可以作为新创建的表的字段的名称。
#说明2:此时的查询语句可以结构比较丰富,使用前面章节讲过的各种SELECT

#练习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;

4. 修改表--------------alter  table

DESC myemp1;

# 3.1 添加一个字段
ALTER TABLE myemp1
ADD salary DOUBLE(10,2);  #默认添加到表中的最后一个字段的位置

ALTER TABLE myemp1
ADD phone_number VARCHAR(20) FIRST; #第一位

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

ALTER TABLE myemp1
MODIFY emp_name VARCHAR(35) DEFAULT 'aaa';
# 3.3 重命名一个字段
ALTER TABLE myemp1
CHANGE salary monthly_salary DOUBLE(10,2);

ALTER TABLE myemp1
CHANGE email my_email VARCHAR(50);
# 3.4 删除一个字段
ALTER TABLE myemp1
DROP COLUMN my_email;
#4. 重命名表
#方式1:
RENAME TABLE myemp1
TO myemp11;

DESC myemp11;

#方式2:
ALTER TABLE myemp2
RENAME TO myemp12;

DESC myemp12;
#5. 删除表                无法回滚
#不光将表结构删除掉,同时表中的数据也删除掉,释放表空间
DROP TABLE IF EXISTS myemp2;

DROP TABLE IF EXISTS myemp12;

IF EXISTS 的含义为:如果当前数据库中存在相应的数据表,则删除数据表;如果当前数据库中不存在相应的数据表,则忽略删除语句,不再执行删除数据表的操作。

#6. 清空表

#清空表,表示清空表中的所有数据,但是表结构保留。执行了commit就是永久的保存了数据,
数据就已经保存到了数据库中,不能回滚

SELECT * FROM employees_copy;

TRUNCATE TABLE employees_copy;

SELECT * FROM employees_copy;

DESC employees_copy;

【参考】TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE 无 事务且不触发 TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。

说明:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。

7 . DCL 中 COMMIT 和 ROLLBACK
# COMMIT:提交数据。一旦执行COMMIT,则数据就被永久的保存在了数据库中,意味着数据不可以回滚
# ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT之后 

#8. 对比 TRUNCATE TABLE 和 DELETE FROM 
# 相同点:都可以实现对表中所有数据的删除,同时保留表结构。
# 不同点:
#TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的
#DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)。同时,数据是可以实现回滚的

9. DDL 和 DML 的说明

  ① DDL的操作一旦执行,就不可回滚。指令SET autocommit = FALSE对DDL操作失效。(因为在执行完DDL 操作之后,一定会执行一次COMMIT。而此COMMIT操作不受SET autocommit = FALSE影响的。)

  ② DML的操作默认情况,一旦执行,也是不可回滚的。但是,如果在执行DML之前,执行了
SET autocommit = FALSE,则执行的DML操作就可以实现回滚。

接下来进入演示环节,控制变量法,选择不同选项来

# 演示:DELETE FROM 
#1)
COMMIT;

#2)
SELECT *
FROM myemp3;

#3)
SET autocommit = FALSE;

#4)
DELETE FROM myemp3;

#5)
SELECT *
FROM myemp3;

#6)
ROLLBACK;

#7)
SELECT *
FROM myemp3;

阿里开发规范:

【参考】TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE 无事务且不触发 TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。

说明:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。

53-阿里MySQL命名规范及MySQL8DDL的原子化_哔哩哔哩_bilibili 

 课后练习

第一部分
#1. 创建数据库test01_office, 指明字符集为utf8。并在此数据库下执行下述操作

#2. 创建表dept01
/*
字段    类型
id      INT(7)
NAME    VARCHAR(25)
*/

#3. 将表departments中的数据插入新表dept02中

#4. 创建表emp01
/*
字段    类型
id      INT(7)
first_name VARCHAR (25)
last_name VARCHAR(25)
dept_id  INT(7)
*/

#5. 将列last_name的长度增加到50

#6. 根据表employees创建emp02

#7. 删除表emp01

#8. 将表emp02重命名为emp01

#9. 在表dept02和emp01中添加新列test_column,并检查所作的操作

#10. 直接删除表emp01中的列 department_id
#1. 创建数据库test01_office,指明字符集为utf8。并在此数据库下执行下述操作
CREATE DATABASE IF NOT EXISTS test01_office CHARACTER SET 'utf8';
USE test01_office;
#2. 创建表dept01
/*
字段    类型
id      INT(7)
NAME    VARCHAR(25)
*/

 CREATE TABLE dept01(
 id INT(7),
 NAME VARCHAR(25)
 );
#3. 将表departments中的数据插入新表dept02中
CREATE TABLE dept02
AS
SELECT *
FROM atguigudb.departments;
#4. 创建表emp01
/*
字段    类型
id      INT(7)
first_name VARCHAR (25)
last_name VARCHAR(25)
dept_id  INT(7)
*/


CREATE TABLE emp01(
id INT(7),
first_name VARCHAR(25),
last_name VARCHAR(25),
dept_id INT(7)
);
 #5. 将列last_name的长度增加到50
 DESC emp01;
 ALTER TABLE emp01
 MODIFY last_name VARCHAR(50);
 #6. 根据表employees创建emp02
 CREATE TABLE emp02
 AS
 SELECT *
 FROM atguigudb.`employees`;
 SHOW TABLES FROM test01_office;
 #7. 删除表emp01
 DROP TABLE IF EXISTS emp01;
 #8. 将表emp02重命名为emp01
 #ALTER TABLE emp02 RENAME TO emp01;
 RENAME TABLE emp02 TO emp01;
 #9. 在表dept02和emp01中添加新列test_column,并检查所作的操作
 ALTER TABLE emp01 ADD test_column VARCHAR(10);
 DESC emp01;
 ALTER TABLE dept02 ADD test_column VARCHAR(10);
 DESC dept02;
 #10.直接删除表emp01中的列 department_id
 ALTER TABLE emp01
 DROP COLUMN department_id;
第二部分

#1、创建数据库 test02_market
 CREATE DATABASE IF NOT EXISTS test02_market CHARACTER SET 'utf8';
 #指定对哪个数据库进行操作
USE test02_market;
 #2、创建数据表 customers
 CREATE TABLE customers(
 c_num INT ,
 c_name VARCHAR(50),
 c_contact VARCHAR(50),
c_city VARCHAR(50),
 c_birth DATE
 );
 #3、将c_contact字段插入到c_birth字段后面
ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth;
 #4、将c_name字段数据类型改为 varchar(70)
 ALTER TABLE customers MODIFY c_name VARCHAR(70);
 #5、将c_contact字段改名为c_phone
 ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50);
 #6、增加c_gender字段到c_name后面,数据类型为char(1)
 ALTER TABLE customers ADD c_gender CHAR(1) AFTER c_name;
 #7、将表名改为customers_info
 RENAME TABLE customers TO customers_info;
 #ALTER TABLE customers RENAME TO customers_info;
 #8、删除字段c_city
 ALTER TABLE customers_info DROP COLUMN c_city ;
第三部分

#1. 创建数据库test03_company
CREATE DATABASE IF NOT EXISTS test03_company CHARACTER SET 'utf8';

#指定使用哪个数据库,即下面的sql语句是针对哪个数据库的
USE test03_company;

# 2. 创建表offices
CREATE TABLE offices (
    officeCode INT,
    city VARCHAR(30),
    address VARCHAR(50),
    country VARCHAR(50),
    postalCode VARCHAR(25)
);

# 3. 创建表employees
CREATE TABLE IF NOT EXISTS employees (
    empNum INT,
    lastName VARCHAR(50),
    firstName VARCHAR(50),
    mobile VARCHAR(25),
    `code` INT ,
    jobTitle VARCHAR(50),
    birth DATE,
    note VARCHAR(255),
    sex VARCHAR(5)
);

# 4. 将表employees的mobile字段修改到code字段后面
ALTER TABLE employees
MODIFY mobile VARCHAR(20) AFTER `code`;

# 5. 将表employees的birth字段改名为birthday
ALTER TABLE employees CHANGE birth birthday DATE;

# 6. 修改sex字段,数据类型为char(1)
ALTER TABLE employees MODIFY sex CHAR(1);

# 7. 删除字段note
ALTER TABLE employees DROP COLUMN note;

# 8. 增加字段名favorite_activity, 数据类型为varchar(100)
ALTER TABLE employees ADD COLUMN favorite_activity VARCHAR(100);

# 9. 将表employees的名称修改为 employees_info
RENAME TABLE employees TO employees_info;

DESC employees_info;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【DeepSeek】DeepSeek R1 本地windows部署(Ollama+Docker+OpenWebUI)

1、背景: 2025年1月,DeepSeek 正式发布 DeepSeek-R1 推理大模型。DeepSeek-R1 因其成本价格低廉,性能卓越,在 AI 行业引起了广泛关注。DeepSeek 提供了多种使用方式,满足不同用户的需求和场景。本地部署在数据安全、性…

【Pico】使用Pico进行无线串流搜索不到电脑

使用Pico进行无线串流搜索不到电脑 官串方式:使用Pico互联连接电脑。 故障排查 以下来自官方文档 请按照以下步骡排除故障: 确认电脑和一体机连接了相同的路由器WiFi网络(相同网段) IP地址通常为192.168.XX,若两设备的IP地址前三段相同&…

DeepSeek教unity------MessagePack-02

内置支持类型: 对象序列化 MessagePack for C# 可以序列化你自己定义的公共类或结构体类型。默认情况下,可序列化的类型必须用 [MessagePackObject] 属性进行注解,成员需要用 [Key] 属性进行注解。键可以是索引(整数)…

部门管理(体验,最原始方法来做,Django+mysql)

本人初学,写完代码在此记录和复盘 在创建和注册完APP之后(我的命名是employees),编写models.py文件创建表 手动插入了几条数据 1.部门查询 urls.py和views.py在编写之前,都要注意导入对应的库 urls.py:…

爬虫实战:利用代理ip爬取推特网站数据

引言 亮数据-网络IP代理及全网数据一站式服务商屡获殊荣的代理网络、强大的数据挖掘工具和现成可用的数据集。亮数据:网络数据平台领航者https://www.bright.cn/?promoRESIYEAR50/?utm_sourcebrand&utm_campaignbrnd-mkt_cn_csdn_yingjie202502 在跨境电商、社…

C#windows窗体人脸识别

一、创建一个数据库,名为TestFaceDB 里面有一张表就OK了,表名Users,表里面有几个字段我说明一下: id--------------------bigint----------------------编号 name--------------varchar(50)-----------------用户名 phone--------------v…

opencv中minAreaRect函数输出角度问题

opencv中minAreaRect函数输出角度问题 新版opencv中minAreaRect函数计算最小外接矩形时,角度范围由旧版的[-90, 0]变为[0, 90]。 cv2.minAreaRect输入:四边形的四个点(不要求顺序)。 输出:最小外接矩形的中心点坐标x…

Eclipse:关闭多余的工具条

Eclipse默认的工具条非常多,可以通过如下方法选择关闭一些不常用的: 1.选择菜单Window -> Perspective -> Customize Perspective 2.根据需要勾选Toolbar Visbility下面的工具条项

电商小程序(源码+文档+部署+讲解)

引言 随着移动互联网的快速发展,电商小程序成为连接消费者与商家的重要桥梁。电商小程序通过数字化手段,为消费者提供了一个便捷、高效的购物平台,从而提升购物体验和满意度。 系统概述 电商小程序采用前后端分离的架构设计,服…

MySQL单表存多大的数据量比较合适

前言 经常使用MySQL数据库的小伙伴都知道,当单表数据量达到一定的规模以后,查询性能就会显著降低。因此,当单表数据量过大时,我们往往要考虑进行分库分表。那么如何计算单表存储多大的数据量合适?当单表数据达到多大的…

Visual Studio Code支持WSL,直接修改linux/ubuntu中的文件

步骤1 开始通过 WSL 使用 VS Code | Microsoft Learn 点击远程开发扩展包。 步骤2 Remote Development - Visual Studio Marketplace 点击install, 允许打开Visual Studio Code。 步骤3 共有4项,一齐安装。 步骤4 在WSL Linux(Ubuntu)中&#xf…

微服务SpringCloud Alibaba组件nacos教程【详解naocs基础使用、服务中心配置、集群配置,附有案例+示例代码】

一.Nacos教程 文章目录 一.Nacos教程1.1 Nacos简介1.2 nacos基本使用直接下载打包服务源码方式启动 1.3 创建nacos客服端1.4 nacos集群配置1.5 nacos配置中心 1.1 Nacos简介 nacos是spring cloud alibaba生态中非常重要的一个组件,它有两个作用: 1:注册…

2024年终总结和2025年规划

2024年的主线是AI基础的学习和读书,虽然AI学习花费了更多的时间,但是读书长久看来于我是更重要的事情,哈哈哈,因此先简单回顾一下读书记忆,回顾我的2024,再展望一下我的2025. 我的2024年记忆 读万卷书&am…

实时云渲染:驱动XR技术产业化腾飞的核心引擎

在科技飞速发展的当下,扩展现实(XR)技术正以前所未有的速度融入人们的生活与工作,为用户打造出沉浸式逼真的虚拟环境。据知名XR媒体XR Today的最新数据显示,2024年全球XR市场规模已突破500亿美元,预计到202…

【AI编程】体验a0.dev:专为移动端app的对话式AI编程工具

摘要 体验专为移动端APP开发的AI编程工具 a0.dev,并附上实践过程和价格说明 体验a0.dev:专为移动端app的对话式AI编程工具 最近在探索新的AI编程工具时,发现了a0.dev,一个专注于移动端应用开发的对话式AI编程工具。今天就和大家分…

基于若依开发的工程项目管系统开源免费,用于工程项目投标、进度及成本管理的OA 办公开源系统,非常出色!

一、简介 今天给大家推荐一个基于 RuoYi-Flowable-Plus 框架二次开发的开源工程项目管理系统,专为工程项目的投标管理、项目进度控制、成本管理以及 OA 办公需求设计。 该项目结合了 Spring Boot、Mybatis、Vue 和 ElementUI 等技术栈,提供了丰富的功能…

数据库数据恢复—MongoDB丢失_mdb_catalog.wt文件导致报错的数据恢复案例

MongoDB数据库存储模式为文档数据存储库,存储方式是将文档存储在集合之中。 MongoDB数据库是开源数据库,同时提供具有附加功能的商业版本。 MongoDB中的数据是以键值对(key-value pairs)的形式显示的。在模式设计上,数据库受到的约束更少。这…

小米 R3G 路由器(Pandavan)实现网络打印机功能

小米 R3G 路由器(Pandavan)实现网络打印机功能 一、前言 家中有多台 PC 设备需要打印服务,但苦于家中的 Epson L380 打印机没有网络打印功能,并且配置 Windows 共享打印机实在是过于繁琐且需要共享机保持唤醒状态过于费电。想到…

笔记8——模式匹配 match语句(仅在Python 3.10及以上版本中可用)

文章目录 模式匹配 match语句(仅在 Python 3.10及以上版本 中可用)基本语法基本匹配操作应用场景 模式匹配 match语句(仅在 Python 3.10及以上版本 中可用) Python 3.10 及以上版本中才引入了 match 语句用于简化复杂的条件判断和数据解构;类似于其他语言中的 swit…

Edge浏览器清理主页

我们都知道,Microsoft Edge浏览器是微软创造的搜索浏览器,Windows10、11自带。但是你可以看到,每次你打开Edge浏览器的时候都可以看到许多的广告,如图: 导致打开Edge浏览器的时候会遭受卡顿,广告骚扰&#…