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;

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

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

相关文章

初识Nacos

前言 Nacos是一个用于微服务架构下的服务发现和配置管理以及服务管理的综合解决方案(官网介绍),这里的服务发现其实就是注册中心,配置管理就是配置中心,而服务管理是二者的综合; Nacos特性 1.服务发现与…

什么是Linux

什么是Linux? 不知道大家是什么时候开始接触Linux,我记得我是大三的时候,那时候通过国嵌、韦东山的教学视频,跟着搭bootloader,修改内核,制作根文件系统,一步步,视频真的很简单&…

两性养生网站源码 生活类减肥网站源码 健康网模板源码 支持QQ登录和百度主动推送

本套模板非常适合生活类,两性类,减肥类等等类型的网站,这类型网站比较好做流量,因为客户群体众多, 可以自行改内容为其他类型网站模板总体非常简洁漂亮,配色合理,视觉舒服,并且配合…

HarmonyOS实现几种常见图片点击效果

一. 样例介绍 HarmonyOS提供了常用的图片、图片帧动画播放器组件,开发者可以根据实际场景和开发需求,实现不同的界面交互效果,包括:点击阴影效果、点击切换状态、点击动画效果、点击切换动效。 相关概念 image组件:图片…

IP175LLF基本参数和引脚图

特性 宽工作温度范围IP175LLF(0C至70C) IP175LLFI(-40C至85C)内置5个MAC和4个PHY 每个端口可配置为10base-t、100Base-TX 最多2K个MAC地址支持自极性10Mbps 汽车MDI-MDIX 支持1个MII/RMII端口Layer2-4多字段分类器 支持8-MultiField输入支持交通政策支持多字段过滤器 支…

静态链表处理

静态链表是指使用数组来表示节点。在C中,可以使用数组来创建静态列表,其中每个元素都有固定的位置和索引。可以通过下标寻址的方式来访问和操作列表中的元素。 单向列表: struct linkednode{int data;int next; }node[N]; 双向链表&#x…

K8S1.23.6版本详细安装教程以及错误解决方案(包括前置环境,使用部署工具kubeadm来引导集群)

准备工作(来自官方文档) 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存&#xf…

HJ23 删除字符串中出现次数最少的字符

描述 实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。 数据范围:输入的字符串长度满足 1≤n≤20 ,保…

vue使用wangEditor

vue版本2.0;editor5.1.23版本;editor-for-vue:1.0.2版本 api文档入口 效果图 点击查看如何封装 安装步骤入口 npm install wangeditor/editor --savenpm install wangeditor/editor-for-vue --save代码(未封装过的)…

Layui快速入门之第三节栅格布局

目录 一:栅格布局的基本概念 二:栅格布局规则 三:始终等比例水平排列案例 四:响应式规则 五:移动设备、桌面端的组合响应式展现案例 六:移动设备、平板、桌面端的复杂组合响应式展现案例 七&#xf…

day35 线程

程序:是为了完成特定的任务,用某种语言编写的一组有序指令的集合,是一段静态的代码 进程:是程序的一次执行过程 线程:线程是进程中的一个执行单元 线程是调度和执行的单位 处理器和线程间的关系 创建线程(重点) 创建…

大数据课程L5——网站流量项目的实时业务系统搭建

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握网站流量项目的 Flume—>Kafka 连通; ⚪ 掌握网站流量项目的实时业务系统搭建; 一、Flume—>Kafka 连通 1. 实现步骤 1. 启动三台服务器。 2. 启动 Zookeeper 集群。 执行指…

2023国赛 B题论文 基于多波束测深技术的海洋探测建模与分析

因为一些不可抗力,下面仅展示小部分论文,其余看文末 一、问题重述 1.1 问题背景 海洋测深是测定水体深度与海底地形的重要任务,有两种主要技术:单波束测深与多波束测深。单波束适用于简单任务,但多波束可提供更精确…

【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献

【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献 1 题目 1.1 问题背景 多波束测深系统是利用声波在水中的传播特性来测量水体深度的技术,是在单波束测深的基础上发展起来的,该系统在与航迹垂直的平面内一次能发射出数十个乃至上百个…

【C刷题】day1

一、选择题 1.正确的输出结果是 int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf("%d,%d\n",x, y); return 0; } 【答案】: 3,8 【解析】: 考点: &#xff…

Linux DirtyPipe权限提升漏洞 CVE-2022-0847

Linux DirtyPipe权限提升漏洞 CVE-2022-0847 漏洞描述 CVE-2022-0847-DirtyPipe-Exploit CVE-2022-0847 是存在于 Linux内核 5.8 及之后版本中的本地提权漏洞。攻击者通过利用此漏洞,可覆盖重写任意可读文件中的数据,从而可将普通权限的用户提升到特权…

(其他) 剑指 Offer 67. 把字符串转换成整数 ——【Leetcode每日一题】

❓ 剑指 Offer 67. 把字符串转换成整数 难度:中等 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为…

Mybatis复杂查询及动态SQL

文章目录 一. 较复杂的查询操作1. 参数占位符#{}和${}2. SQL注入3. like查询4. resultType与resultMap5. 多表查询5.1. 一对一表映射5.2. 一对多表映射 二. 动态SQL1. if标签2. trim标签3. where标签4. set标签5. foreach标签 本篇中使用的数据表即基础映射类都是基于上一篇博客…

【C++进阶】多态

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

Unity实现2D游戏跟随摄像机(平滑移动)

文章目录 玩家角色脚本字段跟随逻辑 完整代码其他相关文章连接 玩家角色 首先创建一个可用的玩家角色,写好移动逻辑,如果要使用在Unity商店中购买的资源,可以点击Window菜单栏> Package Manager选项,来打开Package Manager窗口…