Mysql数据库之常用SQL语句及事务学习总结

news2025/1/16 8:14:50

数据库介绍

几个常见的缩写:

  • DB:数据库。全称:DataBase。
  • DBMS:数据库管理系统。全称:DataBase Management System。
  • DBS:数据库系统。全称:DataBase System。
  • DBA:数据库管理员。全称:DataBase Administrator。

DBS、DBMS、DB三者关系:DBS包含DB、DBMS。

数据库定义:

数据库:按照一定的数据结构来组织、存储和管理数据。

数据库相关SQL

连接数据库:

mysql -u 用户名 -p 密码

退出数据库:

exit

查看所有数据库

show databases;

创建数据库

create database 数据库名称 character set utf8;

查看数据库详情

show create database 数据库名称;

使用数据库

use 数据库名称;

删除数据库

drop database 数据库名称;

数据表相关SQL

操作数据表之前一定要先使用数据库。只有使用了具体的数据库,才能在该数据库下创建数据表。

创建数据表

create table 表名称 (表字段);

指定数据库引擎和字符集创建数据表

create table 表名称 (表字段) engine=innodb charset=utf8;

数据库引擎有两个:innodb和myisam。默认数据库引擎是innodb。

查看已创建的所有数据表

show tables;

查看数据表详情

show create table 数据表名称;

查看表字段信息

desc 数据表名称;

删除数据表

drop table 数据表名称;

修改表相关SQL

修改数据表名称

rename table 原数据表名称 to 新数据表名称;

修改数据表引擎和字符集

alter table 数据表名称 engine=charset=字符集;

添加数据表字段

// 默认添加的字段放在所有字段最后面
alter table 数据表名称 add 字段名称 字段类型;
 
// 将新添加的字段放在最前面
alter table 数据表名称 add 字段名称 字段类型 first;
 
// 将新添加的字段放在某个字段后面
alter table 数据表名称 add 字段名称 字段类型 after 字段名称;

删除数据表字段

alter table 数据表名称 drop 字段名称;

修改表字段名称和类型

alter table 数据表名称 change 原字段名称 新字段名称 字段类型;

修改表字段类型和位置

// 修改后,字段还在原来位置
alter table 数据表名称 modify 字段名称 字段类型;
 
// 修改后,在所有字段最前面
alter table 数据表名称 modify 字段名称 字段类型 first;
 
// 修改后,在某个字段后面
alter table 数据表名称 modify 字段名称 字段类型 after 字段名称;

数据相关的SQL

插入数据(INSERT)

// 全表全字段插入
insert into 数据表名称 (字段1,字段2,字段3...) values (字段1的值,字段2的值,字段3的值...);
 
// 特定字段插入
insert into 数据表名称 (字段1,字段2) values (字段1的值,字段2的值);
 
// 一次插入多条数据
insert into 数据表名称 (字段1,字段2,字段3...) values(字段值...),(字段值...),(字段值...).....;

删除数据(DELETE)

// 删除全部数据
delete from 数据表名称;
 
// 删除指定数据
delete from 数据表名称 where 条件;

修改数据(UPDATE)

// 修改全部数据
update 数据表名称 set 字段1 =1;
 
// 指定条件修改
update 数据表名称 set 字段1 =1 where 修改条件;
 
// 修改多字段
update 数据表名称 set 字段1 =1,字段2 =2 where 修改条件;

注意:修改对字段时,使用逗号隔开,不能使用and连接。

查询数据(SELECT)

// 查询全部数据
select * from 数据表名称;
 
// 查询指定字段
select 字段1,字段2 from 数据表名称;
 
// 条件查询
select 字段1,字段2 from 数据表名称 where 条件;
 
// 排序查询:desc表示降序,asc表示升序
select * from 数据表名称 order by 字段 desc/asc;
 
// 分组查询
select * from 数据表名称 group by 字段;
 
// 含有条件的分组查询
select * from 数据表名称 group by 字段 having 条件;
 
// 分页查询:limit m,n表示跳过m条数据,查询出n条数据。下面的limit 0,5表示跳过0条数据,查询5条数据
// 因此查询出前5条数据。
select * from 数据表名称 limit 0,5;

查询的语句非常丰富,可以是上面的所有查询语句结合使用。格式如下:

select * from 数据表名称 where 条件 order by 字段 desc/asc group by 字段 limit 0,5;

数据表字段约束

主键约束

  • 主键是指能够唯一确定该条数据的字段。
  • 主键是唯一且非空的。
  • 约束是指创建数据表时,给某些字段添加的限制条件。
// 为id添加主键约束
create table 数据表名称 (
    id int primary key
) default charset=utf8;

主键约束代码:

primary key

自增约束

  • 自增约束是指该字段的值自动增加。
  • 自增规则:从数据表中最大值基础上,自增。
  • 自增约束一般和主键一起使用,称为:主键自增约束。
// 创建自增约束
create table 数据表名称 (
    id int primary key auto_increment
) default charset=utf8;

自增约束代码:

auto_increment

非空约束

  • 限制某个字段的值不能为空。
create table 数据表名称 (
    name varchar(20) not null
) default charset=utf8;

非空约束代码:

not null

唯一约束

  • 限制某个字段的值是唯一的,只能在数据表中出现一次。
create table 数据表名称 (
    name varchar(20) unique
) default charset=utf8;

唯一约束代码:

unique

设置字段默认值约束

  • 当没有为某个字段插入数据值时,如果该字段具有默认值约束,则会插入默认值。
  • 如果为含有默认值约束的字段,插入null值,则不会触发默认值约束,而是插入null。
create table 数据表名称 (
    age int default 1
) default charset=utf8;

插入数据时:

// 主动插入数据值,不会触发默认值约束
insert into 数据表名称 (age) values (20);
 
// 插入null时,不会触发默认值约束
insert into 数据表名称 (age) values (null);
 
// 不插入,则会触发默认值约束,下面这条插入语句会插入1
insert into 数据表名称 values();

外键约束

  • 外键就是用于和另外的数据表建立关系的字段。
  • 外键的值可以为null。但是不能是关联表中没有的数据值。
  • 如果建立外键约束,那么在删除时,不能先删除关联表中的数据以及数据表,需要先删除对应外键的数据。
create table 数据表名称 (
    id int,
    deptid int contraint 约束名 foreign key(外键字段名) references 被依赖的表名(被依赖的字段名)
);

注释comment

  • comment用于说明字段的含义。
create table 数据表名称 (
    id int comment '用户id',
    name varchar(50) comment '用户名'
) default charset=utf8;

数据冗余

  • 由于表设计的不合理,出现了大量重复的数据,称为数据冗余。
  • 解决方案:可以将重复的数据提取出来,单独设计为一张表,然后和另一张表建立外键约束。

事务

事务的定义

  • 事务是数据库中能够执行同一业务多条语句的工作单元,它能够保证多条语句要么全部成功,要么全部失败。

事务的ACID特性

  • 原子性(Atomicity):事务是一个不可分割的工作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务执行之前是一个完整的状态,执行完成之后,是另一个完整的状态。
  • 隔离性(Isolation):多个用户并发访问数据库时,一个用户的事务不会影响另一个用户的事务。
  • 持久性(Durability):一个事务一旦提交,那么它对数据库的操作就是永久的。

事务相关SQL(TCL)

开启事务

begin;

提交事务

commit;

事务提交会将内存中对数据操作改动,一次性提交到磁盘当中。

回滚事务

rollback;

回滚事务会将内存中对数据库的改动清除,从而保证数据库的数据不受影响。

保存回滚点

savepoint 自定义回滚点名称;

回滚到某个回滚点

rollback to 回滚点名称;

使用事务模拟银行账户流程:

  • 创建一个测试数据库:mytest
create database mytest character set utf8;
  • 选择数据库
use mytest;
  • 创建一张测试数据表:test
create table test (
    id int primary key auto_increment comment '账户id',
    name varchar(20) not null comment '用户名称',
    money int default 0 comment '账户余额',
    status varchar(10) not null comment '账户状态'
) default charset=utf8;
  • 插入两条测试数据:
insert into test (name,money,status) values ('张三',2000,'正常');
insert into test (name,money,status) values ('李四',500,'冻结');
  • 只有账户状态是**“正常”**的用户才能转账成功。
  • 开启事务
begin;
  • 执行转账业务:李四给张三转账200。
update test set money = money + 200 where name = '张三' and status = '正常';
 
update test set money = money - 200 where name = '李四' and status = '正常';
  • 修改之后,可以查询结果。
select * from test;

注意:如果是在刚刚执行了事务的窗口查看数据,则会出现下面的内容:

在这里插入图片描述

这是因为查询的是当前内存中的数据。其实数据库中的数据是没有改变的。可以新开一个窗口进行查看即可知道。

  • 新开一个窗口,再次查询。

在这里插入图片描述

这是因为开启了事务,没有提交之前,都不会对数据库中的数据进行持久性修改。

因为修改失败,所以可以使用回滚。

  • 回滚事务
rollback;

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

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

相关文章

Matlab图像处理-分水岭算法

基本概念 最常用的分水岭算法是F.Meyer在20世纪90年代早期提出的基于灰度图像的分割算法,它是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度&#xff0c…

二分搜索树层序遍历(Java 实例代码)

目录 二分搜索树层序遍历 Java 实例代码 src/runoob/binary/LevelTraverse.java 文件代码: 二分搜索树层序遍历 二分搜索树的层序遍历,即逐层进行遍历,即将每层的节点存在队列当中,然后进行出队(取出节点&#xff0…

分身空间(应用多开)会员版,提供更便捷的应用多开体验

分身空间(应用多开)会员版是一款功能强大的跨平台多设备同步工具。通过这个应用,您可以在手机、平板电脑和电脑等多个设备上同时登录和使用多个账号,实现应用的多开。 无论是社交媒体、游戏、聊天工具还是其他应用,分…

Windows MySQL服务安装及问题解决方案

Windows MySQL服务安装及问题解决方案 安装及配置步骤一:官网下网MySQL安装包步骤二:设置环境变量步骤仨:配置MySQL,ini配置文件步骤四:初始化MySQL步骤五:开启MySQL服务步骤六:测试是否安装成功步骤七&…

【Linux】Systemd 中的单元(Unit)和单元文件(Unit File)怎么理解?

单元(Unit)单元文件(Unit File)感谢 💖 关于systemd是什么,http://t.csdn.cn/pMkG7这篇文章里有详细说明。 这篇文件我们一起来看看Systemd 中的单元(Unit)和单元文件(Un…

C语言经典100例题(50)--#include 的应用练习

目录 题目 问题分析 代码 运行结果 题目 #include 的应用练习 问题分析 头文件的定义:#include 指令告诉预处理器打开指定的文件,并且把此文件的内容插入到当前文件中。因此,如果想让几个源文件可以访问相同的信息,可以把…

算法通关村18关 | 透析回溯的模板

回溯有清晰的解题模板, void backtracking(参数){if (终止条件){存放结果;return;}for (选择本层中的集合元素(画成树,就是树节点孩子的大小) {处理节点;backtracking();回溯,撤销处理结果;}} 1. 从N叉树说起 在回溯之前&#x…

克隆阿里巴巴镜像网站的yum源制作自己的yum源

“你会在一间炉火昏黄的房子里死去,而你父亲的魔法全然失效。那张天鹅绒床是如此温热,你的死亡尚有余温之时,我将从风雪中归来……” 主要使用到 nginx 服务器制作 与 vsftpd 服务器不一样的是 nginx 使用到的是 http 协议 xsftpd 使用到的是…

第14章_瑞萨MCU零基础入门系列教程之QSPI

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…

103. 二叉树的锯齿形层序遍历

103. 二叉树的锯齿形层序遍历 题目-中等难度示例1. bfs 题目-中等难度 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行&#xff09…

常用串口调试工具(列表)

目录 串口调试助手(微软商店可以下载,无广告)UartAssist(串口调试助手)串口调试助手 5.13.1 串口调试助手(微软商店可以下载,无广告) 链接: https://apps.microsoft.com/store/detail/%E4%B8%B2%E5%8F%A3%E8%B0%83%E8%AF%95%E5%8A%A9%E6%89%8B/9NBLGGH4…

sqli-labs-master安装及报错处理

一、环境的安装 1.phpstudy 安装 Windows版phpstudy下载 - 小皮面板(phpstudy) (xp.cn)https://www.xp.cn/download.html 注意:这里用的是windows版本 2.SQLi-Labs 下载安装 (1)下载 mirrors / audi-1 / sqli-labs GitCodehttps://gitc…

Java8实战-总结24

Java8实战-总结24 用流收集数据收集器简介收集器用作高级归约预定义收集器 用流收集数据 流可以用类似于数据库的操作帮助你处理集合。可以把Java 8的流看作花哨又懒惰的数据集迭代器。它们支持两种类型的操作:中间操作(如filter或map)和终端操作(如count、findFir…

Android与单片机 | 开发板 | 智能硬件 | 智能设备 | 数据协议 |开发总结

一、缘起 工作中经常遇到需要Android程序与各式各样的板子、智能设备进行交互,通信的方式也基本上都是Ble或者Socket tcp/udp等等…其中最重要的一点就是通信的协议、协议、协议重要的是说三遍;通信协议就是用来定义与设备交互的方式和交互过程中数据包…

企业架构LNMP学习笔记37

1、能够理解读写分离的目的; 2、能够描述读写分离的常见实现方式; 3、能够通过项目框架配置文件实现读写分离; 4、能够通过中间件实现读写分离; 业务背景描述: 时间:2014.6.-2015.9 发布产品类型&#x…

【数据结构】线性表的知识点全面总结

目录 1.线性表的顺序表示 1.1顺序表的基本概念 1.2顺序表的基本操作 1.2.1插入 1.2.2删除 1.2.3查找 2.线性表的链式表示 2.1单链表 单链表的基本概念 2.1.1基本操作 2.1.1.1单链表的建立 2.1.1.2插入 2.1.1.3删除 2.1.1.4查找 2.2双链表 2.2.1基本操作 2.2.1.1插入 2.2.…

MySQL高可用九种方案

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 参考视频 MMM方案(单主) MySQL高可用方案之MMM(Multi-Master Replication Manager)是一…

langchain-chatchat或者说fastchat启动访问404的问题

虽然很白痴,但是我还是记录一下我遇到的问题。 1.问题 最近想测试看看langchain的本地知识库效果,看到一个很完备的库,就是lanchain-chatchat。但是我启动了项目后进行对话回答是乱码的。 经过我的排查,问题不出在webui层&…

XSS入门 XSS Challenges

level1(直接注入) <script>alert(xss)</script>level2(双引号闭合标签) 测试 <sCr<ScRiPt>IPT>OonN"\/(hrHRefEF)</sCr</ScRiPt>IPT>发现<>"被转换&#xff0c;构造新的语句 "><script>alert(/xss/)</…

MySQL高可用搭建方案之(MHA)

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 原文地址 MHA架构介绍 MHA是Master High Availability的缩写&#xff0c;它是目前MySQL高可用方面的一个相对成熟的解决方案&#xff0…