MySQL:主键,事件,索引的基础用法(10)

主键

指定某个字段作为主键,这个字段内容无法为空,而且他的内容不能重复作为唯一的标识

主键还有自增和非自增,比如你创建了一个表,你设置了自增,他就会按编号依次自动加一

我创建了一个名为tarro的数据库,本章表全在这个库里进行编写

primary key就主键,在哪个字段后面,哪个就是主键

create table a (id int primary key auto_increment , name varchar(10));# auto_increment就是自增

创建完了之后,往里面插入俩数据看一下

insert into a(name) values ("张三"),("李四");

可以发现我们根本就没有去写id的内容,这就是自增

再去创建一个不自增的表看一下

create table b (id int primary key  , name varchar(10));

直接就保存了,因为id是主键,我们只插入了name的内容,id没有插入也就意味着id是空的,但是主键不能为空所以他就报错了


事务

保证成批操作要么完全执行,要么完全不执行,维护数据的完整性。也就是要么成功要么失败。

一个事务中包含多条sql语句,而且这些sql语句之间存在一定的关系

也就是当数据不行的时候,我们可以进行数据回滚

事物远远不止这些,本章先介绍一下基础操作

我现在往b的数据库里插入一行数据

insert into b values (1,"张三"),(2,"李四");

开启一下事务

begin;
insert into b values (3,"zs"),(4,"ls");

当数据没有问题的时候就可以进行提交

commit;

再去添加几个数据

insert into b values (5,"张三2"),(6,"李四2");

然后假装不小心退出了mysql

发现提交上了

因为当我们开启了事务,当你出现了问题退出了mysql,他会自动帮你提交,如果你不行自动提你可以这样做

set autocommit = 0;

这样就把自动提交禁用了,现在你开启了事务以后,即使中通退出,mysql也不会帮你自动提交了

要是想恢复把0改成1就行

下面展示一下数据回滚,先开启事务

begin;
insert into b values (7,"张三2"),(8,"李四2");

插入俩数据

发现这俩数据不行,需要回滚回之前的数据

rollback;

这样就回滚回来了,最后进行提交一下

commit;

索引

什么是索引?

一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。

索引能够加快客户端的查询速度

为什么要有索引呢?

索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能
非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。
索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。
索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。

索引分类
1.普通索引index :加速查找
2.唯一索引主键索引:primary key :加速查找+约束(不为空且唯一)唯一索引:unique:加速查找+约束 (唯一)
3.联合索引-primary key(id,name):联合主键索引-unique(id,name):联合唯一索引-index(id,name):联合普通索引
4.全文索引fulltext :用于搜索很长一篇文章的时候,效果最好。
5.空间索引spatial :了解就好,几乎不用

 本章作为简单的了解所以我这只讲个普通索引,后面再mysql8版本文章会详细讲到

创建索引的案例

    create table tro(id int ,#可以在这加primary key#id int index #不可以这样加索引,因为index只是索引,没有约束一说,#不能像主键,还有唯一约束一样,在定义字段的时候加索引name char(20),age int,email varchar(30),#primary key(id) #也可以在这加index(id) #可以这样加);alter table tro add unique index (`age`);添加唯一索引alter table tro add primary key(id); #添加住建索引,也就是给id字段增加一个主键约束create index dgf on tro(id,name); #添加普通联合索引

查看这个表创建的索引 

show index from tro\G;

删除索引

drop index dgf  on tro;  #删除普通联合索引
drop index name on tro; #删除普通索引
drop index age on tro; #删除唯一索引,就和普通索引一样,不用在index前加unique来删,直接就可以删了
alter table tro drop primary key; #删除主键(因为它添加的时候是按照alter来增加的,那么我们也用alter来删)

索引案例

准备一个表,先把刚刚创建的tro表先删除一下,下面我要创建一个名字为tro但是结构是别的样子的表

create table tro(
id int,
name varchar(20),
gender char(6),
email varchar(50)
);

 我创建完了这个表,我要去添加海量的数据,但是我不可能去一个一个手写,所以我要使用储存过程来写入海量数据,储存过程你可以理解为自定义函数

delimiter $$ #声明存储过程的结束符号为$$,默认为;
create procedure auto_insert1()
BEGINdeclare i int default 1;    #类似于shell脚本中的i=1while(i<300000)
doinsert into tro values(i,concat('egon',i),'male',concat('egon',i,'@dgf'));set i=i+1;end while;
END$$ #$$结束
delimiter ; #重新声明分号为结束符号

我这写入了30万个数据,如果你的设备性能好,可以把他改为300万,这样才能看出来效果,其实30万就够

再去查看一下刚刚写的储存过程

show create procedure auto_insert1\G 

核对表名没问题以后直接就运行起来

call auto_insert1();

然后耐心等待

在等待期间你可以去删除储存过程,使用完了你可以讲这个删除或者是保留(你可以再连接一个终端,然后再进去mysql继续操作)

 drop procedure auto_insert1;

 然后耐心等待,直至数据插入结束

现在看一下数据

select * from tro;

发现有299999条数据这样就可以了

现在没有做任何的索引,我去查一个指定的数据

select * from tro where id = 66666;

虽然也很快,但是看好这个数值,现在我去加个索引

create index idx on tro(id);

加完索引再去查询数据

直接就0.00速度直接快了很多

这样就创建索引成功了

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

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

相关文章

element-ui使用记录

element-ui的组件名就是类名 样式穿透&#xff08;用来修改没有类名的子组件样式&#xff09; 例如修改头部具名插槽的样式&#xff08;但是无法定位该元素&#xff09; 查看最后生成的html结构中对应的结构&#xff08;这里的头部有类名&#xff0c;可以直接对该类名进行样…

C语言—每日选择题—Day69

第一题 1、以下程序的输出结果是&#xff08; &#xff09; int main() {char arr[2][4];strcpy (arr[0],"you");strcpy (arr[1],"me");arr[0][3]&;printf("%s \n",arr);return 0; } A: you&me B: you C: me D: err 答案及解析 A 这里重…

FFmpeg: 简易ijkplayer播放器实现--03UI界面设计

文章目录 UI设计流程图UI设计界面点击播放功能实现 UI设计流程图 UI设计界面 主界面 控制条 播放列表 画面显示 标题栏 设置界面 提示框 点击播放功能实现 槽函数实现&#xff1a; connect(ui->ctrlBarWind, &CtrlBar::SigPlayOrPause, this, &Main…

zookeeper解析

目录 zookeeper定义 zookeeper定义 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目 Zookeeper工作机制 zookeeper从设计模式角度来理解&#xff1a; 是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理大家都关心…

DS18B20与单片机的通信、DS18B20采集温度、MODBUS协议、练习框架

我要成为嵌入式高手之4月9日51单片机第四天&#xff01;&#xff01; ———————————————————————————— DS18B20温度传感器 单总线数字温度计 异步的半双工的串行通信 测量范围从-55℃ ~ 125℃&#xff0c;增量值为0.5℃ 要用DS18B20采集温度&am…

Ingress配置优化和追踪

介绍 在传统的业务系统中&#xff0c;应用微服务化后&#xff0c;需要一个统一的入口来将各个服务进行整合&#xff0c;这个入口可以是Nginx、Apache、HAproxy等等。而在K8s中&#xff0c;同样需要一个工具来将应用的各个service整合到统一的入口&#xff0c;这个工具就叫Ingr…

ArcGIS Pro中的3D建模

在本文中,我讲述了我最近一直在探索的在 ArcGIS Pro 中设计 3D 模型的过程。 我的目标是尽可能避免与其他软件交互(即使是专门用于 3D 建模的软件),并利用 Pro 可以提供的可能性。 这个短暂的旅程分为三个不同的阶段:准备、组装和照明。 我们必须使用一些布局可能性以及一…

flask后端+网页前端:基于 socket.io 的双向通信和服务器部署

我想实现的效果是&#xff0c;我的服务器提供两个路由网址&#xff0c;网页A用于拍照、然后录音&#xff0c;把照片和录音传给服务器&#xff0c;服务器发射信号&#xff0c;通知另一个路由的网页B更新&#xff0c;把刚刚传来的照片和录音显示在网页上。 然后网页B用户根据这个…

前端开发中地图定位与距离计算的应用实践

前端开发中地图定位与距离计算的应用实践 在前端开发中&#xff0c;地图功能的应用日益广泛&#xff0c;无论是用户位置的定位、目标距离的计算&#xff0c;还是地址的解析与展示&#xff0c;地图都发挥着不可替代的作用。本文将重点介绍前端开发中实现地图定位、距离计算以及…

MySQL前缀索引(3/16)

前缀索引 前缀索引&#xff1a;MySQL支持前缀索引&#xff0c;允许定义字符串的一部分作为索引。如果不指定前缀长度&#xff0c;索引将包含整个字符串。前缀索引可以节省空间&#xff0c;但可能会增加查询时的记录扫描次数&#xff08;因为会查询到多个前缀相同的数据&#x…

Python(9):一文学懂进程,线程和协程

文章目录 一、进程1.创建多进程2.查看进程id3.进程池4.进程间的互相通信 二、线程1.threading线程模块2.创建多线程3.互斥锁4.死锁5.线程间的互相通信 三、协程1.认识协程2.gevent模块在爬虫中的应用 四、多线程、多进程、协程的区别 分类定义程序一个应用可以当做一个程序&…

局域网共享文件夹怎么加密?局域网共享文件夹加密方法介绍

在企业局域网中&#xff0c;共享文件夹扮演着重要的角色。为了保护数据安全&#xff0c;我们需要加密保护局域网共享文件夹。那么&#xff0c;局域网共享文件夹怎么加密&#xff1f;下面我们来了解一下吧。 局域网共享文件夹加密方法 局域网共享文件夹加密推荐使用共享文件夹加…

【计算机考研】择校!北邮VS北航,哪所毕业以后就业好?

北邮计算机专业的就业优势相较于北航可能源于多方面的因素。 北邮在计算机和通信领域的实力备受肯定&#xff0c;被誉为"信息黄埔"&#xff0c;这一声誉在一定程度上增强了北邮计算机专业毕业生的竞争力。 北邮的整体学校氛围和教育体系更加注重信息技术的发展和应…

vue表格操作列,按钮太多显示... 点击后悬浮显示全部按钮

效果: 分析原理: 一共就三步,仔细看看很简单,位置要加对,代码结构下边有demo 代码结构demo: <el-table-columnlabel"操作"align"center"fixed"right"show-overflow-tooltip><template slot-scope"scope"><el-buttonsi…

STM32电机控制固件架构

目录 一、应用程序剖析 二、面向现场的控制实现体系结构 1、参考计算循环 2、电流调节环路 3、安全回路 一、应用程序剖析 上图显示了由ST MC SDK构建的电机控制应用程序。首先&#xff0c;这样的应用程序是由电机控制工作台生成的软件项目&#xff0c;这要归功于STM32Cube…

01 SQL基础 -- 初识数据库与安装

一、初识数据库 数据库是将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。该数据集合称为数据库(Database, DB)。用来管理数据库的计算机系统称为数据库管理系统(Database Management System, DBMS) 1.1 DBMS 的种类 DBMS 主要通过数据的保存格式…

【MySQL】数据库开篇

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8;友情提供 目录 本系列传送门 1. 什么是数据库&#xff1f; 2. 为什么使用数据库 3. 数据库的分类 4. NoSQL 与关系…

android android.permission.MANAGE_EXTERNAL_STORAGE使用

android11 及以上版本&#xff0c;如果release版本要读取外部存储公共目录&#xff0c;即sdcard公共目录&#xff0c;需要在androidManifest.xml下申明 <uses-permission android:name"android.permission.MANAGE_EXTERNAL_STORAGE" /> 如果要发版到海外&…

【UE Niagara】光束发射模块学习

效果 步骤 1. 新建一个Niagara发射器&#xff0c;使用Empty模板&#xff0c;这里命名为“NE_Beam” 打开“NE_Beam”&#xff0c;添加条带渲染器 添加“Spawn Burst Instantaneous”模块&#xff0c;设置生成数量为100 添加一个“Beam Emitter Setup”模块 再添加一个“Spawn …

Linux C应用编程:MQTT物联网

1 MQTT通信协议 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传 输&#xff09;是一种基于客户端-服务端架构的消息传输协议&#xff0c;如今&#xff0c;MQTT 成为了最受欢迎的物联网协议&#xff0c;已广泛应用于车联网、智能家居、即时聊…