MySQL操作全攻略:库、表、数据、事务全面指南

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL操作全攻略:库、表、数据、事务全面指南

前言

深入MySQL:库、表、数据与事务精要解析:

    MySQL,作为流行的数据库系统,其功能强大且操作灵活。本文将带您快速了解库的操作、表的管理、数据的处理以及事务的掌控,同时在文末补充了对mysql基本数据类型、字段完整性约束等内容的详解,希望您能从中获得有价值的启示。


一、库的操作

1.查询所有的库

show databases;

2.创建数据库

语法:create database 数据库名 charset utf8;

案例:create database test charset utf8;

3.删除数据库

语法:drop database 数据库名;

案例:drop database test;

4.选择库

选择库也称之为进入库、使用库

语法:>>> use 数据库名;

案例:>>> use test;


二、表的操作

当想要对表进行操作前,一定要先选择库 \color{red}{当想要对表进行操作前,一定要先选择库}当想要对表进行操作前,一定要先选择库

1.查询所有的表

show tables;

2.创建表

( 建表过程中涉及到的 m y s q l 基本数据类型,字段完整性约束在文末补充中 ) \color{red}{(建表过程中涉及到的 mysql基本数据类型,字段完整性约束 在文末补充中)}(建表过程中涉及到的mysql基本数据类型,字段完整性约束在文末补充中)

语法:>>> 
create table 表名(
  字段1 类型 约束,
  字段2 类型 约束,
  字段3 类型 约束
);

user表
id 编号    整型
name 姓名   可变长度10-->字符串
age 年龄   小范围的整型
gender 性别   单选 男 女 保密
height 身高   小数   178.23
birthday 出生日期   日期

案例:>>>
create table user(
  id int,
  name varchar(10),
  age tinyint,
  gender enum("男","女","保密"),
  height decimal(5,2),
  birthday date
);

# 注意:
1.每一个字段必须要指定类型,约束可有可无
2.字段与字段之间使用逗号隔开
3.最后一个字段后不能写逗号,否则会报错

3.查询表创建的语句

语法:show create table 表名;

案例:show create table test;

4.查询表结构

语法: desc 表名;

案例: desc test;

5.删除表

语法:drop table 表名;

案例:drop table user;


三、数据的操作

1.查询表中的数据

语法: select * from 表名;

案例: select * from user;

*代表所有的字段

数据的查询内容较多,后续单独放到一篇:深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥

2.给表增加数据

2.1 给表中所有字段增加数据

# 1.一次增加一条数据
语法:>>> insert into 表名 value(值1,值2,值3……);
案例:>>> insert into user value(1,"张三",18,"男",178.23,"2002-03-06");

# 2.一次增加多条数据
语法:>>> insert into 表名 value(值1,值2,值3……),(值1,值2,值3……),(值1,值2,值3……);
案例:>>> insert into user value
(1,"张三",18,"男",178.23,"2002-03-06"),
(2,"李四",16,"女",156.23,"2003-05-06"),
(3,"喜羊羊",8,"保密",147.56,"2016-09-17");

# 注意:
1.每一条数据中的值放在一个小括号中包裹
2.多条数据之间使用逗号隔开
3.最后一条数据后不加逗号

2.2 给表中指定的字段增加数据

# 1.一次增加一条数据
语法:>>> insert into 表名(字段1,字段2……) value(值1,值2……);
案例:>>> insert into user(name,age,gender) value("玛卡巴卡",8,"男");

# 2.一次增加多条数据
语法:>>> insert into 表名(字段1,字段2……) value(值1,值2……),(值1,值2……),(值1,值2……);
案例:>>> insert into user(name,age,gender) value
("玛卡巴卡",8,"男"),
("唔西迪西",6,"女"),
("依古比古",10,"男");

3.数据的修改

# 修改表中指定字段所有的数据
语法:>>> update 表名 set 字段 = 新值;
案例:>>> update people set height = 156;

# 修改表中某一条数据中指定字段的值
语法:>>> update 表名 set 字段 = 新值 where 条件;
案例:>>> update people set height = 170 where sex=2;

4.数据的删除

4.1 物理删除

# 删除表中所有的数据
语法:>>> delete from 表名;
案例:>>> delete from people;

# 删除指定数据
语法:>>> delete from 表名 where 条件;
案例:>>> delete from people where name="喜羊羊";

4.2 逻辑删除

逻辑删除的本质就是在修改数据

1.给表增加一个字段判断是否进行删除
语法:>>> alter table 表名 add 字段名 类型 约束;
案例:>>> alter table people add is_con enum("√","×") default "√";

2.将要删除的数据的值进行修改
语法:>>> update 表名 set 字段 = 新值 where 条件;
案例:>>> update people set is_con = "×" where name = "张三";

四、表结构的操作

1.修改表名

语法:>>> alter table 表名 rename 新表名;
案例:>>> alter table user rename person;

2.给表增加字段

语法:>>> alter table 表名 add 字段名 类型 约束;
案例:>>> alter table person add address varchar(10) unique;

3.删除表中字段

语法:>>> alter table 表名 drop 字段名;
案例:>>> alter table person drop address;

4.修改表中字段

4.1不修改字段名的修改

语法:>>> alter table 表名 modify 字段名 类型 约束;
案例:>>> alter table person modify gender enum("男","女","保密","中性") default "保密";

4.2 修改字段名的修改

语法:>>> alter table 表名 change 原字段名 新字段名 类型 约束;
案例:>>> alter table person change gender sex enum("男","女","保密");

五、补充

1.mysql基础数据类型

# 整型:
  tinyint  范围较小   -128~127   一般用于年龄字段的限制
  int  范围较大
# 小数
  decimal(a,b)   指定当前小数最多有a位,其中小数位数最多是b位
  例如:decimal(5,2)   456.00
# 字符串
  char(num)
    表示固定长度的字符串,如char(3),如果填充'ab'时会补一个空格为'ab ',3表示字符数
    应用:存储固定长度的数据  身份证号18   手机号 11
  varchar(num)
    表示可变长度的字符串,如varchar(3),填充'ab'时就会存储'ab',3表示字符数
    应用:存储可变长度数据   姓名  家庭住址
# 日期时间
  date   日期   "年-月-日"
  time   时间   "时:分:秒"
  datetime  日期时间   "年-月-日 时:分:秒"
  year   年份    "年份"
# 枚举
  enum(选项1,选项2……)
  枚举默认给每一个选项一个序号,序号从1开始
  例如:enum("男","女","保密")     gender="男"     gender=1
......后续通过使用情况补充......

2.字段完整性约束

2.1 主键

primany key

primary key == unique + not null
一张表中只能有一个字段拥有主键约束
给表中哪个字段设置了主键约束,要求当前这个字段必须要有值且值不能位null

create table t1(
id tinyint primary key,
name varchar(10)
);

insert into t1 value(1,"张三");
insert into t1 value(default,"漳卅");   # 设置的default位null,不能使用default
insert into t1 value(null,"漳卅");    # id值不能位null -->非空
insert into t1 value(1,"李四");    # id值不能重复-->唯一
insert into t1(name) value("王五");  # id不能没有值

2.2 自增

auto_increment
自增约束不能单独使用,需要与主键约束或唯一约束搭配使用
给表中哪个字段设置自增约束,当前字段要求整型,如果给值设置null、0、default、不传值,都能实现自增

create table t2(
id tinyint primary key auto_increment,
name varchar(10)
);

insert into t2 value(1,"张三");
insert into t2 value(1,"李四");   # id值不能重复
insert into t2 value(null,"李四");  # id值为null,实现自增
insert into t2 value(default,"李四");  # id值使用default,实现自增
insert into t2(name) value("李四");  # id不传值,实现自增
insert into t2 value(0,"李四");   # id值为0,实现自增
insert into t2 value(-2,"李四");   

2.3 唯一

unique
给表中的哪一个字段增加了唯一约束,要求当前这个字段的值必须唯一,可以为空

create table t3(
id tinyint unique,
name varchar(5)
);

insert into t3 value(1,"张三");
insert into t3 value(1,"李四");   # id字段的值重复,报错 Duplicate entry '1' for key 't1.id'
insert into t3 value(2,"张三");   # 添加成功,name字段的值重复
insert into t3(name) value("张三");  # 添加成功,id字段不指定值,null不算重复值

2.4 非空

空  null
非空 not null
给表中的哪一个字段设置了非空约束,要求当前这个字段的值不能为null
(1.不能手动设置值为null  2.不能使用默认值null  3.如果默认值为null时,要求必须给这个字段传值,不传值会报错)

create table t4(
id tinyint,
name varchar(5) not null
);

insert into t4 value(1,"张三");
insert into t4 value(null,"张三");   # 添加成功,id值为null
insert into t4 value(2,null);   # 添加失败,name值不能为空 ERROR 1048 (23000): Column 'name' cannot be null
insert into t4(id) value(3);   # 添加失败,name字段不能不传值(默认值为null)

2.5 默认

default 默认值
给表中哪一个字段设置了默认值,此刻让该字段使用default或者不给该字段传值,都会直接应用默认值

create table t5(
id tinyint,
name varchar(5) default "神秘人"
);

insert into t5 value(1,"张三");
insert into t5 value(1,null);   # 添加成功,指定name字段的值为null
insert into t5 value(1,default);  # 添加成功,指定name字段的值为默认值
insert into t5(id) value(1);   # 添加成功,不给name字段指定值就会使用默认值

2.6 外键

2.6.1 概念

外键约束:对外键字段的值进行更新和插入时会和引用表中字段的数据进行验证,数据如果不合法则更新和插入会失败,保证数据的有效性


a.想要限制哪一张表中的哪一个字段的值,该字段应该设置外键约束,必须受到另外一张表的某个字段的值的限制

b.被限制的字段与起限制性作用的字段类型一致

c. 起限制性作用的字段要求必须是主键

d. 如果表中已经存在不合规的数据,再增加外键约束会失败;需要将不合规的数据删除,再增加外键约束即可

2.6.2 案例
create table address(
id tinyint primary key,
name varchar(5)
);

insert into address value
(1,"河南省"),
(2,"河北省"),
(3,"山东省");

create table user1(
  id tinyint,
  name varchar(5),
  add_id tinyint,
  foreign key(add_id) references address(id)
);

insert into user1 value(1,"张三",1);   # add_id在范围内,则添加成功
insert into user1 value(2,"李四",6);   # add_id超出范围,则添加失败
2.6.3 设置外键
foreign key(字段) references 表(字段)

1.在创建表时增加外键约束
语法: create table 表名(字段 类型 约束,字段 类型 约束,foreign key(字段) references 表(字段));
案例: create table user1(
    id tinyint,
    name varchar(5),
    add_id tinyint,
    foreign key(add_id) references address(id)
  );

2.给已经创建好的表增加外键约束
语法:alter table 表名 add foreign key(字段) references 表(字段);
案例:alter table user1 add foreign key(add_id) references address(id);
2.6.4 删除外键
如果给一张表中设置外键,系统会自动生成外键名

# 查询外键名-->查询创建表的语句
语法:>>> show create table 表名;
案例:>>> show create table user1;
结果:CONSTRAINT `user1_ibfk_1`    此时user1_ibfk_1就是外键名

# 从表中删除外键
语法:>>> alter table 表名 drop foreign key 外键名;
案例:>>> alter table user1 drop foreign key user1_ibfk_1;

3.事务

3.1 事务的定义

所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。


事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性

3.2 事务的特性

原子性:事务是一个不可分割的最小工作单元;事务中的操作要么全部成功提交,要么全部失败回滚;

一致性:事务总是从一个一致性的状态转换到另外一个一致性的状态;

隔离性:事务在最终提交之前,对其他事务不可见;

持久性:事务一旦提交,其所做的修改会永久保存到数据库中;

3.3 事务的操作

3.3.1 事务的查看
表的引擎类型必须是innodb类型才可以使用事务
# 查询创建表的语句
语法:>>> show create table 表名;
案例:>>> show create table people;

# 注意:出现ENGINE=InnoDB,说明表的引擎为innodb
3.3.2 事务的开启
begin;
start transaction;
3.3.3 事务的提交
commit;
3.3.4 事务的回滚
rollback;

3.4 事务的案例实现

3.4.1 案例
create table aa(
id tinyint,
money int
);

insert into aa value(1,100),(2,200);
3.4.2 事务提交案例
id1=100   id2=200
# 第一步:将终端1中的事务进行开启   
  >>> begin;
# 第二步:对终端1中的表进行操作-->增加数据、修改数据、删除数据……
  >>> insert into aa value(3,300)
# 第三步:查询终端1中的数据
  >>> select * from aa;
    id1=100   id2=200   id3=300
# 第四步:查询终端2中的数据
  >>> select * from aa;
    id1=100   id2=200
    问题:终端1和终端2都是aa表,终端2中的数据没有与终端1中的数据同步
    原因:终端1中的事务没有提交
# 第五步:将终端1中的事务进行提交
  >>> commit;
# 第六步:查询终端1中的数据
  >>> select * from aa;
    id1=100   id2=200   id3=300
# 第七步:查询终端2中的数据
  >>> select * from aa;
    id1=100   id2=200  id3=300
    结果:终端2中的数据与终端1中的数据同步
    原因:终端1中的事务提交
3.4.3 事务回滚案例
id1=100   id2=200  id3=300
# 第一步:在终端1中开启事务
  >>> begin;
# 第二步:在终端1中进行数据的操作
  >>> insert into aa value(4,400);
  >>> update aa set money = 1000 where id = 1;
  >>> delete from aa where id = 3;
# 第三步:查询终端1中的数据
  >>> select * from aa;
    id1=1000   id2=200   id4=400
# 第四步:查询终端2中的数据
  >>> select * from aa;
    id1=100   id2=200   id3=300
    问题:终端1和终端2都是aa表,终端2中的数据没有与终端1中的数据同步
    原因:终端1中的事务没有提交
# 第五步:将终端1中的事务进行回滚
  >>> rollback;
# 第六步:查询终端1中的数据
  >>> select * from aa;
    id1=100   id2=200   id3=300
    结果:终端1中的数据回复到最初始
    原因:将事务的进行回滚,在事务开始后的维护到本地缓存的所有的操作全部归零
# 第七步:查询终端2中的数据
  >>> select * from aa;
    id1=100   id2=200  id3=300
    结果:终端2中的数据与终端1中的数据同步
    原因:终端1中的事务提交
3.4.4 说明

开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中

提交事务,将本地缓存中的数据维护到物理表中

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
113 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
7天前
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
在项目中,为了解决Redis与Mysql的数据一致性问题,我们采用了多种策略:对于低一致性要求的数据,不做特别处理;时效性数据通过设置缓存过期时间来减少不一致风险;高一致性但时效性要求不高的数据,利用MQ异步同步确保最终一致性;而对一致性和时效性都有高要求的数据,则采用分布式事务(如Seata TCC模式)来保障。
39 14
|
10天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
41 9
|
13天前
|
关系型数据库 MySQL
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
38 5
|
14天前
|
SQL DataWorks 关系型数据库
阿里云 DataWorks 正式支持 SelectDB & Apache Doris 数据源,实现 MySQL 整库实时同步
阿里云数据库 SelectDB 版是阿里云与飞轮科技联合基于 Apache Doris 内核打造的现代化数据仓库,支持大规模实时数据上的极速查询分析。通过实时、统一、弹性、开放的核心能力,能够为企业提供高性价比、简单易用、安全稳定、低成本的实时大数据分析支持。SelectDB 具备世界领先的实时分析能力,能够实现秒级的数据实时导入与同步,在宽表、复杂多表关联、高并发点查等不同场景下,提供超越一众国际知名的同类产品的优秀性能,多次登顶 ClickBench 全球数据库分析性能排行榜。
|
22天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
18天前
|
SQL 关系型数据库 MySQL
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
定时任务频繁插入数据导致锁表问题 -> 查询mysql进程
38 1
|
18天前
|
关系型数据库 MySQL
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
28 1
|
19天前
|
SQL 关系型数据库 MySQL
mysql数据误删后的数据回滚
【11月更文挑战第1天】本文介绍了四种恢复误删数据的方法:1. 使用事务回滚,通过 `pymysql` 库在 Python 中实现;2. 使用备份恢复,通过 `mysqldump` 命令备份和恢复数据;3. 使用二进制日志恢复,通过 `mysqlbinlog` 工具恢复特定位置的事件;4. 使用延迟复制从副本恢复,通过停止和重启从库复制来恢复数据。每种方法都有详细的步骤和示例代码。
|
9天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
23 4