MySQL
介绍、实操、进阶MySQL数据库,含有大量丰富的案例说明。
lu-yanting
深耕数据分析,关注MySQL分析、性能优化。热爱数据分析的小姐姐~
展开
-
经验分享——持续更新中
1、FUNCTION df_school.sum does not exist. Check the ‘Function Name Parsing and Resolution’ section in the Reference Manual解决方案:sum() count() avg()这些函数英文和()要挨着写,不能有空格,否则报错。原创 2020-11-05 11:17:32 · 227 阅读 · 1 评论 -
数据类型(列类型)--数值类型、时间日期型、字符串型
所谓的数据类型:对数据进行统一的分类,从系统的角度出发为了能够用统一的方式进行管理,更好地利用有限的空间SQL将数据类型分为三类:数值类型,字符串类型和时间日期类型数值型数值型数据:都是数值系统将数值型分为整数型和小数型整数型存放整型数据:在SQL中因为要考虑如何节省磁盘空间,所以系统将整型又细分成5类:Tinyint:迷你整型,使用一个字节存储,表示的状态最多为256种(常用)Smallin:小整型,使用2个字节存储,表示的状态最多为65536种Mediumint:中整原创 2020-10-24 22:43:49 · 6292 阅读 · 0 评论 -
SQL经典50题(MySQL版)
已知有以下4张表:学生表:student(s_id,s_name,s_birth,s_sex) – –学号,学生姓名,出生年月,性别成绩表:score(s_id,c_id,score) – –学号,课程号,成绩课程表:course(c_id,c_name,t_id) – –课程号,课程名称,教师号教师表:teacher(t_id,t_name) – –教师号,教师姓名一、创建数据库和表创建school数据库创建四张表往表里插值创建好的4张表如下:1.查询"01"原创 2020-10-24 22:15:36 · 5697 阅读 · 8 评论 -
改善性能
改善性能以下是性能调优的一些探讨与分析:一般来说,关键的生产DBMS应该运行在自己的专用服务器上。MySQL是用一系列的默认设置预先配置的,从这些设置开始通常是很好的。但过一段时间后你可能需要调整内存分配、缓冲区大小等。(为查看当前设置,可使用show variables; 和show status;。)MySQL一个多用户多线程的DBMS,换言之,它经常同时执行多个任务。如果这些任务中的某一个执行缓慢,则所有请求都会执行缓慢。如果你遇到显著的性能不良,可使用show processlist显示所原创 2020-10-13 11:36:15 · 355 阅读 · 3 评论 -
数据库维护
1. 备份数据由于MySQL数据库是基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据。但是,由于这些文件总是处于打开和使用状态,普通的文件副本备份不一定总是有效。以下是这个问题的可能解决方案:使用命令行实用程序mysqldump转储所有数据库内容到某个外部文件。在进行常规备份前这个实用程序应该正常运行,以便能正确地备份转储文件。可用命令行实用程序mysqlhotcopy从一个数据库复制所有数据(并非所有数据库引擎都支持这个实用程序)。可以使用MySQL的backup table或se原创 2020-10-13 11:09:14 · 3151 阅读 · 4 评论 -
安全管理——访问控制&用户管理
1. 访问控制访问控制:给用户提供他们所需的访问权,且仅提供他们所需的访问权。管理访问控制需要创建和管理用户账号。MySQL创建一个名为root的用户账号,它对整个MySQL服务器具有完全的控制。应该严肃对待root登录的使用。仅在绝对需要时使用它(或许在你不能登录其他管理账号时使用)。不应该在日常的MySQL操作中使用root。2. 管理用户MySQL用户账号和信息存储在名为mysql的MySQL数据库中。一般不需要直接访问mysql数据库和表,但有时需要直接访问。需要直接访问它的时机之一是在需原创 2020-10-13 10:21:05 · 2601 阅读 · 6 评论 -
全球化和本地化——字符集和校对
1. 字符集和校对顺序数据库表被用来存储和检索数据。不同的语言和字符集需要以不同的方式存储和检索。因此,MySQL需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法。在讨论多种语言和字符集时,将会遇到以下重要术语:字符集为字母和符号的集合;编码为某个字符集成员的内部表示;校对为规定字符如何比较的指令。2. 使用字符集和校对顺序MySQL支持众多的字符集。为查看所支持的字符集完整列表,使用以下语句:show character set;这条语句显示所有可用的字符集以原创 2020-10-10 11:03:08 · 205 阅读 · 6 评论 -
管理事务处理——rollback、commit
1. 事务处理事务处理可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行(除非明确指示)。如果没有错误发生,整组语句提交给(写到)数据库表。如果发生错误,则进行回退(撤销)以恢复数据库到某个已知且安全的状态。事务处理需要知道的几个术语:事务:指一组SQL语句;回退:指撤销指定SQL语句的过程原创 2020-10-10 09:51:29 · 2850 阅读 · 3 评论 -
使用触发器——insert、delete、update触发器
1. 触发器触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):delete、insert、update。其他MySQL语句不支持触发器。2.创建触发器在创建触发器时,需要给出4条信息:唯一的触发器名:在每个表中唯一,而不是在每个数据库中唯一;触发器关联的表;触发器应该响应的活动(delete、insert或update);触发器何时执行(处理之前或之后)。触发器用create trigger语句创建。MYSQL5以后,不允许原创 2020-10-07 10:38:38 · 8479 阅读 · 3 评论 -
使用游标
1. 游标有时,需要在检索出来的行中前进或后退一行或多行。这就是使用游标的原因。游标是一个存储在MySQL服务器上的数据库查询,它不是一条select语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。MySQL游标只能用于存储过程(和函数)。2. 使用游标使用游标主要步骤有:在能够使用游标前,必须声明(定义)它。这个过程实际上没有检索数据,它只是定义要使用的sele原创 2020-09-29 14:44:42 · 811 阅读 · 3 评论 -
使用存储过程——创建、执行、删除、检查
1. 存储过程存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。2. 为什么要使用存储过程通过把处理封装在容易使用的单元中,简化复杂的操作。由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果所有开发人员和应用程序都使用同一(试验和测试)存储过程,则所使用的代码都是相同的。这一点的延伸就是防止错误。需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性。简化对变动的管理。如果表名、列名或业务逻辑(或别的内原创 2020-09-27 14:49:30 · 1589 阅读 · 5 评论 -
使用视图——简化数据处理以及重新格式化基础数据或保护基础数据
1. 视图视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。理解视图的最好方法是看一个例子。前面select语句从3个表中检索数据:把整个查询包装成一个名为productcustomers的虚拟表,则可以如下轻松地检索出相同的数据:这就是视图的作用。productcustomers是一个视图,作为视图,它不包含表中应该有的任何列或数据,它包含的是一个SQL查询(与上面用以正确联结表的相同的查询)。1.1 为什么使用视图视图的常见应用有:重用SQL语句。简化复原创 2020-09-25 17:57:55 · 1043 阅读 · 2 评论 -
创建和操纵表——create&alter&drop&rename
1. 创建表表创建的方法一般有两种:1、使用具有交互式创建和管理表的工具(如第2章讨论的工具);2、表也可以直接用MySQL语句操纵。1.1 表创建基础表名紧跟在create table关键字后面。实际的表定义(所有列)括在圆括号之中。各列之间用逗号分隔。这个表由9列组成。每列的定义以列名(它在表中必须是唯一的)开始,后跟列的数据类型。表的主键可以在创建表时用primary key关键字指定。整条语句由右圆括号后的分号结束。1.2 使用NULL值允许NULL值的列也允许在插入行时不给出该列的原创 2020-09-25 15:17:35 · 946 阅读 · 2 评论 -
更新和删除数据——update和delete
1. 更新数据为了更新(修改)表中的数据,可使用update语句。可采用两种方式使用update:1、 更新表中特定行;2、 更新表中所有行。基本的update语句由3部分组成,分别是:要更新的表;列名和它们的新值;确定要更新行的过滤条件。...原创 2020-09-24 16:24:48 · 6219 阅读 · 2 评论 -
插入数据——insert
1.数据插入insert是用来插入(或添加)行到数据库表的。插入可以用几种方式使用:插入完整的行;插入行的一部分;插入多行;插入某些查询的结果。2. 插入完整的行以上这种语法很简单,但并不安全,应该尽量避免使用。上面的SQL语句高度依赖于表中列的定义次序,并且还依赖于其次序容易获得的信息。即使可得到这种次序信息,也不能保证下一次表结构变动后各个列保持完全相同的次序。因此,编写依赖于特定列次序的SQL语句是很不安全的。编写insert语句的更安全(不过更烦琐)的方法如下:因为提供了原创 2020-09-24 14:58:07 · 19310 阅读 · 2 评论 -
全文本搜索——match() against()&全文本布尔操作符
1. 全文本搜索两个最常使用的引擎为MyISAM和InnoDB,前者支持全文本搜索,而后者不支持。通配符和正则表达式存在一些重要的限制:性能——通配符和正则表达式匹配通常要求MySQL尝试匹配表中所有行(而且这些搜索极少使用表索引)。因此,由于被搜索行数不断增加,这些搜索可能非常耗时。明确控制——使用通配符和正则表达式匹配,很难(而且并不总是能)明确地控制匹配什么和不匹配什么。例如,指定一个词必须匹配,一个词必须不匹配,而一个词仅在第一个词确实匹配的情况下才可以匹配或者才可以不匹配。智能化的结果原创 2020-09-24 10:27:53 · 2196 阅读 · 2 评论 -
组合查询——union
1.组合查询组合查询指的是:在Mysql中执行多个查询,并将结果作为单个查询结果集返回。这些组合查询通常称为并或复合查询。以下2种情况,需要使用组合查询:在单个查询中从不同的表返回类似结构的数据;对单个表执行多个查询,按单个查询返回数据。2.创建组合查询可用union操作符来组合数条SQL查询。利用union,可给出多条select语句,将它们的结果组合成单个结果集。2.1 使用unionunion的使用方法:给出每条select语句,在各条语句之间放上关键字union。...原创 2020-09-23 09:54:29 · 2713 阅读 · 1 评论 -
创建高级联结——自联结、自然联结、外部联结&使用带聚集函数的联结
1.使用表别名给表名起表名的好处有:缩短SQL语句;允许在单条SELECT语句中多次使用相同的表。表别名不仅能用于where子句,它还可以用于select的列表、order by子句以及语句的其他部分。但是,表别名只在查询执行中使用。与列别名不一样,表别名不返回到客户机。 2.使用不同类型的联结2.1 自联结自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。虽然最终的结果是相同的,但有时候处理联结远比处理子查询快得多。上述例子查询中需要的两个表实际上是相同的表,原创 2020-09-22 17:27:56 · 921 阅读 · 1 评论 -
联结表——where子句&inner join
1.联结1.1 关系表关系表的设计就是要保证把信息分解成多个表,一类数据一个表。各表通过某些常用的值(即关系设计中的关系互相关联)。各关系表之间通过主键、外键进行关联。关系数据可以有效地存储和方便地处理。因此,关系数据库的可伸缩性远比非关系数据库要好。1.2 为什么要使用联结数据存储在多个表中,怎样用单条SELECT语句检索出数据?答案是使用联结。使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行。2.创建联结确定要联结的表及如何关联2.1 where子句的重要性原创 2020-09-22 14:55:29 · 1479 阅读 · 1 评论 -
使用子查询——在where子句中的in操作符中&用来填充计算列
1.子查询子查询:即嵌套在其他查询中的查询。2.利用子查询进行过滤在使用子查询时,把子查询分解为多行并且适当地进行缩进,能极大地简化子查询的使用。3.作为计算字段使用子查询相关子查询:涉及外部查询的子查询,只要列名可能有多义性,就必须使用这种语法(表名和列名由一个句点分隔)。where A表.字段= B表.字段-- 子查询,分步骤先查出最里面的子查询,再一步步往外层查询-- 第一步,检索包含物品TNT2的所有订单的编号SELECT order_num FROM orderit原创 2020-09-22 10:34:20 · 1236 阅读 · 1 评论 -
分组数据——group by&having
1.数据分组分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算。2.创建分组group by 的一些重要规定:GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制。如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP原创 2020-09-21 22:27:15 · 608 阅读 · 1 评论 -
汇总数据——聚集函数
文章目录1、聚集函数1.1 AVG()函数1.2 count()函数1.3 max()函数1.4 min()函数1.5 sum()函数2. 聚集不同值3. 组合聚集函数1、聚集函数我们经常需要汇总数据而不用把它们实际检索出来,为方便这种类型的检索,MySQL给出了5个聚集函数,如下:1.1 AVG()函数avg()函数忽略列值为null的行。1.2 count()函数count()函数进行计数,有2种使用方式:1.count(*)对表中行的数目进行计数,不管表列中包含的是空值(nul原创 2020-09-20 11:41:55 · 661 阅读 · 1 评论 -
使用数据处理函数——文本、日期和时间、数值处理函数
文章目录1、函数2、使用函数2.1 文本处理函数2.2 日期和时间处理函数2.3 数值处理函数1、函数函数一般是在数据上执行的,它给数据的转换和处理提供了方便。2、使用函数大多数SQL实现支持以下类型的函数。1.用于处理文本串(如删除或填充值,转换值为大写或小写)的文本函数。2.用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数。3. 用于处理日期和时间值并从这些值中提取特定成分(例如,返回两个日期之差,检查日期有效性等)的日期和时间函数。4.返回DBMS正使用的特殊信息(原创 2020-09-19 17:24:09 · 1845 阅读 · 0 评论 -
创建计算字段——concat
一、计算字段计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的。需要注意的是,只有数据库知道SELECT语句中哪些列是实际的表列,哪些列是计算字段。从客户机(如应用程序)的角度来看,计算字段的数据是以与其他列的数据相同的方式返回的。二、拼接字段在MySQL的SELECT语句中,可使用Concat()函数来拼接两个列。多数DBMS使用+或||来实现拼接,MySQL则使用Concat()函数来实现。当把SQL语句转换成MySQL语句时一定要把这个区别铭记在心。在用conc原创 2020-09-19 15:47:35 · 451 阅读 · 0 评论 -
用正则表达式进行搜索——regexp
目录正则表达式介绍使用MYSQL正则表达式基本字符匹配进行OR匹配匹配几个字符之一匹配范围匹配特殊字符匹配字符类匹配多个实例定位符正则表达式介绍正则表达式是用来匹配文本的特殊的串(字符集合)。正则表达式用正则表达式语言来建立。正则表达式语言作为一种特殊语言,与任意语言一样,正则表达式具有你必须学习的特殊的语法和指令。使用MYSQL正则表达式正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。MySQL用WHERE子句.原创 2020-09-18 17:31:41 · 612 阅读 · 1 评论 -
用通配符进行过滤——like
目录like操作符:select 列名 from 表名 where 列名 like 'A%';百分号(%)通配符下划线(_)通配符使用通配符的技巧like操作符:select 列名 from 表名 where 列名 like 'A%';通配符:用来匹配值的一部分的特殊字符。百分号(%)通配符%告诉MySQL接受A之后的任意字符,不管它有多少字符。通配符可在搜索模式中任意位置使用,并且可以使用多个通配符。通配符也可以出现在搜索模式的中间。除了一个或多..原创 2020-09-18 15:05:02 · 1275 阅读 · 1 评论 -
数据过滤——and、or、in、not操作符
目录组合where子句and操作符or操作符and和or的计算次序in操作符not操作符组合where子句and操作符AND 用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。or操作符OR WHERE子句中使用的关键字,用来表示检索匹配任一给定条件的行。and和or的计算次序此问题的解决方法是使用圆括号明确地分组相应的操作符。in操作符IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由.原创 2020-09-17 17:44:47 · 1039 阅读 · 0 评论 -
过滤数据——where
目录使用where子句:select 列名1,列名2 from 表名 where 条件;where子句操作符检查单个值:不匹配检查范围值检查:Between 条件1 and 条件2空值检查使用where子句:select 列名1,列名2 from 表名 where 条件;在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出。where子句操作符检查单个值:MySQL在执行匹配时默认...原创 2020-09-17 16:59:46 · 327 阅读 · 0 评论 -
排序检索数据——order by
目录排序数据:select 列名 from 表名 order by 列名;按多个列排序:select 列名1,列名2,列名3 from 表名 order by 列名2,列名3;指定排序方向——降序:select 列名1,列名2 from 表名 order by 列名2 desc;排序数据:select 列名 from 表名 order by 列名;按多个列排序:select 列名1,列名2,列名3 from 表名 order by 列名2,列名3;为了按多个列排..原创 2020-09-17 16:07:58 · 398 阅读 · 0 评论 -
检索数据——select
检索单个列:select 列名 from 表名;检索多个列:select 列名1,列名2,列名3from 表名;从一个表中检索多个列,在SELECT关键字后给出多个列名,列名之间必须以逗号分隔,但最后一个列名后不加。检索所有列:select * from 表名;一般,除非你确实需要表中的每个列,否则最好别使用*通配符。虽然使用通配符可能会使你自己省事,不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能。只返回不同的值:select distinct 列...原创 2020-09-17 15:16:27 · 361 阅读 · 2 评论 -
数据库show的用法
使用数据库:use 数据库名;使用use打开数据库,才能读取其中的数据显示所有数据库:show databases;如果你不知道可以使用的数据库名时,可以查找系统所有的数据库名。原创 2020-09-17 11:25:14 · 3840 阅读 · 1 评论 -
数据增删改查
数据操作新增数据有两种方案方案1:给全表字段插入数据,不需要指定字段列表:要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致,凡是非数值数据,都需要使用引号(建议是单引号)包裹insert into 表名 values(值列表) [(值列表)]; -- 可以一次性插入多条记录方案2:给部分字段插入数据,需要选定字段列表,字段列表出现的顺序与字段顺序无关,但是值列表的顺序必须与选定的字段的顺序一致insert into 表名 (字段列表)values (值列表) [(值列表.原创 2020-09-15 17:38:47 · 217 阅读 · 2 评论 -
数据表的增删改查
表操作表与字段是密不可分的新增数据表create table [if not exists]表名 (字段名字 数据类型,字段名字 数据类型 -- 最后一行不需要逗号) [库选项];if not exists:如果表名不存在,那么就创建,否则不执行创建代码,检查功能表选项:控制表的表现 字符集:charset/character set 具体字符集; -- 保证表中数据存储的字符集 校对集:collate 具体校对集; ...原创 2020-09-15 16:16:33 · 279 阅读 · 1 评论 -
SQL三部分--DDL、DML、DCL
SQLSQL:Structured Query Language,结构化查询语言(数据以查询为主:99%是在进行查询操作)SQL分为三个部分: DDL:Data Definition Language,数据定义语言,用来维护存储数据的结构(数据库,表)代表指令:create,drop,alter等 DML:Data Manipulation Language,数据操作语言,用来对数据进行操作(数据表中的内容)代表指令:inserrt,delete,update...原创 2020-09-13 20:38:31 · 790 阅读 · 0 评论 -
Mysql服务器
SQLSQL:Structured Query Language,结构化查询语言(数据以查询为主:99%是在进行查询操作)SQL分为三个部分: DDL:Data Definition Language,数据定义语言,用来维护存储数据的结构(数据库,表)代表指令:create,drop,alter等 DML:Data Manipulation Language, 数据操作语言,用来对数据进行操作(数据表中的内容),代表指令:inserrt,delete,update...原创 2020-09-13 20:24:53 · 1492 阅读 · 1 评论 -
数据库的增删改查
SQL基本操作基本操作:CRUD将SQL的基本操作根据操作对象进行分类,分为三类:库操作,表操作(字段),数据操作库操作对数据库的增删改查新增数据库基本语法Create database 数据库名字[库选项];库选项:用来约束数据库,分为两个选项 字符集设定:charset/character set 具体字符集(数据存储的编码格式):常用字符集:GBK和UTF8 校对集设定:collate 具体校对集(数据比较的规则)...原创 2020-09-15 10:37:47 · 1102 阅读 · 2 评论 -
数据库概述
数据库基础1、什么是数据库?数据库:database,存储数据的仓库数据库:高效的存储和处理数据的介质(介质主要是两种:磁盘和内存)2、数据库的分类?数据库基于存储介质的不同,进行了分类,分为两类:关系型数据库(SQL)和非关系型数据库(NoSQL:Not Only SQL)3、不同的数据库阵营中的产品有哪些?关系型数据库: 大型:Oracle,DB2 中型:SQL-SERVER,Mysql等 小型:access等非关系型数据库:me...原创 2020-09-13 20:04:11 · 232 阅读 · 1 评论 -
MySQL详细安装
查看MySQL是否安装过?win键 输入cmd,回车 mysql 回车MySQL 安装包下载官方下载链接:https://www.mysql.com/downloads/MySQL安装同意许可协议选择MySQL服务器选项下一步...原创 2020-09-11 23:06:09 · 221 阅读 · 1 评论