MySQL数据库与表的创建、修改及数据操作指南


精选专栏链接 🔗


  • MySQL技术笔记专栏
  • Redis技术笔记专栏
  • 大模型搭建专栏
  • Python学习笔记专栏
  • 深度学习算法专栏

欢迎订阅,点赞+关注,每日精进1%,与百万开发者共攀技术珠峰

更多内容持续更新中!希望能给大家带来帮助~ 😀😀😀


MySQL数据库与表的创建、修改及数据操作指南

  • 1,数据库的创建和管理
    • 1.1,创建数据库
    • 1.2,使用数据库
    • 1.3,修改数据库
    • 1.4,删除指定数据库
  • 2,表的创建和管理
    • 2.1,表的创建
    • 2.2,查看数据表结构
    • 2.3,修改表
      • 2.3.1,添加字段
      • 2.3.2,修改字段
      • 2.3.3,重命名字段
      • 2.3.4,删除字段
    • 2.4,重命名表
    • 2.5,删除表
    • 2.6,清空表
  • 3,数据操作
    • 3.1,添加数据
      • 3.1.1,VALUES的方式添加
      • 3.1.2,将查询结果插入到表中
    • 3.3,修改数据
    • 3.2,删除数据
    • 3.3,对比TRUNCATE TABLE 和 DELETE FROM
    • 3.4,MySQL8新特性:计算列


1,数据库的创建和管理

1.1,创建数据库

创建数据库的三种常用方式如下,推荐使用方式三:

方式一:创建数据库

CREATE DATABASE 数据库名; 

方式二:创建数据库并指定字符集

CREATE DATABASE 数据库名 CHARACTER SET 字符集;

方式三:判断数据库是否已经存在,不存在则创建数据库(推荐

# 如果MySQL中已经存在相关的数据库,则忽略创建语句,不再创建数据库。
CREATE DATABASE IF NOT EXISTS 数据库名; 

注意:

  • DATABASE 不能改名。一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删旧库完成的;
  • 如果创建表时没有指明使用的字符集,则默认使用表所在的数据库的字符集;

1.2,使用数据库

① 查看当前所有的数据库:

SHOW DATABASES; 

② 查看当前正在使用的数据库

SELECT DATABASE();  #使用的一个 mysql 中的全局函数

③ 查看指定库下所有的表

SHOW TABLES FROM 数据库名;

④ 查看数据库的创建信息

SHOW CREATE DATABASE 数据库名;
或者:
SHOW CREATE DATABASE 数据库名\G

⑤ 使用/切换数据库

USE 数据库名;

注意:要操作表格和数据之前必须先说明是对哪个数据库进行操作。


1.3,修改数据库

更改数据库字符集

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

1.4,删除指定数据库

  • 方式一:
DROP DATABASE 数据库名;
  • 方式二:(推荐
DROP DATABASE IF EXISTS 数据库名;

2,表的创建和管理

2.1,表的创建

创建表方式一:从零创建

语法格式:

CREATE TABLE [IF NOT EXISTS] 表名(字段1, 数据类型 [约束条件] [默认值],字段2, 数据类型 [约束条件] [默认值],字段3, 数据类型 [约束条件] [默认值],……[表约束条件]
);

SQL示例:

CREATE TABLE IF NOT EXISTS myemp1(   #需要用户具备创建表的权限。
id INT,
emp_name VARCHAR(15), #使用VARCHAR来定义字符串,必须在使用VARCHAR时指明其长度。
hire_date DATE
);

创建完成后可以使用如下SQL查看表结构:

DESC myemp1;

运行结果如下:

在这里插入图片描述


表的创建方式二:基于子查询创建新表

语法格式:

CREATE TABLE 表名 AS 子查询

SQL示例:

CREATE TABLE emp1 AS SELECT * FROM employees;
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,具体可以看文章开头的MySQL技术笔记专栏

练习:

需求1:创建一个表employees_copy,实现对employees表的复制,包括表数据

CREATE TABLE employees_copy
AS
SELECT *
FROM employees;

需求2:创建一个表employees_blank,实现对employees表的复制,不包括表数据

CREATE TABLE employees_blank
AS
SELECT *
FROM employees
WHERE 1 = 2;

2.2,查看数据表结构

在MySQL中创建好数据表之后,可以查看数据表的结构。MySQL支持使用 DESCRIBE 或 DESC 语句查看数据表结构,也支持使用SHOW CREATE TABLE语句查看数据表结构。

语法格式如下:

SHOW CREATE TABLE 表名\G

使用SHOW CREATE TABLE语句不仅可以查看表创建时的详细语句,还可以查看存储引擎和字符编码。


2.3,修改表

2.3.1,添加字段

先查看myemp1的结构:

DESC myemp1;

在这里插入图片描述
给myemp1表添加字段salary:

ALTER TABLE myemp1
# (10,2)表示一共有10位(包括小数点),2表示小数点后保留2位
ADD salary DOUBLE(10,2); 

添加后继续通过DESC myemp1;查看表结构:

在这里插入图片描述
注意:添加字段时,默认添加到表中的最后一个字段的位置。如果不想添加到最后一个字段位置可以显式指定。 比如:

需求:添加phone_number字段到表中的第一个字段位置:

ALTER TABLE myemp1
ADD phone_number VARCHAR(20) FIRST;

需求:添加email字段到表中的emp_name字段后面

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

在这里插入图片描述


2.3.2,修改字段

修改字段使用ALTER关键字

需求:修改emp_name字段的最大长度位25(原本是15)

ALTER TABLE myemp1
MODIFY emp_name VARCHAR(25) ;

需求:修改emp_name字段的最大长度位35,并修改默认值为 ’aaa‘

ALTER TABLE myemp1
MODIFY emp_name VARCHAR(35) DEFAULT 'aaa';

通过DESC myemp1;查看表结构:

在这里插入图片描述

  • 设置默认值可以实现:当我们向表中插入数据的时候,没有指定该字段时,会自动使用此默认值。

2.3.3,重命名字段

重命名字段使用CHANGE关键字。

需求:将salary 字段改为monthly_salary

ALTER TABLE myemp1
CHANGE salary monthly_salary DOUBLE(10,2);

运行后,通过DESC myemp1;查看表结构:

在这里插入图片描述
重命名字段的同时还可以修改字段长度,比如:

ALTER TABLE myemp1
CHANGE email my_email VARCHAR(50);

2.3.4,删除字段

删除字段使用DROP关键字。

需求:删除my_email字段(或my_email列)

ALTER TABLE myemp1
DROP COLUMN my_email;

2.4,重命名表

重命名表有两种方式,分别是:RENAME方式和ALTER方式

方式一:RENAME方式

RENAME TABLE myemp1
TO myemp11;

方式二:ALTER方式

ALTER TABLE myemp2
RENAME TO myemp12;

2.5,删除表

删除表操作使用DROP关键字,不光将表结构删除掉,同时表中的数据也删除掉,释放表空间。

需求:删除表myemp12

DROP TABLE IF EXISTS myemp12;

2.6,清空表

清空表使用TRUNCATE关键字,表示清空表中的所有数据,但是表结构保留。

需求:清空employees_copy

employees_copy 表中原本有如下数据:

在这里插入图片描述

清空表:

TRUNCATE TABLE employees_copy;

再次查询表中记录:

在这里插入图片描述


3,数据操作

3.1,添加数据

可以使用 INSERT 语句向表中插入数据。有如下两种插入方式:

  • 使用VALUES方式插入数据;
  • 将查询结果插入到表中,可快速地从一个或多个表中向一个表中插入多行

接下来一一介绍:

3.1.1,VALUES的方式添加

情况1: 没有指明添加的字段。

此时值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段声明时的顺序相同,否则可能报错。语法格式如下:

INSERT INTO 表名
VALUES (value1,value2,....);

emp1表结构如下:

在这里插入图片描述

插入数据SQL实例如下:

INSERT INTO emp1
VALUES (1,'Tom','2000-12-21',3400); #注意:一定要按照声明的字段的先后顺序添加

插入后执行查询:

SELECT *
FROM emp1;

查询结果如下:

在这里插入图片描述


情况2: 指明要添加的字段 (推荐)

INSERT INTO emp1(id,hire_date,salary,`name`) # 插入时需要和此处的字段顺序匹配
VALUES(2,'1999-09-09',4000,'Jerry');

插入后,查询结果如下:

在这里插入图片描述
情况3: 同时插入多条记录

INSERT INTO emp1(id,NAME,salary)
VALUES
(4,'Jim',5000),   # 多条记录之间使用逗号隔开
(5,'张俊杰',5500);

插入后,查询结果如下:

在这里插入图片描述


3.1.2,将查询结果插入到表中

将查询结果插入到表中会结合SELECT查询语句。

SQL示例:

INSERT INTO emp1(id,NAME,salary,hire_date)
#查询语句
SELECT employee_id,last_name,salary,hire_date  
FROM employees
WHERE department_id IN (70,60);

注意:

  • 查询的字段一定要与添加到的表的字段一 一对应;
  • 上述SQL中,emp1表中要添加的数据的字段的最大长度不能低于employees表中查询的字段的长度。否则会有添加不成功的风险。

如果emp1中的最大字段长度小,employees中的最大字段长度更大,可能出问题;比如:employees表中last_name字段长度为 varchar(25),emp1表中name字段长度为 varchar(15),执行上述SQL,如果employees表中某条记录的last_name长为20,则会报错。


3.3,修改数据

使用 UPDATE …SET…语句修改数据。语法如下:

UPDATE table_name
SET column1=value1, column2=value2,, column=valuen
[WHERE condition]

需求:修改id为5的员工的hire_date为当前时间

SQL语句如下:

UPDATE emp1
SET hire_date = CURDATE()
WHERE id = 5;

需求:修改4号员工的薪资为6000,hire_date为当前时间

UPDATE emp1
SET hire_date = CURDATE(),salary = 6000
WHERE id = 4;

需求:将表中姓名中包含字符a的提薪20%

UPDATE emp1
SET salary = salary * 1.2
WHERE NAME LIKE '%a%';

注意:

  • UPDATE语句可以一次更新多条数据。如果省略 WHERE 子句,则表中的所有数据都将被更新;

3.2,删除数据

使用 DELETE FROM 删除数据 。语法如下:

DELETE FROM table_name [WHERE <condition>];

需求:删除表中id为1的员工信息

SQL语句如下:

DELETE FROM emp1
WHERE id = 1;

3.3,对比TRUNCATE TABLE 和 DELETE FROM

对比二者之前,需要了解数据库中的 COMMIT命令 和 ROLLBACK命令 :

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

TRUNCATE TABLE 和 DELETE FROM 的相同点:

  • 都可以实现对表中所有数据的删除,同时保留表结构。

TRUNCATE TABLE 和 DELETE FROM 的不同点:

  • TRUNCATE TABLE: 一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的;
  • DELETE FROM: 一旦执行此操作,表数据可以全部清除(不带WHERE的DELETE FROM语句)。同时,数据是可以实现回滚的;

原因是:

  • TRUNCATE TABLE属于DDL数据定义语言,DELETE FROM属于DML数据操作语言;
  • DDL数据定义语言一旦执行就不可回滚(因此执行DDL操作要慎重);
  • DML数据操作语言,默认情况下,一旦执行,也是不可回滚的,但是如果在执行DML之前,执行了SET autocommit = FALSE,则执行的DML操作就可以实现回滚;
  • SET autocommit = FALSE指令对DDL操作无效。因为在执行完DDL操作之后,一定会执行一次COMMIT。而此COMMIT操作不受SET autocommit = FALSE指令影响。

SQL演示:DELETE FROM

① 先提交一次

COMMIT;

② 查看表中数据

SELECT *
FROM emp1;

运行结果如下:

在这里插入图片描述
③ 禁用自动提交

SET autocommit = FALSE;

④ 执行 TRUNCATE TABLE

TRUNCATE TABLE emp1;

查看表中数据发现删除成功:

在这里插入图片描述
⑤ 回滚

ROLLBACK;

回滚后查看表中数据发现数据回滚成功,回滚到最近一次COMMIT之后

在这里插入图片描述

SQL演示:TRUNCATE TABLE

① 先提交一次

COMMIT;

② 查看表中数据

SELECT *
FROM emp1;

运行结果如下:

在这里插入图片描述
③ 禁用自动提交

SET autocommit = FALSE;

④ 执行DELETE FROM

DELETE FROM emp1;

查看表中数据发现删除成功:

在这里插入图片描述
⑤ 回滚

ROLLBACK;

回滚后查看表中数据发现数据回滚后数据未恢复:

在这里插入图片描述


3.4,MySQL8新特性:计算列

计算列简单来说就是某一列的值是通过别的列计算得来的。

例如,a列值为1、b列值为2,c列不需要手动插入,定义a+b的结果为c的值,那么c就是计算列,是通过别的列计算得来的。

在MySQL 8.0中,CREATE TABLE 和 ALTER TABLE 中都支持增加计算列。下面以CREATE TABLE为例进行讲解。

需求:定义数据表tb1,然后定义字段id、字段a、字段b和字段c,其中字段c为计算列,用于计算 a+b 的值。

首先创建测试表tb1:

CREATE TABLE tb1(
id INT,
a INT,
b INT,
c INT GENERATED ALWAYS AS (a + b) VIRTUAL # 字段c即为计算列
);

插入一条记录:

# 只指明了字段a和字段b
INSERT INTO tb1(a,b) VALUES (100,200);

查看数据:

SELECT * FROM tb1;

运行结果如下,c字段自动计算出结果:

在这里插入图片描述
更新字段值:

UPDATE tb1 SET a = 500;

查看数据:

SELECT * FROM tb1;

运行结果如下,c字段自动更新结果:

在这里插入图片描述

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

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

相关文章

​new species of flying reptile1 discovered in Scotland​

Pterosaur: new species of flying reptile1 discovered in Scotland 苏格兰斯凯岛发现新翼龙物种 考古学家们在苏格兰斯凯岛发现了一个新的翼龙物种。这种独特的飞行爬行动物生活在1.68 – 1.66亿年前。 This flying reptile soared over the heads of dinosaurs2 when Scotla…

03 节点行为

审批流程图如下图&#xff0c;在此流程图中&#xff0c;存在两个UserTask节点&#xff0c;第一个节点是主管审批&#xff0c;第二个节点是产品经理审批&#xff0c;两个节点中间有一个排他网关&#xff0c;此网关用来对主管审批的结果进行判断&#xff0c;如果主管审批通过&…

深度卷积生成对抗网络详解与实现

深度卷积生成对抗网络详解与实现 0. 前言 1. 网络架构 1.1 批归一化 1.2 激活 1.3 上采样 2. 构建 DCGAN 2.1 生成器 2.2 判别器 2.3 训练 DCGAN 0. 前言 深度卷积生成对抗网络 (Deep Convolutional Generative Adversarial Network, DCGAN) 是基于生成对抗网络 (Generative A…

CF607B Zuma -提高+/省选-

CF607B Zuma codeforces 原链接 题目描述 Genos\texttt{Genos}Genos 最近在他的手机上下载了祖玛游戏。在祖玛游戏里&#xff0c;存在 nnn 个一行的宝石&#xff0c;第 iii 个宝石的颜色是 CiC_iCi​。这个游戏的目标是尽快的消灭一行中所有的宝石。 在一秒钟&#xff0c;Ge…

拆分了解HashMap的数据结构

文章目录 前言 一、底层数据结构总览 二、核心组成部分详解 1. 数组&#xff08;哈希表&#xff09; 2. 节点&#xff08;Node&#xff09; 3. 红黑树&#xff08;TreeNode&#xff09; 三、哈希函数与索引计算 四、哈希冲突的解决 五、扩容机制 六、关键特性与注意事…

关于电脑连接不到5g的WiFi时的一些解决办法

方法一、设备管理器重卸载驱动后&#xff0c;重装驱动。方法二、打开控制面板 “控制面板\网络和 Internet\网络连接” &#xff08;亲测有效&#xff09;点击更改适配器配置右击当前的WLAN属性点击配置选择“高级” 802.11a/b/g 无线模式选项栏 值&#xff1a;6.的双…

Mathtype公式批量编号一键设置公式居中编号右对齐

插件[ygtools] 批量编号一键设置公式居中编号右对齐 单栏/多栏均可https://wwon.lanzout.com/i0NRf35vyw8j 下载密码8543

基于ssm的小橘子出行客户体验评价系统[SSM]-计算机毕业设计源码+LW文档

摘要&#xff1a;随着出行行业的快速发展&#xff0c;客户体验评价对于出行服务质量的提升至关重要。本文设计并实现了基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的小橘子出行客户体验评价系统。该系统涵盖系统用户管理、司机信息管理、客户评价管理等功…

算法日记---二分查找

目录 前言 一、二分查找 1.思想 2.简单二分 3.优点 4.局限性 二、模板 1.基本模板 2.简单例题&#xff08;LeetCode&#xff09; 4.有重复元素的二分 5.0-1问题 总结 前言 本文通过讲解简单的二分查找配合leetcode例题对二分查找本质、模板进行了基础的总结 提示&a…

Level Set(水平集)算法——形象化讲解

目录 维度一&#xff1a;核心思想与比喻&#xff08;它像什么&#xff1f;&#xff09; 维度二&#xff1a;要解决什么问题&#xff1f;&#xff08;它能干嘛&#xff1f;有什么用&#xff1f;&#xff09; 维度三&#xff1a;工作原理&#xff08;它是怎么做到的&#xff1…

DDoS 攻防“军备竞赛”的幕后

谈到 DDoS&#xff08;分布式拒绝服务攻击&#xff09;&#xff0c;很多人会想到“黑客租用肉鸡发流量&#xff0c;网站直接崩”。但事实上&#xff0c;如今的 DDoS 攻防早已变成一场 军备竞赛。攻击者的武器越来越“工业化”&#xff1a;僵尸网络商品化&#xff1a;黑市上&…

如何用 Rust 重写 SQLite 数据库(二):是否有市场空间?

用 Rust 实现一个类似 SQLite 的嵌入式数据库非常有意义&#xff0c;但需要结合具体目标和场景来评估其价值。以下从技术、生态、市场需求和个人成长等多个维度展开分析&#xff0c;并给出结论。一、技术价值&#xff1a;Rust 与数据库的天然契合 SQLite 作为全球装机量最大的数…

【Web】ImaginaryCTF 2025 wp

目录 imaginary-notes certificate codenames-1 passwordless pearl imaginary-notes I made a new note taking app using Supabase! Its so secure, I put my flag as the password to the "admin" account. I even put my anonymous key somewhere in the si…

oracel如何找到外键子表

要找到导致外键约束冲突的子表&#xff08;即包含"child record"的表&#xff09;&#xff0c;可以通过以下SQL查询在Oracle数据库中定位&#xff1a;1. 查询约束基本信息&#xff08;确定父表和子表&#xff09;SELECT owner, constraint_name, table_name AS child…

智源研究院新研究:突破物理世界智能边界的RoboBrain 2.0,将重构具身AI能力天花板

当你对着家用机器人说"把杯子放在笔筒和键盘之间&#xff0c;对齐杯身logo"时&#xff0c;它能精准理解空间关系并执行动作&#xff1b;当多台机器人在超市协作补货时&#xff0c;它们能自主规划轨迹、避免冲突并完成长周期任务——这些曾经出现在科幻电影中的场景&a…

【2025】Office核心组件Microsoft word,Excel,PowerPoint详细使用指南

Office 核心组件使用指南 Microsoft Word 文字处理 Word主要用于创建和编辑文档&#xff0c;如信件、报告、论文等。 2025Office&#x1f517; 1. 界面认识 快速访问工具栏&#xff1a;位于左上角&#xff0c;可自定义保存、撤销、恢复等常用命令。功能区&#xff1a;顶部…

【模型训练篇】VeRL的使用 - RL(PPO)与源码

继续学习字节家的VeRL&#xff0c;今天来看看VeRL的RL&#xff0c;是VeRL系列的第三篇文章&#xff08;话说近期好多大事儿&#xff0c;我司发布了Longcat、韩立结婴、阿里周五发布了QWen-Next都是好东西啊&#xff0c;学不过来了damn&#xff09; 底层分布式能力基础Ray&…

QML Charts组件之折线图的鼠标交互

目录前言相关系列代码示例详解&#xff08;LineSeriesDemo3.qml&#xff09;功能概览运行效果代码说明工程下载参考前言 接上文&#xff08;QML Charts组件之折线图的基础属性&#xff09;&#xff0c;本文将重点介绍LineSeries的鼠标交互&#xff0c;包括&#xff1a;鼠标拖拽…

二值信号量——学习笔记12

本文是笔者在学习 正点原子官方 的《【正点原子】手把手教你学FreeRTOS实时系统》系列视频时整理的笔记。 视频讲解清晰透彻&#xff0c;非常感谢UP主的无私奉献&#xff01;原课程链接如下&#xff1a; &#x1f449; B站视频链接&#xff1a;​​​​​​【正点原子】手把手教…

裸机开发 时钟配置,EPIT

1.概念时钟(clock)&#xff1a;在电子系统中是一个产生稳定、周期性振荡信号的电路或组件。这个信号像节拍器或心跳一样&#xff0c;为数字电路中的各种操作提供同步时序基准。PLL&#xff08;phase locked loop&#xff09;锁相环电路: 倍频PFD&#xff08;phase fractional P…