MySQL纯代码复习(下)

news2024/11/18 9:25:29

前言

本文章的语言描述会比上篇多一些

数据库的创建修改与删除

标识符命名规则

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

创建数据库

创建数据库的方式有三种:

#创建和管理表
SELECT * FROM ORDER;
SELECT * FROM `ORDER`;#使用着重号来区别保留字或关键字
#如何创建数据库
#创建数据库也是要有用户权限的
#root是根目录,我们学习都是用的root

数据库是不能改名的,有些图形工具可以改名的原因是,底层创建了一个新数据库,然后把要修改的数据库数据全部复制到新数据库里,然后删除旧数据库,所以一般不要修改数据库名,数据表是可以修改的
字符集默认使用utf8mb4
在这里插入图片描述

#显示创建的数据库的字符集和其他信息
#SHOW CREATE DATABASE databaseName;
#CREATE DATABASE `mytest1` 
#/*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */
#方式1:
CREATE DATABASE mytest1;
SHOW CREATE DATABASE mytest1;#默认utf8mb4
#方式2:指定字符集
CREATE DATABASE mytest2 CHARACTER SET 'gbk';
SHOW CREATE DATABASE mytest2;#gbk
#方式3(推荐使用):判断是否存在
#执行完毕后,字符集仍然是gbk,可以发现并不会覆盖和影响,只是不报错了
CREATE DATABASE IF NOT EXISTS mytest2 CHARACTER SET 'utf8';
#如果不存在,则正常创建
CREATE DATABASE IF NOT EXISTS mytest3 CHARACTER SET 'utf8';
SHOW CREATE DATABASE mytest3;#UTF8
#显示当前所有的数据库
SHOW DATABASES;#可以看到三个mytest数据库在列表中
#在非图形用户界面或者没有进入特定数据库时,是需要通过点击或use来进入数据库的
#切换\进入\使用数据库
USE atguigudb;#进入后,才可以进行表的操作,否则是提示命令表不存在
#查看当前数据库都存有哪些表
#没有表的话,图形中会是空的,命令行会提示:Empty set (0.00 sec),如果表没有数据也会是这样
USE mytest1;#进入数据库
SHOW TABLES;#显示该数据库的全部数据表
USE atguigudb;
SHOW TABLES;
#查看当前使用的数据库
SELECT DATABASE()FROM DUAL;#函数
#查看指定数据库下保存的表
SHOW TABLES FROM mysql;

修改数据库

#修改数据库
#更改数据库字符集
SHOW CREATE DATABASE mytest2;#查看创建结构
#将gbk修改成utf8
ALTER DATABASE mytest2 CHARACTER SET 'utf8';
SHOW CREATE DATABASE mytest2;#修改成功
#删除数据库
#方式1:
DROP DATABASE mytest1;#不能执行2次
SHOW DATABASES;
#方法2:
DROP DATABASE IF EXISTS mytest1;#如果不存在则不做任何处理
DROP DATABASE IF EXISTS mytest2;
SHOW DATABASES;

常见的数据类型_创建表的两种方式

在这里插入图片描述
数据类型
在这里插入图片描述
在这里插入图片描述

#如何创建数据表
USE atguigudb;
SHOW CREATE DATABASE atguigudb;#默认使用的是utf8
SHOW TABLES;
#方式1:
CREATE TABLE IF NOT EXISTS myemp1(#需要用户具备创建表的权限
id INT,
emp_name VARCHAR(15),#使用VARCHAR来定义字符串,必须在使用VARCAHR时指明其长度
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;SELECT*FROM myemp2;#有字段的
DESC employees;
#说明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;
SELECT * FROM employees_blank;
DESC employees_blank;

修改表_重命名表_删除表_清空表

#修改表_重命名表_删除表_清空表
DESC myemp1;
#修改表 --> ALTER TABLE
#添加一个字段
ALTER TABLE myemp1
ADD salary DOUBLE(10,2);#默认添加到表中的最后一个字段
DESC myemp1;
ALTER TABLE myemp1
ADD phone_number VARCHAR(20) FIRST;#FIRST:第一个
DESC myemp1;
ALTER TABLE myemp1
ADD email VARCHAR(45) AFTER emp_name;#AFTER:指定添加在某字段的后面
DESC myemp1;
#修改一个字段:数据类型、长度、默认值(略)
ALTER TABLE myemp1
MODIFY emp_name VARCHAR(25);#将emp_name的类型从VARCHAR(15)改为VARCHAR(25)
DESC myemp1;
ALTER TABLE myemp1
MODIFY emp_name VARCHAR(35) DEFAULT 'aaa'; #指定了默认值,如果插入数据为NULL,则默认为'aaa'
DESC myemp1;
#重命名一个字段
ALTER TABLE myemp1
CHANGE salary monthly_salary DOUBLE(10,2);
DESC myemp1;
ALTER TABLE myemp1
CHANGE email my_email VARCHAR(50);#类型也是可以修改的
DESC myemp1;
#删除一个字段
ALTER TABLE myemp1
DROP COLUMN my_email;
DESC myemp1;
#重命名表
#方式1:
RENAME TABLE myemp1
TO myemp11;
DESC myemp11;
#方式2:
ALTER TABLE myemp2
RENAME TO myemp12;
DESC myemp12;
#删除表:不光将结构删除,同时表中的数据也被删除,释放表空间
DROP TABLE IF EXISTS myemp2;
DROP TABLE IF EXISTS myemp12;
#清空表:只删除表数据,表结构不变 --> 包括自增列也会重置,而delete from 和 回滚事务 是无法重置自增列自增长值的
SELECT * FROM employees_copy;
TRUNCATE TABLE employees_copy;
SELECT * FROM employees_copy;

DCL中的COMMIT和ROLLBACK的使用

COMMIT表示提交,在数据库中是默认提交的,如果不是默认提交,则每次执行完数据库操作,如果不提交,则所有数据都会回滚,就像你写Word文档,但是没有保存,一旦没有保存,这些数据都会消失。

#DCL中COMMIT和ROLLBACK
#COMMIT:提交数据。一旦执行COMMIT,则数据就被永久的保存在数据库中,意味着数据不可以回滚
#ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT最后
#对比TRUNCATE TABLE 和 DELETE FROM
#相同点:都可以实现对表中所有数据的删除,同时保留表结构
#不同点:
#	TURNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的
#	DELETE FROM:一旦执此操作,表数据可以全部清除(不带WHERE)同时,数据是可以实现回滚的
/*
DDL 和 DML的说明
① DDL的操作一旦执行,就不可回滚SET autocommit = FALSE对DDL操作无效.
  (因为在执行完DDL操作之后,一定会执行一次COMMIT,而此操作不受SET autocomiit=false的影响)
② DML的默认情况下,一旦执行,也是不可回滚的。但是,如果在执行DML之前,
  执行了 SET autocommit = FALSE,则执行的DML操作就可以实现回滚
*/
#演示:DELETE FROM
#1)
COMMIT;#先提交一下
#2)
SELECT*FROM myemp3;#106条数据
#3)
SET autocommit = FALSE;
#4)
DELETE FROM myemp3;
#5)
SELECT*FROM myemp3;#0条数据
#6)
ROLLBACK;#回滚数据
#7)
SELECT*FROM myemp3;#106条数据

阿里MySQL命名规范及MySQL8.0DDL的原子化

阿里开发规范:
【参考】TRUNCATE TABLE比DELETE速度快,且使用的系统和事务日志资源少,但TRUNCATE无事务且不触发TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句
说明:TRUNCATE TABLE在功能上与不带WHERE子句的DELETE语句相同
内容扩展

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#测试MySQL8.0的新特性:DDL的原子化
CREATE DATABASE mytest;
USE mytest;
CREATE TABLE book1(
book_id INT,
book_name VARCHAR(255)
);
SHOW TABLES;
DROP TABLE book1,book2
SHOW TABLES;
#区别是,如果是5.7版本的MySQL,上面的删除数据表语句,会将book1删除掉
#这里是没有book2的,所以肯定报错,但是8.0中,如果报错了就不会删除book1
#这也是DDL的原子化:要么都成功,要么就回滚

创建管理表练习

54P

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

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

相关文章

Twitter引流如何开发客户

要想在twitter平台上取得效果,你需要先了解twitter的算法规则,去迎合平台,推特群推王给出以下5条建议,让你发布的帖子更容易被推荐。 这里Twitter群推王可以给大家讲一下,关于推特平台的算法排名: Twitter…

nginx降权+安装php

nginx降权 使用普通用户启动Nginx 为什么要让nginx服务使用普通用户 默认情况下,nginx的master进程使用的是root用户,worker进程使用的是nginx指定的普通用户,使用root用户跑nginx的master进程有两个大问题: (1&#x…

课程设计-天天象棋作弊软件判别

目录 1.作弊开挂可能迹象 2.设计作弊检测系统灵感 3.设计作弊检测系统思路 3.1反作弊系统应对策略框架 4.感想体悟 1.作弊开挂可能迹象 1.非实名认证; 2.头像:美女; 3.名称: (1)一串英文字母; (2)非正常中文名…

【深度分解网络:显著性分析:IVIF】

Infrared and Visible Image Fusion Based on Deep Decomposition Network and Saliency Analysis (基于深度分解网络和显著性分析的红外与可见光图像融合) 传统的图像融合侧重于选择一种有效的分解方法从源图像中提取代表性特征,并试图找到…

2022年海运行业研究报告

第一章 行业概况 海洋运输又称“国际海洋运输”,提供海上客运或者货运服务的行业。是国际物流中最主要的运输方式。它是指使用船舶通过海上航道在不同国家和地区的港口之间运送货物的一种方式,在国际货物运输中使用最广泛。国际贸易总运量中的2/3以上&a…

功率放大器和电压放大器的区别是什么意思

很多人经常会在后台咨询小编功率放大器和电压放大器的区别有哪些?今天就来为大家科普一下功率放大器和电压放大器的知识内容,希望大家下次能够区分,并且可以正常地选择和使用功率放大器。 图:功率放大电路与电压放大电路对比 功率…

Opengl ES之YUV数据渲染

YUV回顾 记得在音视频基础知识介绍中,笔者专门介绍过YUV的相关知识,可以参考: 《音视频基础知识-YUV图像》 YUV数据量相比RGB较小,因此YUV适用于传输,但是YUV图不能直接用于显示,需要转换为RGB格式才能显…

简单的股票行情演示(一) - 实时标的数据

一、概述二、效果展示三、实现代码 1、行情数据中心2、数据拉取模块3、基础服务模块4、UI展示四、相关文章原文链接:简单的股票行情演示(一) - 实时标的数据 一、概述 很长一段时间都有一个想法,使用QCP去做一个行情展示小事例&…

TiDB Cloud

TiDB Cloud 为什么选择TiDB 分布式数据库-多租户混合工作负载-在同一个数据库中 事务型:基于行的数据分析型:基于列的数据 弹性比例: 缩小-减少节点横向扩展-添加节点 基于“RAFT”的高可用性 每个数据段的3个可用区进行复制 多租户 什么…

DataGridXL 2.0 for JavaScript Crack

你的web开发好了,客户说我习惯用excel这样的表格,你们是否能开发像电子表格一样的功能? Web 应用程序的类似 Excel 的体验---DataGridXL 2.0 for JavaScript Crack 你已经构建了一个 Web 应用程序,但你的用户坚持使用 Excel。 类似…

一、ROS2简介

ros2相关简介 ROS2的前身是ROS,ROS即机器人操作系统(Robot Operating System)。但是ROS本身并不是一个操作系统,而是一个软件库和工具集。 Ros的出现解决了机器人各个组件的通信问题,后来越来越多的机器人算法也集成到…

漫谈信息模型(1)

简单地表达复杂的世界,这是各类思想家近千年来的追求。如何将人类在世界上观察到的结果进行概念化表达?又如何描述人造的复杂工具?这种探索成为人类文明进步的一个重要的驱动力。计算机的出现,推动了人类对现实事物进行概念化的描…

技术开发87

技术开发87 业务内容: . 冲床加工,高速冲床加工,省力化机械制作 . 铣床加工,食品机械制作 . 轮廓加工,钢丝加工 . 冲床模具制作 . 溶接 公司简介: 资本金:1000万日元(约66元人…

文件数据丢失怎么办?推荐几款好用的文件恢复大师

众所周知,计算机在使用过程中难免会出现文件数据丢失的情况,这是一种非常正常的现象。但是遇到这种情况,很多时候我们不知道该如何去补救。特别是由于一些原因导致电脑被重启,这样不仅会对电脑造成一定影响,更重要的是…

2022年8月15日陌陌推荐算法工程师面试题5道|含解

8本电子书免费送给大家,见文末。 1、DeBERTa与BERT的区别 DeBERTa提出了两种改进BERT预训练的方法:第一种方法是分散注意机制,该机制使用两个向量分别对每个单词的内容和位置进行编码来表示每个单词,并使用分散矩阵计算单词之间…

本地传奇架设详细教程

十二堂今天给大家分享一篇技术文章,传奇架设教程。 教程讲的很详细,就是一个菜鸟都能学会如何架设传奇。 在管理工具->服务中停止ssdpdiscoveryservic服务 一、准备软件DBCommander 2000 Pro和传奇服务端(什么版本都行&#x…

设计模式之代理模式(十一)

目录 1. 静态代理 2. 动态代理 3. Cglib代理 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。好处就是可以用来增强。 被代理的对象可以是 远程对象,创建开销大的对象 或者 需要安全控制的对象。 可以分为三类 静态代理动态代…

Robot Framework 自动化测试详解

一、Robot Framework 简介 1、界面自动化测试工具 界面自动化测试,即UI自动化测试,比较常见的工具有:QTP、AutoIt、Selenium等。 像QTP经历了很多版本,最新的版本好像叫UFT了。对初学者来说,录制回放是相当容易上手的,除了录制,QTP主要用VBScript脚本编写代码,同时有…

C/C++语言 9 —— 函数

把相同业务功能维度的代码有机的整合起来做成函数,这样做既可以方便反复调用,又可以在空间上节省代码行数。 函数的定义: 返回值类型 函数名(参数类型1 参数变量名1, ....参数类型N 参数变量N){ //此处参数为形参// 函数体.... } 如果不需…

外汇天眼:德国PPI利淡欧美镑美跌逾百点,美元涨近百点,黄金跌约20美元,关注美制造业指数

昨日重要因素影响 : 1.英媒:英国在继续购买俄罗斯石油 但称从其他国家进口 2.德国10月PPI月率低于市场预期 3.欧洲央行首席经济学家连恩:我们将在12月再次加息,不认为12月将是最后一次加息 4.穆迪:在需求降温的环境下&#xf…