欢迎光临
我们一直在努力

数据库资料 第3页

mysql索引类型有哪些-mysql教程-学派吧-

mysql索引类型有哪些-mysql教程-学派吧

mysql中索引类型有:最基本的没有限制的普通索引,索引列的值必须唯一的唯一索引,主键索引,多个字段上创建的组合索引以及用来查找文本中的关键字的全文索引 【推荐课程:MySQL教程】 MySQL中的索引类型有以下几种 普通索引 唯一索引 主键索引 组合索引 全文索引 1、普通索引 是最基本的索引,它没有任何限制。它有以下几种创建方式: 直接创建索引 CREATE INDEX index_name ON table(column(length)) 修改表结构的方式添加索引 ALTER TABLE table_name ADD INDEX index_name ON (column(length)) 创建表的时候同时创建索引 CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER NOT NULL , `content` text CHARACTER NULL , `time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), INDEX index_name (title(length)) ) 删除索引 DROP INDEX index_name ON table 2、唯一索引与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式: 创建唯一索引 CREATE UNIQUE INDEX indexName ON table(column(length)) 修改表结构 ALTER TABLE table_name ADD UNIQUE indexName ON (column(length)) 创建表的时候直接指定 CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT , `title` char(255) CHARACTER NOT NULL , `content` text CHARACTER NULL , `time` int(10) NULL DEFAULT NULL , UNIQUE indexName (title(length)) ); 3、主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引: CREATE TABLE `table` (...

赞(0)adminadmin阅读(1824)去评论

mongodb查询表字段、进行字符串截取以及更新的方法-mysql教程-学派吧

本篇文章给大家带来的内容是关于mongodb查询表字段、进行字符串截取以及更新的方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 update() 方法用于更新已存在的文档。语法格式如下: db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } ) 参数说明: query : update的查询条件,类似sql update查询内where后面的。update : update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询内set后面的upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。writeConcern :可选,抛出异常的级别。 例:图片替换地址,先模糊查询,再替换 db.pfs_merchants.find({'logo_url': /10.2.121.170/}).forEach(function(user) { user.logo_url = user.logo_url.replace("10.2.121.170","10.128.3.80"); print(user.logo_url); db.pfs_merchants.update({"_id":user._id},{$set:{"logo_url":user.logo_url}}); }) 本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的mongodb视频教程栏目! 以上就是mongodb查询表字段、进行字符串截取以及更新的方法的详细内容,更多请关注php中文网其它相关文章!

赞(0)adminadmin阅读(2546)去评论
MySQL和Redis事务的比较(图文)-mysql教程-学派吧-

MySQL和Redis事务的比较(图文)-mysql教程-学派吧

本篇文章给大家带来的内容是关于MySQL和Redis事务的比较(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 简言:一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 从标题来看,既然都是事务,那之间有什么区别?来一一解开,先从两个数据库说去。 MySQL 属于 关系型数据库 , Redis 属于 非关系型数据库,两者对事务有着不同的解释。 (相关推荐:MySQL教程,Redis教程) Redis [1] Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 一个事务从开始到执行会经历以下三个阶段: 开始事务。 命令入队。 执行事务。 单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。 事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。 操作错误 看着有点儿绕口,那就实际执行一下 看一下结果。 127.0.0.1:6379> multi OK 127.0.0.1:6379> set tr_1 233 QUEUED 127.0.0.1:6379> lpush tr_1 666 QUEUED 127.0.0.1:6379> set tr_2 888 QUEUED 127.0.0.1:6379> exec 1) OK 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value 3) OK 在上面的事务中,设置了一个 key 为 tr_1 的字符串数据,然后又通过 lpush 来添加元素,这很明显是错误的操作方式,当我们提交事务候出现了一个操作错误,这时候我们来看看 tr_1 的值是什么。 127.0.0.1:6379> get tr_1 "233" 通过 get 命令来的tr_1 内容还是 233 ,并没有变,那再看一下其他的。 127.0.0.1:6379> keys * 1) "tr_2" 2) "tr_1" 127.0.0.1:6379> get tr_2 "888" 127.0.0.1:6379> 这里可以看到 tr_2 存在,并打印了值,这时候我们发现,即使出现了操作错误 ,但是错误并没有致使执行停止,错误之后的语句也执行了并成功执行,似乎符合上面提到的 中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。 语法错误 NO~,这时候还有另外一种情况 语法错误 127.0.0.1:6379> multi OK 127.0.0.1:6379> set tr_1...

赞(0)adminadmin阅读(1608)去评论

MySQL数学函数的简单总结-mysql教程-学派吧

MySQL包含了很多函数和运算符,可以帮助我们处理数据。下面我们就给大家整理出MySQL中可用的数学函数,希望对需要的朋友有所帮助! ABS()返回给定值的绝对值。 ACOS()返回数字的反余弦值。 ASIN()返回数字的反正弦值。 ATAN()返回一个或多个值的反正切值。 ATAN2()返回两个参数的反正切。 CEIL()同义词是CEILING()。 CEILING()将一个数字四舍五入到最近的整数(返回不小于其参数的最小整数)。 CONV()转换不同数字基数之间的数字。 COS()返回数字的余弦值。 COT()返回数字的余切。 CRC32()计算循环冗余校验值。 DEGREES()从弧度转换为度数。 EXP()返回e到x的幂。 FLOOR()将数字向下舍入到最接近的整数(返回不大于参数的最大整数值)。 LN()返回数字的自然对数。 LOG()返回数字的自然对数。还允许您指定基数。 LOG10()返回参数的以10为底的对数。 LOG2()返回参数的以2为底的对数。 MOD()执行模运算。返回N除以M的余数。 PI()返回π(pi)的值。 POW()将引发的参数返回到指定的幂。 POWER()同义词POW()。 RADIANS()将值从度转换为弧度,并返回结果。 RAND()返回随机浮点值。 ROUND()将数字向上或向下舍入到给定的小数位数。 SIGN()返回参数的符号(这样您就可以知道数字是正数还是负数)。 SIN()返回参数的正弦值。 SQRT()返回参数的平方根。 TAN()返回参数的正切值。 TRUNCATE()将值截断为指定的小数位数。 相关推荐:《mysql教程》 以上就是MySQL数学函数的简单总结的详细内容,更多请关注php中文网其它相关文章!

赞(0)adminadmin阅读(1547)去评论
MySQL Workbench如何导出查询结果?(图文)-mysql教程-学派吧-

MySQL Workbench如何导出查询结果?(图文)-mysql教程-学派吧

你可以使用MySQL Workbench运行一个查询,然后将该查询的结果导出到一个文件中。(相关推荐:《MySQL教程》) 步骤: 1、运行查询 2、单击“Results Grid”菜单栏上的“Export” 如下截图: 注意:MySQL Workbench默认将结果集限制为1000行。如果不希望你的结果集被限制在这个数量(或者已经指定的其他数量),请确保删除这个限制。 你可以通过单击“Limit to 1000 rows”下拉菜单并选择“Don't Limit”来更改该设置。 文件格式 你可以选择保存文件的文件格式。以下是撰写本文时支持的格式: 1、CSV 2、CSV (; separated) 3、HTML 4、JSON 5、SQL INSERT statements 6、Excel Spreadsheet 7、XML 8、XML (MySQL format) 9、Tab separated 查询菜单 你还可以通过MySQL Workbench Query 查询菜单启动导出: 查询菜单还提供了一个“Export Results…”(导出结果)选项。 你还可以使用SELECT ... INTO OUTFILE将查询结果从查询中导出。这将在查询运行时立即导出文件。 本篇文章就是关于MySQL Workbench导出查询结果的介绍,希望对需要的朋友有所帮助! 以上就是MySQL Workbench如何导出查询结果?(图文)的详细内容,更多请关注php中文网其它相关文章!

赞(0)adminadmin阅读(2439)去评论
mysql更新语句怎么写?-mysql教程-学派吧-

mysql更新语句怎么写?-mysql教程-学派吧

MySQL更新语句也就是MySQL中的update语句,当我们需要更新或者修改表中的数据时,就会使用这个update语句,下面我们就来看一下mysql更新语句的具体写法。 MySQL中update语句用于更新表中的现有数据。亦可用UPDATE语句来更改表中单个行,一组行或所有行的列值。 MySQL中UPDATE语句的语法: 单表 UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET assignment_list [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] value: {expr | DEFAULT}assignment:col_name = value assignment_list:assignment [, assignment] ... 多表 UPDATE [LOW_PRIORITY] [IGNORE] table_references SET assignment_list [WHERE where_condition] UPDATE语句更新表时需要注意的是: UPDATE关键字后面指定要更新数据的表名。 SET子句指定要修改的列和新值。要更新多个列,请使用以逗号分隔的列表。 使用WHERE语句中的条件指定要更新的行。WHERE子句是可选的。 如果省略WHERE子句,则UPDATE语句将更新表中的所有行。 如果指定了ORDER BY子句,则按照被指定的顺序对行进行更新。 LIMIT子句用于给定一个限值,限制可以被更新的行的数目。 多表更新时ORDER BY和LIMIT不能被使用。 使用update语句修改表时: 单表修改是指修改指定单个表中的已经存在数据的一个或多个列的数值;set短语后面跟要修改的列和值; where子句表示限定要修改表中的哪些数据,如果没有where子句则表示所有行都要修改; order by子句表示update数据按照指定的顺序进行; limit子句表示限定修改数据的行数; 多表修改是指修改table_references指定的多个表中满足条件的行数据,多表修改不允许使用order by和limit子句。 本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的MySQL视频教程栏目! 以上就是mysql更新语句怎么写?的详细内容,更多请关注php中文网其它相关文章!

赞(0)adminadmin阅读(1661)去评论
MySQL执行过程以及查询缓存的详细介绍-mysql教程-学派吧-

MySQL执行过程以及查询缓存的详细介绍-mysql教程-学派吧

本篇文章给大家带来的内容是关于MySQL执行过程以及查询缓存的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 MySQL执行一个查询过程:当我们向MySQL发送一个请求的时候,MySQL到底做了什么: 1.客户端发送一条查询给服务器2.服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。3.服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划。4.MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询5.将结果返回给客户端。 mysql 主要是由 server 层和存储层两部分构成的。server 层主要包括连接器、查询缓存,分析器、优化器、执行器。存储层主要是用来存储和查询数据的,常用的存储引擎有 InnoDB、MyISAM, (1) MySQL客户端/服务器通信协议 MySQL客户端和服务器之的通信协议是“半双工”的,这就意味着,在任何一个时刻,要么是由服务器向客户端发送数据,要么是由客户端向服务器发送数据,这两个动作不能同时发生。所以我们无法也无须将一个消息切成小块独立来发送。 优缺点:这种协议让MySQL通信简单快速,但是也从很多地方限制了 MySQL。一个明显的限制是,这意味着没法进行流量控制。一旦一端开始发送消息,另一端要接收完整个消息才能响应它。这就像采回抛球的游戏:在任何时刻,只有一个人能控制球,而且只有控制球的人才能将球抛回去(发送消息)。 (2).连接器 MySQL客户端和服务端建立连接,获取当前连接用户的权限 (3)查询缓存在解析一个查询语句之前,如果查询缓存是打开的,MySQL会检查这个缓存,是否命中查询缓存中的数据。这个检查是通过一个大小写敏感的哈希查找实现的。查询和缓存中的查询即使只有一个字节不同,那也不会匹配缓存结果,这种情况下查询就会进入下一阶段的处理。 如果当前的查询恰好命中了查询缓存,那么在返回查询结果之前 MySQL会检查一次用户权限。这仍然是无须解析查询SQL语句的,因为在查询缓存中已经存放了当前查询需要访问的表信息。如果权限没有问题, MySQL会跳过所有其他阶段,直接从缓存中拿到结果并返回给客户端。这种情况下,查询不会被解析,不用生成执行计划,不会被执行. ps:注意在 mysql8 后已经没有查询缓存这个功能了,因为这个缓存非常容易被清空掉,命中率比较低。 (3).分析器 既然没有查到缓存,就需要开始执行 sql 语句了,在执行之前肯定需要先对 sql 语句进行解析。分析器主要对 sql 语句进行语法和语义分析,检查单词是否拼写错误,还有检查要查询的表或字段是否存在 (4)查询优化 查询的生命周期的下一步是将一个SQL转换成一个执行计划, MySQL再依照这个执行计划和存储引擎进行交互。这包括多个子阶段:解析SQL、预处理、优化SQ执行计划。这个过程中任何错误(例如语法错误)都可能终止查询。 2.关于查询缓存 (1)MySQL 判断缓存命中的方法很简单:缓存存放在一个引用表中,通过一个哈希值引用。MySOL查询缓存保存查询返回的完整结果。当查询命中该缓存, MySQL会立刻返回结果跳过了 解析,优化和执行阶段 查询缓存系统会跟踪查迫中涉及的每个表,如果这些表发生变化,那么和这个表相关的的存数据都将失效。 这种机制效率看起来比较低,因为数据表变化时很有可能对查询结果并没有变更,但是这种简单实现代价很小,而这点对于一个非常繁忙的系统来说非常重要。 查询缓存系统对应用程序是完全透明的。应用程序无须关心 MySQL是通过查询缓存返回的结果还是实际执行返回的结果。事实上,这两种方式执行的结果是完全相同的。换句话说,查询缓存无须使用任何语法。无论是 MYSQL开启成关闭查询缓在,对应用程序都是透明的。 (2)判断缓存命中 当判断缓存是否命中时, MySQL不会解析、“正规化”或者参数化查询语句,而是直接使用SQL语句和客户端发送过来的其他原始信息,在字符上不同,例如空格、注释,在何的不同,都会导致缓存的不中。 当查询语句中有一些不确定的数据时,则不会被缓存,例如包含函数NOW()或者 CURRENT_DATE()的查询不会被缓存. 误区:我们常听到:“如果查询中包含一个不确定的函数, MySQL则不会检查查询缓存”。这个说法是不正确的。 因为在检查查询缓存的时候,还没有解析SQL语句,所以MySQL并不知道查询语句中是否包含这类函数。 在检查查询缓存之前, MySQL只做一件事情,就是通过一个大小写不敏感的检查看看SQL语句是不是以5EL开头。 准确的说法应该是:“如果查询语句中包含任何的不确定函数,那么在查询缓存中是不可能找到缓存结果的”。 注意点:MySQL的查询缓存在很多时候可以提升查询性能,在使用的时候,有一些问题需要特别注意。首先,打开查询缓存对读和写操作都会带来额外的消耗: 1.读查询在开始之前必须先检查是否命中缓存2.如果这个读查询可以被缓存,那么当完成执行后, MySQL若发现查询缓存中没有这个查询,会将其结果存入查询缓存,这会带来额外的系统消耗。3.这对写操作也会有影响,因为当向某个表写入数据的时候, MySQL必须将对应表的所有缓存都设置失效。如果查询缓存非常大或者碎片很多,这个操作就可能会带来大系统消耗(设置了很多的内存给查询缓存用的时候) 如果查询缓存使用了很大量的内存,缓存失效操作就可能成为一个非常严重的问题瓶颈如果缓存中存放了大量的查询结果,那么缓存失效操作时整个系统都可能会僵死一会 因为这个操作是靠一个全局锁操作保护的,所有需要做该操作的查询都要等待这个锁,而且无论是检测是否命中缓存、还是缓存失效检测都需要等待这个全局锁。 (3)什么情况下查询缓存能发挥作用理论上,可以通过观察打开或者关闭查询缓存时候的系统效率来决定是否需要开启查询。 对手那些需要消耗大量资源的查询通常都是非常适合缓存的。例如一些汇总计算查询具体的如 COUNT()等。总地来说,对于复杂的 SELECT语句都可以使用查询缓存,例如多表JOIN后还需要做排序和分页,这类查询每次执行消耗都很大,但是返回的结果集却很小,非常适合查询缓存。 不过需要注意的是,涉及的表上 UPDATE、 DELETE和 INSERT操作相比 SELECT来说要非常少才行。 判断查询缓存是否有效的直接数据是命中率。就是使用查询缓存返回结果占总查询的比率 不过缓存中率是一个很难判断的数值。命中率多大才是好的命中率。具体情况,具体分析。 只要查询缓存带来的效率提升大于查询缓存带来的额外消耗,即使30%命中率对系统性能提升也有很大好处。另外,缓存了哪些查询也很重要,例如,被缓存的查询本身消耗非常巨大,那么即使缓存命中率非常低,也仍然会对系统性能提升有好处 缓存未命中可能有如下几种原因: 1.查询语句无法被缓存,可能是因为查询中包含一个不确定的函数(如 CURREN_DATE)或者查询结果太大而无法缓存。这都会导致状态值 Cache not cached增加。2.MySQL从未处理这个查询,所以结果也从不曾被缓存过。 3.还有一种情况是虽然之前缓存了查询结果,但是由于查询缓存的内存用完了,MySQL需要将某些缓存“逐出”,或者由于数据表被修改导致缓存失效。 如果你的服务器上有大量缓存未命中,但是实际上绝大数查询都被缓存了,那么一定是有如下情况发生: 1.查询缓存还没有完成预热。也就是说, MySQL还没有机会将查询结果都缓存起来。2.查询语句之前从未执行过。如果你的应用程序不会重复执行一条查询语句,那么即使完成预热仍然会有很多缓存未命中3.缓存失效操作太多了。 (4)如何配置 和维护查询缓存 query_cache_type 是否打开查询缓存。可以设置成0FN或 DEMAND。 DEMAND表示只有在查询语句中明确写明SQL_ CACHE的语句才放入查询缓存。这个变量可以是会话级别的也可以是全局级别的 query_cache_size 查询缓存使用的总内存空间,单位是字节。这个值必须是1024的整数倍,否则 MySQL实际分配的数据会和你指定的略有不同。 query_cahce_min_res_unit 在查询缓存中分配内存块时的最小单位。 query_chache_limit MySQL能够缓存的最大査询结果。如果查询结果大于这个值,则不会被缓存。因为査询缓存在数据生成的时候就开始尝试缓存数据,所以只有当结果全部返回后,才知道查询结果是否超出限制 如果超出, MySQL则增加状态值 Cache_not_cached,并将结果从查询缓存中删除如果你事先知道有很多这样的情况发生,那么建议在查询语句中加入 (5)替代方案 MySQL查询缓存工作的原则是:执行查询最快的方式就是不去执行,但是查询仍然需要发送到服务器端,服务器也还需要做一点点工作。如果对于某些查询完全不需要与服务器通信效果会如何呢?这时客户端的缓存可以很大程度上帮你分担 MySQL服务器的压力 总结: 完全相同的查询在重复执行的时候,查询缓存可以立即返回结果,而无须在数据库中重新执行一次。根据我们的经验,在高并发压力环境中在询缓存会导致系统性能的下降,甚至僵死。 如果一定要使用查询缓存,那么不要设置太大内存,而且只有在确收益的时候才使用。 那该如何判断是否应该使用查询缓存呢?建议使Percona server.,观察更细致的日志,并做一些简单的计算。还可以查看缓存命中率(并不总是有用)、“ NSERTS和 SELECT比率”(这个参数也并不直观)、或者“命中和写入比率”(这个参考意义较大)。 查询缓存是一个非常方便的缓存,对应用程序完全透明,无须任何额外的编码,但是、如果希望有更高的缓存效率,我们建议使cache 或者其他类似的解决方案。 【相关推荐:MySQL视频教程】 以上就是MySQL执行过程以及查询缓存的详细介绍的详细内容,更多请关注php中文网其它相关文章!

赞(0)adminadmin阅读(1526)去评论
MySQL存储过程的理解-mysql教程-学派吧-

MySQL存储过程的理解-mysql教程-学派吧

MySQL中的存储过程指的是存储在数据库中的SQL语句集合,当创建好存储过程后在运行时提供所需参数,存储过程就可以以代码指定的方式使用参数执行并返回值 在MySQL中提供了创建存储过程的能力。存储过程是MySQL以及其他数据库管理系统中的强大功能。接下来在文章中将为大家具体介绍MySQL中的存储过程,具有一定的参考作用,希望对大家有所帮助。 【推荐课程:MySQL教程】 存储过程: 存储过程指的是存储在数据库中的SQL语句的集合。存储过程它可以包含业务逻辑,这是区分存储过程和视图的关键之一。另外存储过程还可以接受参数,我们可以在存储过程中设置变量,写入语句等。 存储过程如何工作 首先要先创建一个存储过程然后再运行。在运行的过程中需要提供它所需要的参数,然后存储过程将以代码指定的任何方式使用参数执行。例如,编写一个接受FruitId参数的存储过程。然后在存储过程可以获取该参数并使用它来检查该特定水果的库存。因此我们可以调用存储过程,即每次使用不同的水果ID它都将返回一个值,并显示该库存中有多少水果。 创建存储过程 我们可以通过CREATE PROCEDURE语句创建存储过程 CREATE PROCEDURE demo_name(p_1 INT) BEGIN ...code goes here... END; demo_name指的是存储过程的名称,括号是必须的,如果里面不包含任何参数则括号可以为空 存储过程的主体是介于BEGIN和END关键字之间。这些关键字用于编写复合语句。复合语句可以包含多个语句,如果需要,可以嵌套这些语句。 例:创建一个存储过程名为FruitStock: DELIMITER // CREATE PROCEDURE FruitStock(thisFruit SMALLINT) BEGIN SELECT Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Fruit.FruitId = thisFruit; END // DELIMITER ; 创建好了一个存储过程,接下来将调用这个存储过程 调用一个参数为1的ID CALL FruitStock(1); 删除存储过程 可以使用DROP PROCEDURE语句删除存储过程。 DROP PROCEDURE FruitStock; 改变存储过程 在存储过程中可通过下列语句更改存储过程ALTER PROCEDURE。 需要注意要更改存储过程的主体或其任何参数时,需要删除该过程然后再次创建 例:添加Fruit.FruitId所要返回的列表 DROP PROCEDURE IF EXISTS FruitStock; DELIMITER // CREATE PROCEDURE FruitStock(thisFruit SMALLINT) BEGIN SELECT Fruit.FruitId, Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Fruit.FruitId = thisFruit; END // DELIMITER ; 总结:以上就是本篇文章的全部内容了,希望对大家有所帮助。 以上就是MySQL存储过程的理解的详细内容,更多请关注php中文网其它相关文章!

赞(0)adminadmin阅读(1570)去评论
mysql索引原理是什么?-mysql教程-学派吧-

mysql索引原理是什么?-mysql教程-学派吧

本篇文章主要给大家介绍mysql索引原理,希望对需要的朋友有所帮助!(相关推荐:《mysql教程》) 索引的目的 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的,如果我想找到m开头的单词呢?或者ze开头的单词呢?是不是觉得如果没有索引,这个事情根本无法完成? mysql索引原理 除了词典,生活中随处可见索引的例子,如火车站的车次表、图书的目录等。它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。 数据库也是一样,但显然要复杂许多,因为不仅面临着等值查询,还有范围查询(>、<、between、in)、模糊查询(like)、并集查询(or)等等。数据库应该选择怎么样的方式来应对所有的问题呢? 我们回想字典的例子,能不能把数据分成段,然后分段查询呢?最简单的如果1000条数据,1到100分成第一段,101到200分成第二段,201到300分成第三段……这样查第250条数据,只要找第三段就可以了,一下子去除了90%的无效数据。 但如果是1千万的记录呢,分成几段比较好?稍有算法基础的同学会想到搜索树,其平均复杂度是lgN,具有不错的查询性能。但这里我们忽略了一个关键的问题,复杂度模型是基于每次相同的操作成本来考虑的,数据库实现比较复杂,数据保存在磁盘上,而为了提高性能,每次又可以把部分数据读入内存来计算,因为我们知道访问磁盘的成本大概是访问内存的十万倍左右,所以简单的搜索树难以满足复杂的应用场景。 以上就是mysql索引原理是什么?的详细内容,更多请关注php中文网其它相关文章!

赞(0)adminadmin阅读(1500)去评论

MySQL中EXPLAIN解释命令的介绍(附示例)-mysql教程-学派吧

本篇文章给大家带来的内容是关于MySQL中EXPLAIN解释命令的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1 EXPLAIN概念 EXPLAIN会向我们提供一些MySQL是执行sql的信息: EXPLAIN可以解释说明 SELECT, DELETE, INSERT, REPLACE, and UPDATE 等语句. 当EXPLAIN与可解释的语句一起使用时,mysql会显示一些来自于优化器的关于sql执行计划的信息。即mysql解释它是如何处理这些语句的,和表之间是如何连接的。想获取更多关于EXPLAIN如何获取执行计划信息的。 当EXPLAIN后面是一个会话的connection_id 而不是一个可执行的语句时,它会展示会话的信息。 对于SELECT语句,EXPLAIN会产生额外的执行计划信息,这些信息可以用SHOW WARNINGS显示出来。 EXPLAIN对于检查设计分区表的查询时非常有用。 FORMAT选项可以用于选择输出格式,如果没有配置FORMAT选项,默认已表格形式输出。JSON 选项让信息已json格式展示。 2 EXPLAIN 输出列信息 EXPLAIN输出的字段信息第一列:列名, 第二列:FORMAT = JSON时输出中显示的等效属性名称 ,第三列:字段含义 Column JSON Name Meaning id select_id select标识号 select_type None select类型 table table_name 这一行数据是关于哪张表的 partitions partitions 匹配的分区,对于未分区表,该值为空 type access_type 使用的连接类别,有无使用索引 possible_keys possible_keys MySQL能使用哪个索引在该表中找到行 key key MySQL实际决定使用的键(索引) key_len key_length MySQL决定使用的键长度。如果键是NULL,长度为NULL ref ref 与索引关联的列 rows rows mysql认为执行sql时必须被校验的行数 filtered filtered 表示此查询条件所过滤的数据的百分比 Extra None 附加信息 2.1 id SELECT标识符。SELECT在查询中的序列号,可以为空。 2.2 select_type SELECT类型,所有类型在下表中展示,JSON格式的EXPLAIN将SELECT类型公开为query_block的属性,除非它是SIMPLE或PRIMARY。 JSON名称(不适用为None)也显示在表中。 select_type Value JSON Name Meaning SIMPLE None 简单SELECT(不使用UNION或子查询等) PRIMARY None 嵌套查询时最外层的查询 UNION None UNION中的第二个或后面的SELECT语句 DEPENDENT UNION dependent (true) UNION中的第二个或以后的SELECT语句,取决于外部查询 UNION RESULT union_result UNION的结果 SUBQUERY None 子查询中的第一个选择 DEPENDENT SUBQUERY dependent (true) 子查询中的第一个选择,取决于外部查询 DERIVED None 派生表(子查询中产生的临时表) MATERIALIZED materialized_from_subquery 物化子查询 UNCACHEABLE SUBQUERY cacheable (false) 无法缓存结果的子查询,必须对外部查询的每一行进行重新计算 UNCACHEABLE UNION cacheable...

赞(0)adminadmin阅读(1444)去评论

如何在Mac上安装MySQL?-mysql教程-学派吧

Oracle的MySQL是一个流行的基于结构化查询语言(SQL)的开源关系数据库管理系统。它经常与PHP一起使用,以增强网站的功能。PHP预装在Mac电脑上,而MySQL没有。 当您创建和测试需要MySQL数据库的软件或网站时,在您的计算机上安装MySQL非常方便。在Mac上安装MySQL比您预期的要容易,特别是如果您使用本机安装包而不是TAR包,这需要在终端模式下访问和更改命令行。(推荐:《MySQL教程》) 使用本机安装包安装MySQL Mac的免费下载是MySQL社区服务器版。 1、到MySQL网站下载最新版本的Mac for MacOS。选择本机程序包DMG存档版本,而不是压缩的TAR版本。 2、单击您选择的版本旁边的“ 下载”按钮。 3、提示您注册一个Oracle Web帐户,但是除非您需要,否则单击No thanks,启动我的下载。 4、在下载文件夹中,找到并双击file图标以装入.dmg存档文件,其中包含安装程序。 5、双击MySQL软件包安装程序的图标。 6、阅读打开的对话框屏幕,然后单击Continue开始安装。 7、阅读许可条款。单击“继续”,然后同意继续。 8、点击Install。 9、记录安装过程中显示的临时密码。无法恢复此密码。你必须保存它。登录MySQL后,系统会提示您创建一个新密码。 10、按下Summary屏幕上的Close以完成安装。 MySQL网页包含了该软件的文档、说明和更改历史记录。 如何在Mac上启动SQL? MySQL服务器安装在Mac上,但默认情况下不加载。通过使用MySQL首选项窗格单击Start启动MySQL,该首选项窗格是在默认安装期间安装的。您可以使用MySQL首选项窗格将MySQL配置为在打开计算机时自动启动。 以上就是如何在Mac上安装MySQL?的详细内容,更多请关注php中文网其它相关文章!

赞(0)adminadmin阅读(1554)去评论

在MySQL中如何解码base64编码的字符串?-mysql教程-学派吧

本篇文章主要给大家介绍在mysql中如何解码base64编码的字符串,那么我们可以通过FROM_BASE64()函数来实现解码。 在MySQL中,FROM_BASE64()函数解码一个base-64编码的字符串并返回结果。更具体地说,它接受一个用TO_BASE64()使用的base-64编码规则编码的字符串,并以二进制字符串的形式返回解码后的结果。 FROM_BASE64()语法如下: FROM_BASE64(str) 其中参数str是你希望解码的以base-64编码的字符串。 例1 -基本用法 下面是一个例子来演示基本用法: SELECT FROM_BASE64('Q2F0'); 结果: +---------------------+ | FROM_BASE64('Q2F0') | +---------------------+ | Cat | +---------------------+ 在这个例子中,我们的参数是Q2F0,它是Cat的base-64编码字符串。 我们可以通过将Cat传递给TO_BASE64()函数得到base-64编码的字符串: SELECT TO_BASE64('Cat'); 结果: +------------------+ | TO_BASE64('Cat') | +------------------+ | Q2F0 | +------------------+ 例2 -一个较长的字符串 下面是一个使用更长的字符串的例子: SELECT FROM_BASE64('TXkgY2F0IGxpa2VzIHRvIGNoYXNlIGVsZXBoYW50cyE='); 结果: +-------------------------------------------------------------+ | FROM_BASE64('TXkgY2F0IGxpa2VzIHRvIGNoYXNlIGVsZXBoYW50cyE=') | +-------------------------------------------------------------+ | My cat likes to chase elephants! | +-------------------------------------------------------------+ 例3 -无效参数 如果参数不是有效的base-64字符串,则返回NULL: SELECT FROM_BASE64('Oops!'); 结果: +----------------------+ | FROM_BASE64('Oops!') | +----------------------+ | NULL | +----------------------+ 例4 -NULL参数 如果你传入NULL,你也会得到NULL: SELECT FROM_BASE64(NULL); 结果: +-------------------+ | FROM_BASE64(NULL) | +-------------------+ | NULL | +-------------------+ 例5 -缺少参数 如果你不传递一个参数,你会得到一个错误: SELECT FROM_BASE64(); 结果: ERROR 1582 (42000): Incorrect parameter count in the call to native function 'FROM_BASE64' 例6 -参数太多 如果你传入太多的参数,你也会得到一个错误: SELECT FROM_BASE64('Q2F0', 'RWxlcGhhbnQ='); 结果: ERROR 1582 (42000): Incorrect parameter count in the call to...

赞(0)adminadmin阅读(1823)去评论

Linux服务器下MySQL自动备份脚本的使用方法教程-学派吧-

问题说明 如何对 ECS Linux 系统中部署的 MySQL 进行自动备份。 处理办法 在 ECS Linux 系统中搭建了 MySQL 服务,用户可以使用如下脚本实现 MySQL 的定期自动备份。 使用方法如下: 1. 将以下脚本拷贝到本地,上传到服务器上,名称叫 “autoback.sh” #!/bin/bash #-----------------------------------------------# #This is a free GNU GPL version 3.0 or abover #Copyright (C) 2008 06 05 #mysql_backup Dedicated copyright by My #-----------------------------------------------# echo -e [`date +"%Y-%m-%d %H:%M:%S"`] start #system time time=`date +"%y-%m-%d"` #host IP host="127.0.0.1" #database backup user user="root" #database password passwd="yourpasswd" #Create a backup directory mkdir -p /backup/db/"$time" #list database name all_database=`/usr/bin/mysql -u$user -p$passwd -Bse 'show databases'` #in the table from the database backup for i in $all_database do /usr/bin/mysqldump -u$user -p$passwd $i > /backup/db/"$time"/"$i"_"$time".sql done echo -e [`date +"%Y-%m-%d %H:%M:%S"`] end exit 0 脚本中的数据库名和数据库密码以用户需要备份的数据库信息为准,需要用户修改下。 2. 运行 crontab -e,写入以下内容: 30 5 * * * root sh /root/autobackup.sh >/dev/null...

赞(0)adminadmin阅读(1981)去评论

Linux下MySQL无法访问问题排查的基本步骤-linux教程

问题说明 本文说明云服务器 ECS Linux 上 MySQL 无法访问问题的一般排查步骤。 处理办法 查看 Linux 操作系统是否已经安装了 MySQL $ rpm -qa mysql mysql-4.1.7-4.RHEL4.1 # 说明已经安装了 MySQL 检查状态 检测 MySQL 运行状态: service mysqld status 启动服务: 可以用三种方法来启动 MySQL: 方法一:使用 service 命令启动 MySQL: service mysqld start 方法二:使用 mysqld 脚本来启动 MySQL: /etc/init.d/mysql start 方法三:使用 safe_mysqld 实用程序启动 MySQL 服务,此方法可以使用相关参数: safe_mysqld& //使用&表示将safe_mysqld放在后台执行。 登陆 修改密码 mysqladmin -u root password mysqladmin -u root password 'kaishi' 这里的“密码”为我们欲新设的密码。系统会提示我们输入旧密码(若是 MySQL 刚安装,则默认密码为空) 如果本机可以登陆了,但是其他机器的客户端登陆报错。比如: ERROR 1130 (00000): Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQ L server 则首先查看了 iptables 的设置,确认开放了 3306 端口: iptables -A INPUT -p tcp -m tcp --sport 3306 -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT service iptables save 如果还是无法访问,则可能是 MySQL 的权限问题。则可以通过如下步骤排查: 在本机登录 mysql -h localhost -u root -pkaishi...

赞(0)adminadmin阅读(2012)去评论
关于Linux系统授权MySQL外网访问的教程-学派吧-

关于Linux系统授权MySQL外网访问的教程-学派吧

问题描述 MySQL 无法通过外网连接。 问题原因 在 MySQL 的 bin 目录下执行: 登陆到数据 mysql -uroot -p密码 use mysql; select host,user,password from user; 可以看到 user 为 root,host 为 localhost 的话,说明 MySQL 只允许本机连接,那么外网,本地软件客户端就无法连接了。 解决方案 执行如下命令: update user set host='%' where user ='root'; flush privileges; 查看是否修改正常: 对于设置其他用户远程连接的方法: GRANT ALL PRIVILEGES ON 数据库名.* TO 账户@"%" IDENTIFIED BY "密码"; flush privileges; 可以测试外网连接 MySQL 服务器。关注我们  

赞(0)adminadmin阅读(2132)去评论
linux服务器下如何查看mysql安装信息的详细教程-学派吧--

linux服务器下如何查看mysql安装信息的详细教程-学派吧-

这篇文章主要介绍了linux服务器下查看mysql的安装信息,需要的朋友可以参考下 查看mysql的安装信息: #ps -ef | grep mysql usr/bin/mysql 是指:mysql的运行路径 var/lib/mysql 是指:mysql数据库文件的存放路径 usr/lib/mysql 是指:mysql的安装路径 #whereis mysql #mysqladmin -u root -p variables root是你的数据库帐号 回车后会提示你输入密码,输入上边填写的帐号对应的密码 回车后出来一个大表,找到datadir这一行,后边的值就是数据库所在的路径了。 以上就是linux服务器下如何查看mysql安装信息的详细介绍的详细内容,更多请关注学派吧-

赞(0)adminadmin阅读(2120)去评论

Linux系统MySQL备份的导入导出的具体操作教程-学派吧

问题描述 如何对 ECS Linux 系统中的 MySQL 进行备份的导入和导出。 处理办法 MySQL 备份的导出 MySQL 备份的导入 MySQL 备份的导出 注意: 如果您使用的是帮助中心的一键环境配置,那么 MySQL 的安装目录是 /alidata/server/mysql。 如果您将 MySQL 安装到其他目录,您需要输入您 MySQL 完整的安装路径。 单库备份您可以在服务器上执行如下命令: /alidata/server/mysql/bin/mysqldump -uroot -p密码 数据库名 > 备份名称.sql mysqldump 默认不会导出事件表,执行此命令会出现警告 — Warning: Skipping the data of table mysql.event. Specify the –events option explicitly. 如果您需要导出 MySQL 事件,您可以执行如下命令: /alidata/server/mysql/bin/mysqldump -uroot -p密码 --events --ignore-table=mysql.event 数据库名 > 备份名称.sql MySQL 备份的导入 如果您需要导入备份的 .sql 文件,可以在 备份名称.sql 文件所在目录中执行如下命令: /alidata/server/mysql/bin/mysql -uroot -p密码 mysql < 备份名称.sql 也可以通过执行如下命令: /alidata/server/mysql/bin/mysql -uroot -p密码 mysql>use 数据库; mysql>source /root/备份名称.sql; 注意:/root/备份名称.sql 为实际备份文件绝对路径 以上就是Linux系统MySQL备份的导入导出的具体分析的详细内容,更多请关注学派吧-其它相关文章!

赞(0)adminadmin阅读(1790)去评论

MySQL用Navicat导出数据字典的方法-navicat教程

本篇文章给大家带来的内容是关于MySQL用Navicat导出数据字典的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 数据字典是一名DBA需要维护的重要内容,有人喜欢用excel来维护,本人更喜欢直接在生产库上进行维护,这样可以保证生产库中的注释都是最新的内容,为了便于生产库数据字典的流通性,会采用excel的方式来记录,本文记录下如何快速从生产库导出数据字典信息到excel。 这里算是一个小技巧 利用mysql的information_schema中的COLUMNS表 和navicat中的导出功能实现快速导出数据字典 CREATE TEMPORARYTABLE `COLUMNS` ( `TABLE_CATALOG` varchar(512) NOT NULL DEFAULT'', `TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT'', `TABLE_NAME` varchar(64) NOT NULL DEFAULT '', `COLUMN_NAME` varchar(64) NOT NULL DEFAULT'', `ORDINAL_POSITION` bigint(21) unsigned NOTNULL DEFAULT '0', `COLUMN_DEFAULT` longtext, `IS_NULLABLE` varchar(3) NOT NULL DEFAULT '', `DATA_TYPE` varchar(64) NOT NULL DEFAULT '', `CHARACTER_MAXIMUM_LENGTH` bigint(21)unsigned DEFAULT NULL, `CHARACTER_OCTET_LENGTH` bigint(21) unsignedDEFAULT NULL, `NUMERIC_PRECISION` bigint(21) unsignedDEFAULT NULL, `NUMERIC_SCALE` bigint(21) unsigned DEFAULTNULL, `DATETIME_PRECISION` bigint(21) unsignedDEFAULT NULL, `CHARACTER_SET_NAME` varchar(32) DEFAULTNULL, `COLLATION_NAME` varchar(32) DEFAULT NULL, `COLUMN_TYPE` longtext NOT NULL, `COLUMN_KEY` varchar(3) NOT NULL DEFAULT '', `EXTRA` varchar(30) NOT NULL DEFAULT '', `PRIVILEGES` varchar(80) NOT NULL DEFAULT '', `COLUMN_COMMENT` varchar(1024) NOT NULLDEFAULT '' ) ENGINE=MyISAMDEFAULT CHARSET=utf8; 例如我需要导出guifan库和test库的数据字典信息: select TABLE_SCHEMA,TABLE_NAME,COLUMN_TYPE,COLUMN_COMMENT frominformation_schema.columns where TABLE_SCHEMA='guifan' or TABLE_SCHEMA='test' 在查询结果页面的右上角,有一个导出功能的按钮,点一下可以选择多种导出的格式,如下图所示 按提示操作导出 OK,这就是我想要的数据字典 至此,数据字典快速导出完成。 以上就是MySQL用Navicat导出数据字典的方法介绍的详细内容,更多请关注学派吧其它相关文章!

赞(0)adminadmin阅读(2211)去评论

更好的服务器推荐选择

本站主要用于阿里云、腾讯云、华为云服务器活动的推荐及优惠购买方式、并搜集服务器运维的日常解决方案!

联系我们联系我们

登录

找回密码

注册