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()
BEGIN
    declare i int default 1;    #类似于shell脚本中的i=1
    while(i<300000)
do
        insert 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速度直接快了很多

这样就创建索引成功了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于GSP工具箱的NILM算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于GSP工具箱的NILM算法matlab仿真。GSP是图形信号处理的缩写&#xff0c;GSP非常适合对未知数据进行分类&#xff0c;尤其是当训练数据非常短时。GSPBox的基本理论是谱图论和…

搜维尔科技:【煤矿安全仿真】煤矿事故预防处置VR系统,矿山顶板灾害,冲击地压灾害等预防演练!

产品概述 煤矿事故预防处置VR系统 系统内容&#xff1a; 事故预防处置VR系统的内容包括&#xff1a;火灾的预防措施、火灾预兆、防灭火系统、火灾案例重现、顶板事故预兆、顶板事故原因、顶板事故案例重现、瓦斯概念及性质、瓦斯的涌出形式、瓦斯预兆、瓦斯爆炸条件及预防措…

GPT中的Transformer架构以及Transformer 中的注意力机制

目录 1 GPT中的Transformer架构 2 transformer中的注意力机制 参考文献&#xff1a; 看了两个比较好的视频&#xff0c;简单做了下笔记。 1 GPT中的Transformer架构 GPT是Generative Pre-trained Transformer单词的缩写&#xff0c;其中transformer是一种特定的神经网络&a…

Harmony鸿蒙南向驱动开发-PIN接口使用

功能简介 PIN即管脚控制器&#xff0c;用于统一管理各SoC的管脚资源&#xff0c;对外提供管脚复用功能&#xff1a;包括管脚推拉方式、管脚推拉强度以及管脚功能。 PIN接口定义了操作PIN管脚的通用方法集合&#xff0c;包括&#xff1a; 获取/释放管脚描述句柄&#xff1a;传…

MATLAB GUI图形化界面设计计算器

MATLAB GUI界面设计教程可以帮助用户创建交互式的图形用户界面&#xff0c;以简化与MATLAB程序的交互过程。以下是一个简化的教程&#xff0c;指导你如何进行MATLAB GUI界面设计&#xff1a; 1. 启动GUIDE或App Designer GUIDE&#xff1a;在MATLAB命令窗口中输入guide命令&a…

微服务demo(四)nacosfeigngateway(2)gatewayspringsercurity

一、思路 1、整体思路 用户通过客户端访问项目时&#xff0c;前端项目会部署在nginx上&#xff0c;加载静态文件时直接从nginx上返回即可。当用户在客户端操作时&#xff0c;需要调用后端的一些服务接口。这些接口会通过Gateway网关&#xff0c;网关进行一定的处理&#xff0…

4.12学习总结·(MySQL学习总结)

1.MySQL对数据库的操作 1.展示所有数据库 show databases; 这种就是将我navicat上的所有数据库调用出来&#xff1b; 2.创建数据库 create database 数据库名; 很明显&#xff0c;我多创建了一个Teacher 的数据库 3.使用某个数据库 use 数据库名 use test1; 切换到test…

WEB漏洞-文件上传之WAF绕过及安全修复

#上传参数解析&#xff1a; Content-disposition&#xff1a;一般不可更改 Name&#xff1a;表单参数值&#xff0c;不能更改&#xff08;更改需要达到统一&#xff09; Filename&#xff1a;文件名&#xff0c;可以更改 Content-type&#xff1a;文件MIME&#xff0c;视情…

Linux 函数学习 poll

1、Linux poll 函数 int poll(struct pollfd *fds, nfds_t nfds, int timeout); fds&#xff1a; 需要轮询的fd集合 nfds&#xff1a;需要轮询的fds数量 timeout&#xff1a;超时时间 返回值&#xff1a;0 超时&#xff0c;<0 发生异常&#xff0c;> 0 存在数据变化 …

Unity单个物体绑定多个相机在轨道上移动,录制不同角度视频

环境搭建 下载Cinemachine插件安装 打开包管理器 下载cinemachine插件 创建轨道 使用dolly track 创建轨道 右侧可以删减关键点&#xff0c;注意调整y坐标 创建cart 把前面的轨道拖到path中&#xff0c;注意这里的speed要设定不为0才会动 设置VItual Camera 根据需…

分布式锁-redission可重入锁原理

5.3 分布式锁-redission可重入锁原理 在Lock锁中&#xff0c;他是借助于底层的一个voaltile的一个state变量来记录重入的状态的&#xff0c;比如当前没有人持有这把锁&#xff0c;那么state0&#xff0c;假如有人持有这把锁&#xff0c;那么state1&#xff0c;如果持有这把锁的…

ubuntu 20.04 更新显卡驱动

1. 问题描述 $ watch -n 1 nvidia-smi画面不动 而且运行 pytorch 代码时出现问题&#xff1a; UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 11070). Please update your GPU driver by downloading and installing a new…

《web应用技术》第三次课后练习

实验目的&#xff1a; 1、springboot入门程序撰写并启动 2、使用postman练习参数的获取。 参考&#xff1a;Day04-10. Web入门-SpringBootWeb-快速入门_哔哩哔哩_bilibili

基于Springboot的网上商品订单转手系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的网上商品订单转手系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

基于级联H桥的多电平逆变器PWM控制策略的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 级联H桥&#xff08;CHB&#xff09;多电平逆变器是一种通过多个H桥单元级联实现更高电压等级和更高质量输出波形的电力电子转换装置。这种逆变器在高压大功率场合应用广泛&am…

开源模型应用落地-chatglm3-6b-zero/one/few-shot-入门篇(五)

一、前言 Zero-Shot、One-Shot和Few-Shot是机器学习领域中重要的概念&#xff0c;特别是在自然语言处理和计算机视觉领域。通过Zero-Shot、One-Shot和Few-Shot学习&#xff0c;模型可以更好地处理未知的情况和新任务&#xff0c;减少对大量标注数据的依赖&#xff0c;提高模型的…

Mac M2安装 Windows

由于需要在 Windows 上使用一些软件&#xff0c;今天在 Mac M2 上安装了 Windows 11。以前在 X86 Mac 上安装很容易&#xff0c;都是 X86 架构随便找个镜像安装上就可以用了。到了 M1/M2 Arm 架构就会麻烦一些&#xff0c;先在网上找到 Windows 10 Arm 架构的安装镜像&#xff…

3. WPF应用程序启动时StartUp事件和重写OnStartup方法有什么不同

文章目录 一. 目标二. 技能介绍① OnStartup方法介绍② Startup事件介绍 三. 结论① 不同点1: 设计意图② 不同点2: 执行时机 一. 目标 搞明白WPF应用中OnStartup() 方法的作用和用法搞明白WPF应用中StartUp事件的作用和用法搞明白为什么同时需要这两个功能?它们设计上有所重叠…

程序猿之路

我接触计算机算对自己来说是比较晚的了&#xff0c;上初中的时候就有微机课&#xff0c;但是在那个小县城&#xff0c;上课也只是3个人共用一个电脑&#xff0c;我初中整个过程只会开关机&#xff0c;哈哈&#xff0c;虽然学过word&#xff0c;但是无奈&#xff0c;我插不上手呀…

vue中预览docx、xlsx、pptx、pdf

前言&#xff1a;其实本来是要做全类型文件预览的&#xff0c;但是一直找不到合适的doc,xlx,ppt预览插件。要是有可以使用的&#xff0c;可以评论推荐给我 我使用的node版本&#xff1a;v18.19.1 参考官网&#xff1a;preview 文件预览 | ran 引入方式&#xff1a; //安装组…