MySQL数据库学习教程,mysql运用需要注意的问题汇总

MYSQL-创建数据库 CREATE DATABASE (十一) MYSQL创建数据库语法 CREATE DATABASE 阅读详情

昨天有个朋友私信问我关于 MySQL 在实际企业中的运用以及要注意哪些问题,今天我来输出一下。

MySQL数据库下载安装视频看这个!!!

mysql这个视频是动力节点杜老师讲解的,其中详细讲了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如何安装MySQL及MySQL新特性,通过观看视频就可掌握MySQL全套知识。

mysql视频点这里!!!「链接」

表结构设计

1、主键

在实际项目中,主键id推荐使用数据库自增ID(类型为bigint)和雪花算法生成的随机ID。

业务量小,采用自增ID;业务量大,推荐采用雪花算法。

使用自增id的缺点:

1、自增id如果暴露,容易被人发现规律

2、对于高并发的情况下,innodb引擎在按主键进行插入的时候会造成明显的锁争用,主键的上界会成为争抢的热点。

3、单表数据量达到一定程度后要分库分表,导致ID重复,解决起来比较麻烦

2、外键

不要使用外键与其它表进行关联,避免高并发场景的性能问题

1、外键是极影响并发性能的,因为当存在外键约束的时候,MySQL会进行即时检查,每次insert和update都要要去扫描此记录是否满足

2、耦合度高,后期很难进行分库分表

3、合适的字段类型和长度

数据库的资源是很宝贵的,合适的字段类型和长度,不但节约数据库表空间和节约索引存储空间,更重要的是提升检索速度

1、对于固定长度的坚决使用char/tiyint等类型

2、对于不固定长度但是确定了总长度的使用varchar类型

3、不要用varchar/char 存储长字符串,直接用text。并且让长字符串拆分到另一个表,保持主表尽量瘦小

4、字段冗余

允许适当冗余其他表的字段,以提高查询性能,但必须考虑数据一致而且不要冗余过长的字段

5、字段默认值

避免将字段默认值设为null

对MySQL来说,会使得索引、索引统计和值的比较都更加复杂 NULL会参与字段比较,所以对效率有一部分影响,比如!=, <>等

索引设计

1、覆盖索引

对于count和group场景,请使用覆盖索引,提高查询性能。

索引就像是一本书的目录,如果查询的内容都只和目录上的内容有关,那mysql只要扫描索引结构就能得到查询结果,比如我给student表增加了个索引:

ALTER TABLE `student` ADD INDEX index_name (name,gender);

用到索引覆盖的sql语句:

select name,gender from student;
select name,gender from student where name='川普' and gender=1;
select name,gender from student group by name,gender;
select name,gender,count(1) from student group by name,gender;
select name from student group by name;
select name ,count(1) from student group by name;

2、复合索引

设计索引的时候尽量使用复合索引,并将区分度高的字段放在前面

那么什么是区分度高的字段呢?

执行如下语句,假设查询结果为 0.9,0.1,1000,可以看到name列的选择性最高,因此将其作为联合索引的第一列,即建立(name, gender)的联合索引

select count(distinct name) / count(*), count(distinct gender) / count(*), count(*) from student

根据索引最左匹配原则,能够触发这个联合索引的sql语句是:

select name,gender from student where name="川普" and gender=1
select name,gender from student where gender=1 and name="川普" ;
select name,gender from student where name="川普";
select name,gender from student where age=18 name='川普';

3、索引失效

以下几个操作会引起索引失效:

1.在索引列上做计算、函数、转换类型等操作

2.违反最左匹配原则

3.like以通配符开头(例如:'%川普')

4.防止隐式转换,比如:索引的字段为字符串类型,查询的时候不加单引号( name为vachar类型,查询的时候 where name = 1)

5.or连接,等等..

4、唯一索引

对于需要保证表中唯一的字段,即使在应用层做了校验,也必须建立唯一索引

注意:在性能上,唯一索引在查询时的性能要比非聚集索引高,但是在插入与更新时要比非聚集索引低

5、长字符索引

在长度较长的字段上建立索引时,必须指定索引长度,没必要对全字段建立索引

索引的长度与区分度是一对矛盾体,一般对于字符串类型的字段,设置索引的长度为 20,区分度会高达 90%以上,可以使用以下sql来确定区分度:

select count(distinct left(列名,索引长度)) / count(*) from 表名

语句设计

1、逻辑删除

大多时候,删除操作应该采用逻辑删除,不能物理删除。我们必须承认数据是无价之宝,在很多时候,数据的价值是远远高于人工成本的。

正式环境的数据库账号往往是没有delete权限的,避免误操作,删库跑路等等

并且update操作比delete性能高

2、in的使用

虽然in的数量 MySQL 并没有做具体的限制,但对整个 SQL 语句的长度做了限制。不要进行 in 大量数据集合的操作,若实在无法避免,可以分批次查询,一次in 一定数量集。

3、inner join的使用

当我们使用关联查询的时候,用小表驱动大表的方式效率会提升很多。而 inner join 会自动地进行小表驱动大表的优化

4、触发器和存储过程

避免使用触发器和存储过程,难以调试和扩展不说,更是没有可移植性,这些边缘功能最好不用。

5、count

mysql5.7对count(*) 进行了优化

所以现在 count( *)和count(1)的执行效率是一样的。

而count(字段)因为有sql解析的过程,不仅效率会慢,而且不会对null值进行统计

6、避免大事务

大事务就是运行的时间比较长,操作的数据比较多的事务 大事务会影响数据库的性能,应当尽量把大事务拆成若干个小事务,禁止写过于复杂的sql语句,除了造成大事务不说,还会让别人头大,无法维护。

目前能想到的就是这,欢迎补充~

MySQL数据库重命名方法汇总 在MySQL中,直接使用来重命名数据库存在问题,该语句仅在少数版本中存在,且会产生不良影响,总体而言不是一个好的选择。尤其是对于使用InnoDB存储引擎的数据库,其存储方式与MyISAM不同,需要更合适的重命名方法。 阅读详情

相关推荐

MySQL创建数据库(CREATE DATABASE语句)

数据库可以看作是一个专门存储数据对象的容器,这里的数据对象包括表、视图、触发器、存储过程等,其中表是最基本的数据对象。在 MySQL 数据库中创建数据对象之前,先要创建好数据库。 在 MySQL 中,可以使用CREATE DATABASE语句创建数据库,语法格式如下: CREATE DATABASE [IF NOT EXISTS] <数据库名> [[DEFAULT] CH...

MYSQL安装教程 1096

我的 MySQL开发实践经验

表结构设计 1.主键 在实际项目中,主键id推荐使用数据库自增ID(类型为bigint)和雪花算法生成的随机ID。 业务量小,采用自增ID;业务量大,推荐采用雪花算法。 使用自增id的缺点: 1、自增id如果暴露,容易被人发现规律 2、对于高并发的情况下,innodb引擎在按主键进行插入的时候会造成明显的锁争用,主键的上界会成为争抢的热点。 3、单表数据量达到一定程度后要分库分表,导致ID重复,解决起来比较麻烦 2.外键 不要使用外键与其它表进行关联,避免高并发场景的性能问题 1、外键是极影响并发性能的,因

会飞的架狗师的博客 428

优秀数据库工程师之路—MySQL数据库经验及技巧大汇总

优秀数据库工程师之路—MySQL数据库经验及技巧大汇总,这个你真的还一定要看!

数据库项目经验分享

 一、数据库的设计   当然首先要懂得数据库的基本理论。在设计E-R模型之前,首先要进行深入的需求分析,需求了解的越透彻,数据模型才能越稳定。   在E-R模型向关系模型转换时,既要深入理解规范化理论与转换原则,也要知道,并不是范式越高越好,为了加快查询速度可以适度加入冗余。非BCNF范式的关系虽然理论上可能会发生更新异常与冗余,但如果实际中该关系并不进行更新或更新的频度很小,其造成的...

serisboy的专栏 1333

Windows 11下ROS2 Humble与PyCharm无缝集成实战(避坑指南+完整配置流程)

本文详细介绍了在Windows 11系统下如何实现ROS2 Humble与PyCharm的无缝集成,包括环境准备、ROS2 Humble安装、PyCharm配置以及C++与Qt5混合开发的实战技巧。通过避坑指南和完整配置流程,帮助开发者高效搭建稳定的机器人开发环境,特别适合Windows平台的ROS2开发者。

weixin_28710999的博客 366

DataGridView 右键菜单复制(公共)

dataGridView1.CellMouseClick += new DataGridViewCellMouseEventHandler( (sender1, e1) => { if (e1.Button == MouseButtons.Right) {

沁心渃水 2829

数据库设计——Mysql项目实践

敏捷开发过程中,迭代需求人员每交付一次原型图、需求规格说明时,都需要有专门人员进行后续的数据库设计与开发工作。数据库的设计质量将直接影响到系统的整体性能,为此数据库设计人员应遵守数据库设计原则,保证所设计数据库保证系统功能需求的同时,提高系统部分性能。下面,让我们理论与实践相结合,习得数据库设计的原则后,笔者将通过对一个项目——培训机构管理系统进行Mysql数据库设计实践,希望能够给有需要的小伙伴一些帮助。

weixin_61870990的博客 3848

安川机器人SOCKET 通讯

命令 功能 参数 示例 返回 SelectJob 选择程序 JobName LineNo SelectJob TEST 0 #SelectJob,Ok StartJob 启动程序 JobName StartJob TEST #StartJob,Ok Pause 暂停当前程序 - Pause #Pause,Ok Continue 继续当前程序 - Continue #Continue,Ok ServoOn 伺服上电 - ServoOn #ServoOn,Ok ServoOf...

记录学习内容 8285

Mysql数据库经验总结

MySQL数据库开发规范及SQL语句语法与SQL优化,联合索引的使用方式与python连接操作数据库

liuzhiqiang66的博客 1301

时空双重机器学习在环境政策评估中的创新应用

因果推断是数据分析中的核心问题,特别是在环境政策评估领域。传统方法如差异分析法(DID)在处理时空维度上的复杂相关性时存在局限。机器学习技术,特别是双重机器学习(DML),通过分阶段建模有效解决了混杂变量问题。结合贝叶斯加性回归树(BART)的灵活建模能力,可以更准确地捕捉空间和时间模式。这种时空双重机器学习(ST-DML)方法在柬埔寨森林砍伐案例中表现出色,通过Wendland基函数有效处理了空间自相关问题。该技术框架不仅适用于环境政策评估,还可扩展至空气质量、水资源管理等其他领域,为政策制定提供更精准的

weixin_28685045的博客 344

KiCad 7.0 + 嘉立创打样:从原理图到实物,打造你的双LLCC68 LoRa串口透传板

本文详细介绍了使用KiCad 7.0设计双LLCC68 LoRa串口透传板的完整流程,从原理图设计到嘉立创打样。重点解析了AVR+LLCC68组合的优势、双模块布局的电磁兼容设计、SPI接口配置及射频走线技巧,并提供了实测数据和常见问题解决方案,帮助开发者高效实现物联网设备的低功耗远距离通信。

weixin_28693447的博客 257

【一】MySQL-实践总结-开端

我写文章喜欢总结自己的经验,it行业是一种实践性很强的行业,技术不经过实践始终是纸上谈兵。技术现在有两个分水岭:传统行业和互联网行业,这两个行业使用的技术区别很大,我在传统行业也待的挺久的,这里我总结一下我在传统行业工作中MySQL实践经验。 传统行业的特点就是系统可用性和高并发要求不高,代码大部分都是CRUD,这样一来数据库方面关注就比较少了,很少会有数据库优化方面的思考,因为系统并发不高,很多问题都很难暴露出来,这也就是很多人不愿意在传统行业发展的原因,但是传统行业比互联...

作者:大头兵(kit) 331

国产麒麟系统下Kettle安装避坑指南:解决aarch64架构不兼容问题

本文针对在国产麒麟系统上安装Kettle时遇到的aarch64架构不兼容问题,提供了详细的解决方案。通过剖析错误根源,指导用户获取并放置正确的SWT库文件,并修改启动脚本,成功解决“平台不支持”的报错,确保ETL工具在ARM架构的国产化环境中顺利运行。

weixin_29214691的博客 276

MySQL删除数据库(DROP DATABASE语句)

当数据库不再使用时应该将其删除,以确保数据库存储空间中存放的是有效数据。删除数据库是将已经存在的数据库从磁盘空间上清除,清除之后,数据库中的所有数据也将一同被删除。

unber的博客 9509

EEGLAB数据预处理基本流程GUI实操指南

按钮,会出现如上图所示的长条形对话框,方框里面是所有电极的名称,这时将需要的剔除的电极选择上,如上图,我选择了 VEOG这个电极(该电极表示是垂直眼电),然后点“OK”,在弹出的对话框中自行确定是否需要修改命名。坏导是指在数据采集时,由于各种原因(如,电极本身问题或阻抗不好等)导致数据记录有问题,但是在后期又特别想要该通道的数据,那么就可以利用插值的方法进行——利用该导联周边的几个电极点的均值作为该导的数据。上图的图是通过IClabel的工具箱进行自动判断的,可以帮助自动识别出哪些是Eye的成分。

fdgdf5535的博客 6393

数据结构课程设计--基于知识图谱的中医食疗数据管理与应用

【代码】数据结构课程设计--基于知识图谱的中医食疗数据管理与应用。

M_inherit的博客 565

详细!PyCharm连接MySQL数据库教程+心得

第一步:安装MySQL 下载地址:https://dev.mysql.com/downloads/mysql/ 下载完后,我们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 C:\web\mysql-8.0.11 下。 接下来我们需要配置下 MySQL 的配置文件 打开刚刚解压的文件夹 C:\web\mysql-8.0.11 ,在该文件夹下创建 my.ini 配置文件,编辑 my....

springhammer的博客 2万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

mysql 新建database_MySQL创建数据库(CREATE DATABASE语句)

在MySQL 中,可以使用CREATE DATABASE 语句创建数据库,语法格式如下:CREATE DATABASE [IF NOT EXISTS] [[DEFAULT] CHARACTER SET ][[DEFAULT] COLLATE ];[ ]中的内容是可选的。语法说明如下::创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文...

weixin_30441727的博客 7047

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

mysql创建database_MySQL Create Database 创建数据库

创建数据库CREATE DATABASE 语法用于创建一个数据库。语法:CREATE DATABASE db_namePHP MySQL 函数库中,mysql_query() 函数用于向 MySQL 发送并执行 SQL 语句。关于 mysql_query() 函数更详细信息请参看《MySQL mysql_query》。创建一个名为 testdb 的数据库:$conn = @mysql_connec...

weixin_30921373的博客 4921

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

在 MySQL 中使用 Drop Database

在 MySQL 中使用命令可以有效地删除不再需要的数据库及其所有内容。了解命令的基本语法、使用方法和注意事项可以帮助确保操作的正确性和数据的安全。在执行删除操作之前,务必进行数据备份、检查活动连接,并确保具备足够的权限。本文详细介绍了命令的使用方法和实际应用场景,希望能帮助您在 MySQL 中有效管理数据库。

网络技术联盟站 2855

java mysql删除数据库语句_MySQL删除数据库(DROP DATABASE语句)

当数据库不再使用时应该将其删除,以确保数据库存储空间中存放的是有效数据。删除数据库是将已经存在的数据库从磁盘空间上清除,清除之后,数据库中的所有数据也将一同被删除。在 MySQL 中,当需要删除已创建的数据库时,可以使用 DROP DATABASE 语句。其语法格式为:DROP DATABASE [ IF EXISTS ] 语法说明如下::指定要删除的数据库名。IF EXISTS:用于防止当数据库...

weixin_34897842的博客 1117

MySQL之删除数据库(DROP DATABASE语句)

语法 当要删除已有的数据库时,可以使用DROP DATABASE语句,语法格式为: DROP DATABASE [IF EXISTS]<数据库名> <数据库名>:指定要删除的数据库名 IF EXISTS :用于防止当数据库不存在时发生错误 DROP DATABASE :删除数据库中所有表格并同时删除数据库,要使用DROP DATABASE,需要获得数据库DROP权限。 ...

qq_38523616的博客 2393
上一篇: Spring框架学习教程,详解Spring注入bean的几种方式
下一篇: Java开发必会的Linux命令大全
Java___interview
博客等级 码龄6年 154粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值