如果您想了解JS-如何正确返回mysql查询值和mysql返回json的知识,那么本篇文章将是您的不二之选。我们将深入剖析JS-如何正确返回mysql查询值的各个方面,并为您解答mysql返回json
如果您想了解JS - 如何正确返回 mysql 查询值和mysql返回json的知识,那么本篇文章将是您的不二之选。我们将深入剖析JS - 如何正确返回 mysql 查询值的各个方面,并为您解答mysql返回json的疑在这篇文章中,我们将为您介绍JS - 如何正确返回 mysql 查询值的相关知识,同时也会详细的解释mysql返回json的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- JS - 如何正确返回 mysql 查询值(mysql返回json)
- Angular 4如何正确返回void observable
- linux 环境下如何正确设置 MYSQL 目录权限
- linux中如何正确的修改MySQL密码
- Mysql LIMIT如何正确对其进行优化
JS - 如何正确返回 mysql 查询值(mysql返回json)
您正在使用基于回调的方法,这完全没问题。您也可以使用承诺。使用回调方法,您可以返回错误和查询结果。第一个参数可以是错误,第二个参数可以是返回值
export function getPlayerPermission(socialid,callback) {
connection.query('SELECT permission FROM permissions WHERE socialid=?',socialid,function(err,rows){
if(err){
console.log(err);
callback(err);
return;
}
callback(null,rows[0].permission);
});
}
现在在您的另一个文件中,您可以按如下方式调用该函数
chat.registerCmd('getid',(player,arg) => {
db.getPlayerPermission(player.socialId,function(dbErr,permission) {
// since JS is asynchronous,you need to be in callback function to execute the rest of the code after you get the data from first query
if (dbErr) {
console.log(dbErr);
return;
}
// Now permission variable has data returned from the query
PermissionValue = permission;
var vname;
var name;
if(arg.length <= 1) {
chat.send(player,'/getid [Vorname] [Name]');
return;
}
vname = arg[0];
name = arg[1];
db.getCharIdByName(vname,name,function(charid){
chat.send(player,'Die ID des Spielers ist: ' + charid);
});
});
});
Angular 4如何正确返回void observable
这个方法有3个条件,第一个和第二个条件进行get调用,但是第三个条件不能做任何事情,在这种情况下我也必须返回一个observable,因为这个方法是.flatmap运算符的第一部分,所以要链接flatmap的第二部分我需要从第一部分开始观察.
我尝试:返回新的Observable< void>();但我有这个错误:
ERROR TypeError: Cannot read property ‘subscribe’ of undefined
这是必须调用服务来加载数据的初始方法.
loadModelData() { this.customerService.getModelDetail(this.code) .subscribe(response => { this.selected = response.body as Customer; }); } }
这是必须链接2个调用的服务方法.
getModelDetail(code) { const params = new HttpParams().set('projection','withBalance'); return this.endPointUrlService.loadMaps(this.entityLink) .flatMap((res) => { return this.http.get(this.endPointUrlService.cutLinks( this.endPointUrlService.map.get('customers')) + '/' + code,{observe: 'response',params: params}) .map((response) => <any>response); }) }
这是来自名为endPointUrlService的支持服务的方法,checkIfMapIsReady()是必须在第三种情况下返回void observable的方法
loadMaps(entityLink: EntityLink[]): Observable<void> { console.log(entityLink); for (const i in entityLink) { if (entityLink.hasOwnProperty(i)) { return this.checkIfMapIsReady(entityLink[i].name,entityLink[i].searchMap,entityLink[i].endPoints[0]) } } } public checkIfMapIsReady(modelName: string,mapName: string,endPoints: string) { if (this.map.get(modelName) === undefined) { console.log('endpoint url service All maps undefined ' + modelName); return this.getLinks(modelName,this.mapNames.get(mapName),false) } else { console.log('endpoint url service Populate only ' + mapName); if (this.mapNames.get(mapName).get(endPoints) === undefined) { return this.getLinks(modelName,true) } else { return new Observable<void>(); } } }
注意,下游flatMap(res => …)和subscribe()不会触发.
既然你没有使用res,我认为这是理想的效果?
为了更好地衡量,请返回类型Observable< any>.
我认为下面在逻辑上等同于发布的checkIfMapIsReady(),
public checkIfMapIsReady(modelName: string,endPoints: string) { const map = this.map.get(modelName); const name = this.mapNames.get(mapName); const endPointCheck = name ? name.get(endPoints) : null; const links = !endPointCheck ? this.getLinks(modelName,name,!!map) // !! gives boolean true or false : Observable.empty(); const msg = !map ? 'endpoint url service All maps undefined ' + modelName : 'endpoint url service Populate only ' + mapName console.log(msg); return links; );
linux 环境下如何正确设置 MYSQL 目录权限
设置目录权限的原则是软件和数据分开,具体如下:1. 将 mysql 安装在单独的用户下
2. 安装时,以 root 用户进行安装,mysql 的软件默认都为 root 权限
3. 安装完毕后,将数据目录权限设置为实际运行 mysql 的用户权限,比如:
Chown –R mysql:mysql /home/mysql/data
linux中如何正确的修改MySQL密码
本文章是在介绍在linux系统中出现忘记了mysql密码的解决办法,有碰到此类问题的朋友可来看看找回密码的方法。
如果你是没有忘记密码修改mysql密码的方法有多,如下面的
UPDATE user 语句(回目录)
这种方式必须是先用root帐户登入mysql,然后执行:
1.如果您没有忘记密码的情况下,可以通过UPDATE直接编辑user表来修改密码:进入
代码如下 | 复制代码 |
mysql -u rootmysql> use mysql; |
忘记了密码
在使用skip-grant-tables参数的同时,还要加上skip-networking参数:
代码如下 | 复制代码 |
shell> mysqld_safe --skip-grant-tables --skip-networking & |
接着使用SQL重置密码后,记得去掉skip-networking,以正常方式重启MySQL服务:
代码如下 | 复制代码 |
shell> /etc/init.d/mysqld restart |
上面的方法需要重启两次服务,实际上还能更优雅一点,重启一次即可:
首先需要把用到的SQL语句保存到一个文本文件里(/path/to/init/file):
代码如下 | 复制代码 |
UPDATE `mysql`.`user` SET `Password`=PASSWORD(''yourpassword'') WHERE `User`=''root'' AND `Host`= ''127.0.0.1''; FLUSH PRIVILEGES; |
接着使用init-file参数启动MySQL服务,
代码如下 | 复制代码 |
shell> /etc/init.d/mysql stop shell> mysqld_safe --init-file=/path/to/init/file & |
此时,密码就已经重置了,最后别忘了删除文件内容,免得泄露密码。
如果上面办法你无法找回密码可参考下面办法
如果您已经忘记密码:
代码如下 | 复制代码 |
# /etc/init.d/mysql stop 1、结束当前正在运行的mysql进程。 mysql> use mysql; |
4、修改root用户口令。
代码如下 | 复制代码 |
Reading table information for completion of table and column names Database changed mysql> exit # /etc/init.d/mysql restart 5、结束mysql安全模式,用正常模式运行mysql。 |
6、试试你新修改的口令
代码如下 | 复制代码 |
mysql> flush privileges; mysql> quit |
Mysql LIMIT如何正确对其进行优化
以下的文章主要是对Mysql LIMIT简单介绍,我们大家都知道LIMIT子句一般是用来限制SELECT语句返回的实际行数。LIMIT取1个或是2个数字参数,如果给定的是2个参数,第一个指定要返回的第一行的偏移量,第二个指定返回行的最大数目。 初始行的偏移 量是0(不是1)
以下的文章主要是对
初始行的偏移
量是0(不是1)。
<ol><li><span><span>mysql</span><span>></span><span> select * from table LIMIT 6,10; </span></span></li></ol>
得到第7-16行
如果给定一个参数,它指出返回行的最大数目。
<ol><li><span><span>mysql</span><span>></span><span> select * from table LIMIT 5; </span></span></li></ol>
得到前5行
换句话说,LIMIT n等价于Mysql LIMIT 0,n。MYSQL的优化是非常重要的。其他最常用也最需要优化的就是limit。mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。同样是取10条数据
<ol><li><span><span>select * from yanxue8_visit limit 10000,10 </span></span></li></ol>
和
<ol><li><span><span>select * from yanxue8_visit limit 0,10 </span></span></li></ol>
就不是一个数量级别的。
网上也很多关于limit的五条优化准则,都是翻译自mysql手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。原文地址:http://www.zhenhua.org/article.asp?id=200(下面附有原文)
文中不是直接使用limit,而是首先获取到offset的id然后直接使用Mysql limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。(测试环境win2033+p4双核(3GHZ) +4G内存 mysql 5.0.19)
1、offset比较小的时候。
<ol><li><span><span>select * from yanxue8_visit limit 10,10 </span></span></li></ol>
多次运行,时间保持在0.0004-0.0005之间
<ol> <li><span><span>Select * From yanxue8_visit Where vid </span><span>></span><span>=( </span></span></li> <li><span>Select vid From yanxue8_visit Order By vid limit 10,1 </span></li> <li><span>) limit 10 </span></li> </ol>
多次运行,时间保持在0.0005-0.0006之间,主要是0.0006结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。
2、offset大的时候
<ol><li><span><span>select * from yanxue8_visit limit 10000,10 </span></span></li></ol>
多次运行,时间保持在0.0187左右
<ol> <li><span><span>Select * From yanxue8_visit Where vid </span><span>></span><span>=( </span></span></li> <li><span>Select vid From yanxue8_visit Order By vid limit 10000,1 </span></li> <li><span>) limit 10 </span></li> </ol>
多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。
附上原文:
select * from table LIMIT 5,10; #返回第6-15行数据
select * from table LIMIT 5; #返回前5行
select * from table LIMIT 0,5; #返回前5行
性能优化:
基于MySQL5.0中Mysql limit的高性能,我对数据分页也重新有了新的认识.
<ol> <li><span><span>Select * From cyclopedia Where ID</span><span>></span><span>=( </span></span></li> <li><span>Select Max(ID) From ( </span></li> <li><span>Select ID From cyclopedia Order By ID limit 90001 </span></li> <li><span>) As tmp </span></li> <li><span>) limit 100; </span></li> <li> <span>Select * From cyclopedia Where ID</span><span>></span><span>=( </span> </li> <li><span>Select Max(ID) From ( </span></li> <li><span>Select ID From cyclopedia Order By ID limit 90000,1 </span></li> <li><span>) As tmp </span></li> <li><span>) limit 100; </span></li> </ol>
同样是取90000条后100条记录,第1句快还是第2句快?
第1句是先取了前90001条记录,取其中最大一个ID值作为起始标识,然后利用它可以快速定位下100条记录
第2句择是仅仅取90000条记录后1条,然后取ID值作起始标识定位下100条记录
第1句执行结果.100 rows in set (0.23) sec
第2句执行结果.100 rows in set (0.19) sec
很明显第2句胜出.看来limit好像并不完全像我之前想象的那样做全表扫描返回limit offset+length条记录,这样看来limit比起MS-SQL的Top性能还是要提高不少的.
其实第2句完全可以简化成
<ol> <li><span><span>Select * From cyclopedia Where ID</span><span>></span><span>=( </span></span></li> <li><span>Select ID From cyclopedia limit 90000,1 </span></li> <li><span>)limit 100; </span></li> </ol>
直接利用第90000条记录的ID,不用经过Max运算,这样做理论上效率因该高一些,但在实际使用中几乎看不到效果,因为本身定位ID返回的就是1条记录,Max几乎不用运作就能得到结果,但这样写更清淅明朗,省去了画蛇那一足.
可是,既然MySQL有limit可以直接控制取出记录的位置,为什么不干脆用Select * From cyclopedia limit 90000,1呢?岂不更简洁?
这样想就错了,试了就知道,结果是:1 row in set (8.88) sec,怎么样,够吓人的吧,让我想起了昨天在4.1中比这还有过之的"高分".Select * 最好不要随便用,要本着用什么,选什么的原则, Select的字段越多,字段数据量越大,速度就越慢. 上面2种分页方式哪种都比单写这1句强多了,虽然看起来好像查询的次数更多一些,但实际上是以较小的代价换取了高效的性能,是非常值得的.
第1种方案同样可用于MS-SQL,而且可能是最好的.因为靠主键ID来定位起始段总是最快的.
<ol> <li><span><span>Select Top 100 * From cyclopedia Where ID</span><span>></span><span>=( </span></span></li> <li><span>Select Top 90001 Max(ID) From ( </span></li> <li><span>Select ID From cyclopedia Order By ID </span></li> <li><span>) As tmp </span></li> <li><span>) </span></li> </ol>
但不管是实现方式是存贮过程还是直接代码中,瓶颈始终在于MS-SQL的TOP总是要返回前N个记录,这种情况在数据量不大时感受不深,但如果成百上千万,效率肯定会低下的.相比之下MySQL的Mysql limit就有优势的多,执行:
<ol> <li><span><span>Select ID From cyclopedia limit 90000 </span></span></li> <li><span>Select ID From cyclopedia limit 90000,1 </span></li> </ol><br><br>
而MS-SQL只能用Select Top 90000 ID From cyclopedia 执行时间是390ms,执行同样的操作时间也不及MySQL的360ms.
关于JS - 如何正确返回 mysql 查询值和mysql返回json的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Angular 4如何正确返回void observable、linux 环境下如何正确设置 MYSQL 目录权限、linux中如何正确的修改MySQL密码、Mysql LIMIT如何正确对其进行优化等相关知识的信息别忘了在本站进行查找喔。
本文标签: