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.rhkb.cn/news/129942.html

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

相关文章

Mysql join用法详解

本篇文章旨在详细讲解Mysql 中join的用法,并附上例题。 一. left join 首先附上图 这个查询语句最根本的是要找出A表中所有的行, 所以如图所示,A表整个被涂蓝 A与B交叉的那部分可以视为ON后所跟的条件 重点是: 如果A表中有一条…

基于springboot2+mybatis-plus+jsp增删改查

概述 编写简单增删改查,理解之后可以自己试着扩展,相信你也可以,加油,我自己懂了的用注释记在下面方便理解 详细 一、需求(要做什么) 基于现今最流行的技术实现增删改查demo, 便于初学者上手…

[学习笔记]PageRank算法

参考资料:改变世界的谷歌PageRank算法 pagerank算法用于计算节点重要度 思想 如果网页被更多的入度(被引用),则网页更重要。 被重要网站引用比被普通网站引用更加凸显重要性。 所以考虑一个网站是否重要,需要看引用它的网站是否重要&#…

从零开始搭建Apache服务器并使用内网穿透技术实现公网访问

Apache服务安装配置与结合内网穿透实现公网访问 文章目录 Apache服务安装配置与结合内网穿透实现公网访问前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpo…

Vue之scope属性

简介: 在使用Vue脚手架进行开发时,cli编译的时候本质上处理的是一个个文本文件,也就是字符串。每一个组件,即.Vue文件都是一个文本文件,里面包含着模板、组件对象实例以及style样式。组件化开发时,难免会出…

便捷查询中通快递,详细物流信息轻松获取

在如今快节奏的生活中,快递已成为人们生活中不可或缺的一部分。然而,快递查询却常常让人头疼,因为需要分别在不同的快递公司官网上进行查询,耗费时间和精力。为了解决这个问题,固乔科技推出了一款便捷的快递查询助手&a…

03深度学习-目标检测-深度学习方法与传统算法对比

一、目标学习的检测方法变迁及对比 “目标检测“是当前计算机视觉和机器学习领域的研究热点。从Viola-Jones Detector、DPM等冷兵器时代的智慧到当今RCNN、YOLO等深度学习土壤孕育下的GPU暴力美学,整个目标检测的发展可谓是计算机视觉领域的一部浓缩史。整个目标…

产品经理需要熟悉的网站

产品经理需要熟悉的网站 一、SAAS平台的聚合二、saas产品教程三、原型参考教程四、在线文档协作五、云笔记六、脑图&流程图 一、SAAS平台的聚合 作用:面试和工作的需要,方便各行业产品查找竞品。 网址:https://www.zhaosaas.com/&#x…

Spring Messaging远程命令执行漏洞复现(CVE-2018-1270)

一、漏洞说明 Spring Messaging为Spring框架提供消息支持,用户使用受影响版本的Spring Framework时,允许应用程序通过Spring Messaging模块内存中STOMP代理创建WebSocket。由于selector用SpEL表达式编写,并使用StandardEvaluationContext解析…

修改Tomcat的默认端口号

1、找到Tomcat的安装路径。 2、打开conf文件夹。 3、用记事本打开server.xml文件 4、找到 <Connector port"8080" protocol"HTTP/1.1"&#xff0c;其中的8080就是tomcat的默认端口&#xff0c;将其修改为你需要的端口即可。

图书管理信息系统分析与设计

一、系统开发的可行性分析 &#xff08;一&#xff09;系统背景.必要性及意义 随着社会经济的迅速发展和科学技术的全面进步&#xff0c;计算机事业的飞速发展&#xff0c;以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高&#xff0c;人…

C#和.NET FrameWork概述

.NET FrameWork是什么&#xff1f; .NET FrameWork是由微软开发的一种面相对象的环境框架&#xff0c;特点如下&#xff1a; ①多平台&#xff1a;可在各种计算机、服务器、手机上运行。 ②标准化通讯协议&#xff1a;如XML、HTTP、JSON等。 ③安全性&#xff1a;CLR检查并…

sprinboot 引入 Elasticsearch 依赖包

1.springboot与es的版本有比较强的绑定关系&#xff0c;如果springboot工程引入es的依赖后报一些依赖的错误&#xff0c;那么就看表格中的对应关系&#xff0c;将sprinboot或者es的版本做对应的调整 2.本人是从springboot1.x升级到springboot2.x&#xff0c;做了排包工作 3.升级…

FirmAFL

FirmAFL使用并改进了Firmdyne模拟方式&#xff0c;并利用AFL对IoT固件实施高通量灰盒Fuzzing。 一、项目简介 FIRM-AFL 是 第一个针对物联网固件的高吞吐量灰盒模糊测试器。 支持mipsel、mipseb和armel三种CPU架构 &#xff0c;涵盖Firmadyne数据库中90.2%的固件。 FIRM-AFL 解…

自造简易版音频进度条

最近在做音乐播放器页面, 积累了很多有趣的经验, 今天先分享播放进度条的开发过程. 效果 话不多说&#xff0c;先看效果 支持点击修改进度&#xff0c;拖拽修改进度&#xff0c;当然大家肯定都知道ui库里面有现成的&#xff0c;为何要自己造一个 首先著名的ui库中确实都要这…

C#学习 - 方法的定义、调用、调试

方法 方法&#xff08;Method&#xff09;是由C/C中的函数&#xff08;Function&#xff09;发展而来的 //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…

初识MyBatis(一)基于配置文件下的一些增删改查

MyBatis可以使用简单的XML或注解用于配置和原始映射&#xff0c;将接口和Java的POJO&#xff08;Plain Old Java Objects&#xff0c;普通的Java对象&#xff09;映射成数据库中的记录 MyBatis 是一个 半自动的ORM&#xff08;Object Relation Mapping&#xff09;框架 创建好m…

《计算机网络安全》DNS与它的具体作用解析

初步了解DNS 个人介绍DNS定义DNS作用DNS的生活加速作用科普 个人介绍 &#x1f338;一名大四备考考研学子&#xff0c;喜欢前端&#xff0c;还有Android和JAVA开发 &#x1f332;爱看书和打游戏还有唱歌 &#x1f352;热爱编程和读古今中外名著 &#x1f33a;座右铭&#xff1…

el-form表单中不同数据类型对应的时间格式化和校验规则

1. 在表单中, 当选择不同的数据类型时, 需要在下面选择时间时和数据类型对应上, 通过监听数据类型的变化, 给时间做格式化, 2. 但是当不按顺序选择数据类型后, 再选时间可能会报错, 所以需要在dom更新后, 再清空表单. 3. 校验规则, 结束时间需要大于开始时间, 但是不能选当前的…

Jmeter引入外部jar包以满足加密数据的Post请求

目录 一、把项目打成jar包 1、创建一个Maven项目&#xff0c;并保证可以正常运行。 2、把工具类放置项目中&#xff0c;确保无报错且能够正常使用。 3、打包 4、验证 jar包是否有效 5、你想打多个工具类的包 二、在jmeter中使用 1、把jar包放到jmeter仓库下&#xff0c;…