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` (...
本篇文章给大家带来的内容是关于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中文网其它相关文章!
【腾讯云】2核2G云服务器新老同享 99元/年,续费同价,云服务器3年机/5年机限时抢购,低至 2.5折
本篇文章给大家带来的内容是关于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...
你可以使用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中文网其它相关文章!
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中文网其它相关文章!
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中文网其它相关文章!
本篇文章给大家带来的内容是关于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中文网其它相关文章!
本篇文章主要给大家介绍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中文网其它相关文章!
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中文网其它相关文章!
本篇文章给大家带来的内容是关于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...
本篇文章主要给大家介绍在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...
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中文网其它相关文章!
Unix和Linux操作系统分别给三个组(所有者,组和其他用户)中的每一个分配三种访问类型(读取,写入和执行)中的一个来设置对文件和目录的访问权限。下面本篇文章就来带大家了解一下在Unix / Linux如何配置文件和目录访问权限,希望对大家有所帮助。 如何查看文件和目录访问权限? 我们可以使用带有-l选项的ls命令来列出文件属性的详细信息,例如 ls -l filename 上面的命令将返回类似-rwe-rw-r的信息,表示该文件具有的权限是:所有者的读取、写入和执行权限,组的读取和写入权限,以及所有其他用户的只读权限。 每种类型的访问权限都具有下面列出的关联数值: Read = 4 Write = 2 Execute = 1 如何配置文件和目录访问权限? 可以使用chmod命令为文件和目录分配访问权限。 当我们将上述每个组的访问权限值加在一起,就会获得一个0~7之间的值,该值可用于使用chmod(更改模式)命令分配或修改权限。 可以通过输入以下命令来指定相关文件的访问权限,例如:在上面的示例中返回的类似-rwe-rw-r的信息 chmod 764 filename 数字764来自: rwe = 4(r)+ 2(w)+ 1(e)= 7 rw = 4(r)+ 2(w)= 6 r = 4(r)= 4 注:UNIX/Linux命令和对象名区分大小写,必须使用“chmod”而不是CHMod或任何其他大小写字母的组合。 使用chmod命令的示例: 每个人都可以访问,需要运行以下命令: chmod 777 filename 对所有者和组权限设置完全访问权限,但其他用户设置只能读取和执行: chmod 775 filename 对所有者的完全访问权限,但限制组和其他用户权限仅对目录中的文件进行读取和执行: chmod 755 dirname 对所有者的完全访问权限,对其他任何人都没有访问权限或权限: chmod 700 filename 无法访问目录中的组或其他用户以及所有者限制读取和执行权限以防止意外删除或修改目录中的文件: chmod 500 dirname 允许所有者和组对文件进行读写访问,允许组中的其他人编辑或删除文件以及所有者,但不能访问其他用户: chmod 660 filename 相关视频教程推荐:《Linux教程》 以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。
为了提高安全性,大多数组织、公司和机构使用网络上的代理服务器访问互联网。使用代理服务器,可以根据需要限制每个用户的访问级别。在本篇文章中,我们将介绍如何在只有终端访问权限的情况下为Linux中的用户启用HTTP代理。 启用HTTP代理 登录到要为其启用HTTP代理的Linux系统上的用户。现在在home目录中编辑.bashrc或.bash_概要文件,并在文件末尾附加以下行。 匿名代理 http_proxy = http://10.0.0.2:8080 export no_proxy = localhost,127.0.0.1 export http_proxy 对于已验证的代理 http_proxy=http://proxyuser:password@10.0.0.2:8080 export no_proxy=localhost,127.0.0.1 export http_proxy 现在可以使用以下命令保存文件并重新加载配置文件。或者可以简单地注销并重新登录到终端以启用设置。 $ source~ / .bashrc $ source~ / .bash_profile 本篇文章到这里就已经全部结束了,
SCP(安全副本)是一个命令行实用程序,允许用户在两个位置之间安全地复制文件和目录。下面本篇文章就来带大家了解一下SCP命令,介绍使用SCP命令是如何安全地传输文件,希望对大家有所帮助。 linux SCP命令 SCP命令是一个linux下进行远程拷贝文件的命令,允许用户在两个位置之间安全地复制文件和目录。 使用SCP命令,用户可以复制文件(或目录): ● 从本地系统到远程系统。 ● 从远程系统到本地系统。 ● 在本地系统的两个远程系统之间。 使用scp传输数据时,文件和密码都是加密的,这样任何窥探流量的人都不会得到任何敏感信息。 SCP命令的基本语法: scp [OPTION] [user@]SRC_HOST:]file1 [user@]DEST_HOST:]file2 ● OPTION: scp选项,如密码,ssh配置,ssh端口,限制,递归复制..等。 ● [user@]SRC_HOST:]file1:源文件。 ● [user@]DEST_HOST:]file2 : 目标文件。 本地文件应使用绝对或相对路径指定,而远程文件名应包括用户和主机规范。 SCP提供了许多选项来控制其行为的各个方面。最广泛使用的选项有: ● -P 指定远程主机ssh端口。 ● -p 保留文件修改和访问时间。 ● -q 如果要禁止进度表和非错误消息,请使用此选项。 ● -C。此选项将强制scp在将数据发送到目标计算机时压缩数据。 ● -r 此选项将告诉scp以递归方式复制目录。 说明:开始使用SCP命令时 因为scp命令依赖ssh进行数据传输,所以在远程系统上进行身份验证需要ssh密钥或密码。 冒号(:)是SCP如何区分本地和远程位置的。 为了能够复制文件,用户必须至少拥有源文件的读取权限和目标系统的写入权限。 在两个系统上复制共享相同名称和位置的文件时要小心,scp会在没有警告的情况下覆盖文件。 如何使用SCP复制两个系统之间的文件和目录? 1、使用scp命令将本地文件复制到远程系统 要将文件从本地复制到远程系统,请运行以下命令: scp file.txt remote_username@10.10.0.2:/remote/directory 说明:file.txt是我们要复制的文件名,remote_username是远程服务器上的用户名,10.10.0.2是服务器IP地址;/remote/directory是要将文件复制到的目录的路径,如果不指定远程目录,文件将被复制到远程用户主目录。 系统将提示用户输入用户密码,然后将开始传输过程。 输出: remote_username@10.10.0.2's password: file.txt 100% 0 0.0KB/s 00:00 从目标位置省略文件名会使用原始名称复制文件。如果要以不同的名称保存文件,则需要指定新名称: scp file.txt remote_username@10.10.0.2:/remote/directory/newfilename.txt 如果远程主机上的SSH正在侦听默认端口22以外的端口,则可以使用以下-P参数指定端口: ssh -P 2322 file.txt remote_username@10.10.0.2:/remote/directory 要将目录从本地复制到远程系统,请使用以下-r选项: scp -r /local/directory remote_username@10.10.0.2:/remote/directory 2、使用scp命令将远程文件复制到本地系统 要将文件从远程系统复制到本地系统,需要使用远程位置作为源,使用本地位置作为目标。 例如,要从IP为10.10.0.2的远程服务器复制名为file.txt的文件,需要运行以下命令: scp remote_username@10.10.0.2:/remote/file.txt /local/directory 注:如果用户没有设置远程计算机的“无密码ssh登录”,将要求输入用户密码。 3、使用scp命令在两个远程系统之间复制文件 使用scp时,用户无需登录到其中一台服务器,就可以将文件从一台远程计算机传输到另一台远程计算机。 例如,以下命令可以将文件/files/file.txt从远程主机host1.com复制到远程主机host2.com上的目录/files上。 scp user1@host1.com:/files/file.txt user2@host2.com:/files 系统将提示用户输入两个远程帐户的密码;数据将直接从一个远程主机传输到另一个。 以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!
Linux cut命令用于根据字段提取文件内容。文本文件没有像数据库那样的行/列,有时我们只需要单列数据。根据分隔符剪切已识别的列(例如:冒号’:’,分号’;’,逗号’,’等)。 对于下面示例,我们采用/etc/passwd文件。所有行都以下面的格式存储,冒号(:)按如下方式分隔。我们使用-f指定字段编号,使用-d作为分隔符。 按照上面的图片,这个文件有7个字段。cut还支持在字符基础suing -c命令行开关上获取值。我们来看下面的例子,使用的是/ etc / passwd文件。 1、从文件中选择单个字段: 例如,我们需要/etc/passwd文件中的用户名列表。我们知道第一列存储了用户名,整个文件由冒号(:)分隔。 #cut -d“:” - f1 </ etc / passwd root bin daemon adm lp sync shutdown halt 我们也可以使用管道“|”将文件内容作为输入传递给cut命令,如下所示 – #cat / etc / passwd | cut -d“:” - f1 2、从文件中选择多列: 我们可以用命令分隔指定多个字段名称,如下例所示,将仅显示第1个,第2个和第7个字段。 # cut -d":" -f1,2,7 < /etc/passwd root:x:/bin/bash bin:x:/sbin/nologin daemon:x:/sbin/nologin adm:x:/sbin/nologin lp:x:/sbin/nologin sync:x:/bin/sync shutdown:x:/sbin/shutdown halt:x:/sbin/halt mail:x:/sbin/nologin uucp:x:/sbin/nologin 我们还可以在字段上指定带连字符( – )的列的范围以及两个选项一起,如下面的示例命令。 第一个命令将选择第1,第2,第3和第4个字段。 第二个命令将选择第3,第4和第5个字段。 最后一个命令将显示第2,第3,第4,第6和第10个字段。 # cut -d":" -f1-4 < /etc/passwd # cut -d":" -f3-5 < /etc/passwd # cut -d":" -f2-4,6,10 < /etc/passwd 要获取除一个列之外的所有列的值,需要使用以下命令。例如,如果我们需要选择所有列而不是6列。 # cut -d":" --complement -s -f6 < /etc/passwd 3、从文件中选择单个字符 除了字段之外,我们还可以根据单个字符从文件中选择值,而使用字符则不需要指定分隔符。 #cut -c1 </ etc / passwd r b d a l s s 同样,我们也可以指定多个逗号分隔字符或字符范围。 #cut -c1,2,3,6,7 </ etc / passwd #cut -c1-3,6,7 </ etc / passwd 本篇文章到这里就已经全部结束了,
Linux tail命令显示一个或多个文件或管道数据的最后一部分(默认为10行);可用于实时监控文件更改。下面本篇文章就来就来给大家介绍一下如何使用Linux tail命令,希望对大家有所帮助。 Linux tail命令 tail命令显示一个或多个文件或管道数据的最后一部分(默认为10行);可用于实时监控文件更改。tail命令最常见的用途之一就是监视和分析日志和其他随时间变化的文件,通常与grep等其他工具结合使用。 基本语法: tail [OPTION]... [FILE]... OPTION: tail选项,下面我们来看看最常见的一些选项。 ● -n(–lines)选项:指定要显示的行数 ● -c(–bytes)选项:指定要显示的特定字节数 ● -f(–follow)选项:监视文件的更改 FILE:零个或多个输入文件名。如果未指定FILE,或者FILE为-,则tail将读取标准输入。 如何使用tail命令? 在没有任何选项的情况下使用最简单的形式时,tail命令将显示最后10行。 tail filename.txt 如何显示特定行数? 可以使用-n(–lines)选项来指定要显示的行数: tail -n <NUMBER> filename.txt 也可以省略字母n,只使用连字符(-)和数字(它们之间没有空格)。 要显示名为filename.txt的文件的最后50行,需要使用: tail -n 50 filename.txt 以下示例将显示与上述命令相同的结果: tail -50 filename.txt 如何显示特定的字节数? 可以使用-c(–bytes)选项来显示特定的字节数: tail -c <NUMBER> filename.txt 例如,要显示文件filename.txt中最后500个字节的数据,我们可以使用: tail -c 500 filename.txt 还可以在数字后面使用乘数后缀来指定要显示的字节数。 b乘以512,kB乘以1000,K乘以1024,MB乘以1000000,M乘以1048576,依此类推。 以下命令将显示文件filename.txt的最后两千字节(2048): tail -c 2k filename.txt 如何查看文件以进行更改? 要监视文件的更改,需要使用-f(–follow)选项: tail -f filename.txt -f选项对于监视日志文件特别有用。 例如,要显示/var/log/nginx/error.log文件的最后10行,并监视该文件是否有要使用的更新: tail -f /var/log/nginx/error.log 要在监视文件时中断tail命令,需要按ctrl+c。 要在重新创建文件时继续监视该文件,需要使用-f选项: tail -F filename.txt -f选项在tail命令跟随旋转的日志文件时非常有用。当与-f选项一起使用时,tail命令将在文件再次可用时重新打开。 如何显示多个文件 如果有多个文件作为tail命令的输入提供,它将显示每个文件的最后十行。 tail filename1.txt filename2.txt 用户可以使用与显示单个文件时相同的选项。 例如:显示文件filename1.txt和filename2.txt的最后20行 tail -c 20 filename1.txt filename2.txt 如何和其他命令一起使用? tail命令可以与其他命令结合使用,例如,要监视Apache访问日志文件,并且只显示包含IP地址192.168.42.12的行,可以使用: tail -f /var/log/apache2/access.log | grep 192.168.42.12 或者显示按CPU使用率排序的前十个运行进程: ps aux | sort -nk +3 | tail -5 相关视频教程推荐:《Linux教程》 以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。
公共IP用于计算机之间通过Internet进行通信。使用公共IP运行的计算机可以使用Internet访问世界各地。所以我们可以说它是互联网上计算机的身份。 现在的问题是,我们如何知道我们的公共知识产权?对于具有GUI的计算机,可以使用类似这样的Web工具轻松获得IP,但如何获得仅具有终端访问权限的计算机的公共IP。 解决方案:可以使用以下命令之一用Linux终端查找系统的公共IP。这些在shell脚本中也很有用。 使用Linux命令查找公共IP 命令1: 使用dig命令查找公共IP地址。dig命令是一个DNS查找实用程序,用于Linux系统通过连接到OpenDNS服务器来查找公共IP地址。 $ dig +short myip.opendns.com @resolver1.opendns.com 命令2 : 使用wget命令获取公共IP地址,如下例所示。 $ wget http://ipecho.net/plain -O - -q ; echo 命令3,4和5: 使用curl命令获取公共地址。 $ curl ipecho.net/plain; echo $ curl icanhazip.com $ curl ifconfig.me 在shell脚本中获取公共IP 我们可以简单地在shell脚本中使用以下命令获取计算机的公共IP并将它们存储在变量中,以便在shell脚本的任何位置使用。 #!/bin/bash PUBLIC_IP=`wget http://ipecho.net/plain -O - -q ; echo` echo $PUBLIC_IP 本篇文章到这里就已经全部结束了,