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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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
相关文章
|
8天前
|
关系型数据库 MySQL 数据库
ORM对mysql数据库中数据进行操作报错解决
ORM对mysql数据库中数据进行操作报错解决
31 2
|
8天前
|
SQL 关系型数据库 MySQL
MySQL如何排查和删除重复数据
该文章介绍了在MySQL中如何排查和删除重复数据的方法,包括通过组合字段生成唯一标识符以及使用子查询和聚合函数来定位并删除重复记录的具体步骤。
26 2
|
5天前
|
SQL 关系型数据库 MySQL
MySQL操作利器——mysql-connector-python库详解
MySQL操作利器——mysql-connector-python库详解
26 0
|
3天前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
30 11
|
1天前
|
关系型数据库 MySQL 数据库
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
13 5
|
8天前
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
26 4
|
3天前
|
SQL Oracle 关系型数据库
详解 MySQL 的事务以及隔离级别
详解 MySQL 的事务以及隔离级别
9 0
|
6天前
|
存储 SQL 关系型数据库
mysql删除 所有数据
mysql删除 所有数据
|
16天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
18天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
158 11
下一篇
无影云桌面