Mysql数据库之常用SQL语句及事务学习总结
数据库介绍
几个常见的缩写:
- 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;
相关文章:
Mysql数据库之常用SQL语句及事务学习总结
数据库介绍 几个常见的缩写: DB:数据库。全称:DataBase。DBMS:数据库管理系统。全称:DataBase Management System。DBS:数据库系统。全称:DataBase System。DBA:数据库管理员。全称…...
RuoYi若依管理系统最新版 基于SpringBoot的权限管理系统
RuoYi是一个后台管理系统,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf)主要目的让开发者注重专注业务,降低技术难度,从而节省人力成本,缩短项目周期,提高软件安全质量。 本…...
html实现邮件模版布局-flex布局table布局-demo
邮件模版布局 flex - 布局简单方便 兼容性差 table - 优点 就是兼容性好,其他没有优点 注:使用图片需要png最好,使用svg图google邮箱会出现不能使用的情况 效果图 flex布局 <!DOCTYPE html> <html lang"en" xmlns:th&qu…...
CENTOS7安装redis在/home/pms/software路径下,并且将redis加入到systemctl中
要将/home/software/redis-stack-server-7.2.0-v0/service/redis.service添加到systemctl系统管理,你可以执行以下步骤: 创建软连接: sudo ln -s /home/software/redis-stack-server-7.2.0-v0/service/redis.service /etc/systemd/system/r…...
数据库笔记
数据库原理及应用 半期考:运筹学,概率论,数据库 文章目录 数据库原理及应用1.课程的考核2.数据库的运用3.数据库学什么? 第一章 绪论1.1数据库系统概述1.1.1基本概念1.1.2数据管理技术的生产和发展人工管理文件系统数据库系统 1.…...
AI是风口还是泡沫?
KlipC报道:狂热的人工智能追捧潮有所冷静,投资者在“上头”的追涨之后,开始回归到对基本面的关注。 KlipC的合伙人Andi D表示:“近日,有关英伟达二季度“破纪录”财报涉嫌造假的话题正在社交媒体和投资者论坛中甚嚣尘上…...
echarts环图配置
echarts环图配置 1、安装echarts npm install echarts4.9.02、页面引入echarts import echarts from echarts;3、应用 template片段 <div class"chart-wrap"><div id "treeChart" style "width: 180px; height:180px;" ><…...
Redis优化 RDB AOF持久化
---------------------- Redis 高可用 ---------------------------------------- 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境…...
三维模型3DTILE格式轻量化压缩主要技术方法浅析
三维模型3DTILE格式轻量化压缩主要技术方法浅析 三维模型3DTILE格式轻量化压缩主要技术方法浅析 随着三维地理空间数据的应用日益广泛,为了更快速地传输和存储这些大规模数据,3DTile格式的轻量化压缩显得尤为重要。本文将浅析关于三维模型3DTile格式轻量…...
c++day2---9.7
1> 思维导图 2> 封装一个结构体,结构体中包含一个私有数组,用来存放学生的成绩,包含一个私有变量,用来记录学生个数, 提供一个公有成员函数,void setNum(int num)用于设置学生个数 提供一个公有成员…...
地震反演基础知识2(代码演示)
文章目录 数据集代码演示1. SEG盐真实数据2. SEG盐速度模型3. SEG盐模拟地震数据4. SEG盐模拟速度模型5. openfwi地震数据6. openfwi速度模型 数据集代码演示 1. SEG盐真实数据 # 绘制SEG盐层数据的地震图像 def pain_seg_seismic_data(para_seismic_data):Plotting seismic …...
C#学习 - 方法的定义、调用、调试
方法 方法(Method)是由C/C中的函数(Function)发展而来的 //C语言 #include <stdio.h> int Add(int x, int y) {return x y; }//函数 int main(void) {int a 4;int b 2;int c Add(a, b);printf("%d %d %d\n&quo…...
『PyQt5-Qt Designer篇』| 09 Qt Designer中分割线和间隔如何使用?
09 Qt Designer中分割线和间隔如何使用? 1 间隔1.1 水平间隔1.2 垂直间隔2 分割线2.1 水平线2.2 垂直线3 保存并执行1 间隔 间隔有水平间隔和垂直间隔: 1.1 水平间隔 拖动4个按钮,并设置为水平布局: 在第一个按钮的右边添加一个水平间隔: 设置其sizeType为Fixed,宽度为20…...
基于springboot2+mybatis-plus+jsp增删改查
概述 编写简单增删改查,理解之后可以自己试着扩展,相信你也可以,加油,我自己懂了的用注释记在下面方便理解 详细 一、需求(要做什么) 基于现今最流行的技术实现增删改查demo, 便于初学者上手…...
[PHP]empty一直返回true
class Post {public function __get($key){return true;} }$post new Post(); var_dump(empty($post->a));// bool(true) PHP: 重载 - Manual 读取不可访问(protected 或 private)或不存在的属性的值时,__get() 会被调用。 当对不可访…...
[2023.09.11]: Yew的SSR中的Cargo.toml配置
由于各种原因,我最后还是打算把Yew应用的开发从csr模式转成ssr模式。没想到这里面的水还是挺深的,这里面的Cargo.toml配置包含的信息量之大,着实让我头疼了一番。 Cargo.toml的配置如下 [package] name "app" version "0.…...
HTTPS加密协议详解:HTTPS性能与优化
1、HTTPS性能损耗 前文讨论了HTTPS原理与优势:身份验证、信息加密与完整性校验等,且未对TCP和HTTP协议做任何修改。但通过增加新协议以实现更安全的通信必然需要付出代价,HTTPS协议的性能损耗主要体现如下: (1).增加延时 分析前…...
9月11日,每日信息差
今天是2023年09月11日,以下是为您准备的13条信息差 第一、微软已停止向俄罗斯提供服务,俄罗斯接下来的举动震惊世人!对此俄罗斯回应称,他们将把微软的收费版改为免费版并推广至全球 第二、我国首套海洋漂浮式温差能发电装置完成…...
RHCSA-VM-Linux基础配置命令
1.代码命令 1.查看本机IP地址: ip addr 或者 ip a [foxbogon ~]$ ip addre [foxbogon ~]$ ip a 1:<Loopback,U,LOWER-UP> 为环回2网卡 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP>为虚拟机自身网卡 2.测试网络联通性: [f…...
Web安全研究(四)
No Honor Among Thieves: A Large-Scale Analysis of Malicious Web Shells Stony Brook University Ruhr-University Bochum Web shell作为恶意脚本,攻击者将其上传到被攻陷的Web服务器,以远程执行任意命令、维护其访问权限并提升其特权。尽管在实践中它…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
