鍍金池/ 問(wèn)答/ 數(shù)據(jù)庫(kù)問(wèn)答
怪痞 回答

不知道你的db是怎么設(shè)置的,打印一下執(zhí)行的sql語(yǔ)句.

看你的數(shù)據(jù)庫(kù)設(shè)置應(yīng)該是沒(méi)有問(wèn)題的。因?yàn)槲以谑褂胓orm的時(shí)候是開(kāi)啟了數(shù)據(jù)庫(kù)連接池,因此我沒(méi)有在一個(gè)地方專(zhuān)門(mén)對(duì)db進(jìn)行close。我不知道你代碼里面db的生命周期是怎么樣的。建議你在調(diào)試環(huán)境中使用db = db.Debug(),可以打印要執(zhí)行的sql語(yǔ)句。此外,還可以在你的代碼中通過(guò)err := db.Save(&like).Error, 檢出err查看你程序的執(zhí)行是否有問(wèn)題.

======補(bǔ)充================

package database

var db *gorm.DB

func init() {
    var dbSrc = "username:password.@(127.0.0.1:3309)/gotest?charset=utf8&parseTime=True&loc=Local"
    newDb, err := gorm.Open("mysql", dbSrc)
    if err != nil {
        panic(err)
    }

    db = newDb

    sqlDb := db.DB()
    sqlDb.SetMaxOpenConns(100)
    sqlDb.SetMaxIdleConns(15)

    if gin.IsDebugging() {
        db = db.Debug()
    }
}

func DB() *gorm.DB {
    return db.New()
}

一般情況下我會(huì)將數(shù)據(jù)庫(kù)的初始化工作放到一個(gè)init中,然后在包含main函數(shù)的文件中導(dǎo)入這個(gè)包(package),這里就舉個(gè)例子:

import _ "database"

這樣在程序啟動(dòng)的時(shí)候, 就會(huì)會(huì)自動(dòng)初始化db(而且不用擔(dān)心會(huì)初始化多次)。然后在需要使用的地方只需要調(diào)用

db := database.DB()

這樣可以拿到一個(gè)db對(duì)象。

孤酒 回答

mongorestore是個(gè)獨(dú)立的可執(zhí)行程序,請(qǐng)不要在進(jìn)入mongodb的命令行狀態(tài)中執(zhí)行它!
單獨(dú)打開(kāi)一個(gè)命令行窗口執(zhí)行你的命令即可。

心癌 回答

沒(méi)看懂你要啥...?

這是你想要的么?

insert into table001 (id, p_id, name, length)  values
(110,1,'網(wǎng)絡(luò)銷(xiāo)售',10),
(111,1,'區(qū)域銷(xiāo)售',11),
(112,1,'渠道專(zhuān)員',12),
(113,1,'渠道經(jīng)理/總監(jiān)',13),
(114,1,'客戶(hù)經(jīng)理/主管',14),
(115,1,'大客戶(hù)經(jīng)理',15),
(116,1,'團(tuán)購(gòu)業(yè)務(wù)員/經(jīng)理',16),
(117,1,'會(huì)籍顧問(wèn)',17),
(201,2,'客服專(zhuān)員/助理',18),
(202,2,'客服經(jīng)理/主管',19),
(203,2,'客服總監(jiān)',20);

EDITED

上面的sql是通過(guò)下面的腳本生成的

var arrays = new Array();

var sorts= new Array();
var jobs="銷(xiāo)售 銷(xiāo)售代表 銷(xiāo)售助理 銷(xiāo)售經(jīng)理/主管 銷(xiāo)售總監(jiān) 電話(huà)銷(xiāo)售 銷(xiāo)售支持 汽車(chē)銷(xiāo)售 醫(yī)藥代表 醫(yī)療器械銷(xiāo)售 網(wǎng)絡(luò)銷(xiāo)售 區(qū)域銷(xiāo)售 渠道專(zhuān)員 渠道經(jīng)理/總監(jiān) 客戶(hù)經(jīng)理/主管 大客戶(hù)經(jīng)理 團(tuán)購(gòu)業(yè)務(wù)員/經(jīng)理 會(huì)籍顧問(wèn)\n"+
"客服 客服專(zhuān)員/助理 客服經(jīng)理/主管 客服總監(jiān) 售前/售后服務(wù) 電話(huà)客服 客戶(hù)關(guān)系管理\n"+
"貿(mào)易/采購(gòu) 外貿(mào)專(zhuān)員/助理 外貿(mào)經(jīng)理/主管 采購(gòu)員 采購(gòu)助理 采購(gòu)經(jīng)理/總監(jiān) 報(bào)關(guān)員 商務(wù)專(zhuān)員/經(jīng)理 買(mǎi)手\n"+
"超市/百貨/零售 店員/營(yíng)業(yè)員 收銀員 促銷(xiāo)/導(dǎo)購(gòu)員 理貨員/陳列員 防損員/內(nèi)保 店長(zhǎng)/賣(mài)場(chǎng)經(jīng)理 招商經(jīng)理/主管 奢侈品業(yè)務(wù) 品類(lèi)管理 食品加工/處理 督導(dǎo)\n"+
"市場(chǎng)/媒介/公關(guān) 市場(chǎng)專(zhuān)員/助理 市場(chǎng)經(jīng)理/總監(jiān) 市場(chǎng)拓展 市場(chǎng)調(diào)研 市場(chǎng)策劃 媒介專(zhuān)員/助理 媒介經(jīng)理/主管 會(huì)務(wù)會(huì)展專(zhuān)員/經(jīng)理 品牌專(zhuān)員/經(jīng)理 公關(guān)專(zhuān)員/助理 公關(guān)經(jīng)理/主管 企劃經(jīng)理/主管\n"+
"廣告/會(huì)展/咨詢(xún) 廣告文案 創(chuàng)意指導(dǎo)/總監(jiān) 廣告設(shè)計(jì)/制作 廣告創(chuàng)意 媒介策劃/管理 會(huì)展策劃/設(shè)計(jì) 婚禮策劃師 咨詢(xún)顧問(wèn) 咨詢(xún)經(jīng)理/主管 客戶(hù)主管/專(zhuān)員 企業(yè)策劃\n"+
"美術(shù)/設(shè)計(jì)/創(chuàng)意 美編/美術(shù)設(shè)計(jì) 服裝設(shè)計(jì) 家具/家居用品設(shè)計(jì) 平面設(shè)計(jì) 美術(shù)指導(dǎo) 店面/陳列/展覽設(shè)計(jì) 工藝/珠寶設(shè)計(jì) 多媒體/動(dòng)畫(huà)設(shè)計(jì) 產(chǎn)品/包裝設(shè)計(jì) 裝修裝潢設(shè)計(jì) CAD設(shè)計(jì)/制圖";

var sa = jobs.split("\n");

var k=0;
for(var j=0; j<sa.length; j++){
    names = sa[j].split(" ");
    sorts[j] = new Array(""+(j+1), names[0]);   

    for(var m=0; m<names.length-1;m++)
    arrays[k++] = new Array(""+(j+1),(j+1)*100+(m+1), names[m+1])

}


function makesql(arr){
        
        var a;       
        console.log("insert into table001 (id, p_id, name, length)  values");
        for(var i=0; i<arr.length; i++){//a為index
            item =arr[i];
            var parentid=0;
            var name=item[1];
            var classid=item[0];

            if(item.length == 3){
              parentid= item[0];
              classid=item[1];
              name =item[2];
            } 
            console.log("("+classid+","+parentid+",'"+name+"',"+(i+1)+")"+(i==arr.length-1?";":","));
        }
    
}

//console.log("delete from table001;");

makesql(sorts);
makesql(arrays);

不需要什么開(kāi)發(fā)環(huán)境, 打開(kāi)瀏覽器->按F12打開(kāi)開(kāi)發(fā)者工具-> 切到console ->粘貼->按Enter. SQL就生成了.

當(dāng)然,存成文件用nodejs執(zhí)行更好一些.

貓小柒 回答

jdbc URL里加上rewriteBatchedStatements=true這個(gè)參數(shù)就可以了。

或者,在程序?qū)懗梢粭lINSERT插入多行數(shù)據(jù)的形式,不用依賴(lài)jdbc的batch功能,這樣是最靠譜的,也適合移植到MySQL以外的數(shù)據(jù)庫(kù)。

安于心 回答
student.aggregate([
    {
        $match:{stunum:'1'}
    },{
        $unwind:{
            path:'$course',
            preserveNullAndEmptyArrays: true,
        }
    },{
        $match:{courseName:'高等數(shù)學(xué)',teacher:'李四'}
    },{
        $project:{
            course:1
        }
    }
])

這樣應(yīng)該會(huì)得到

course:{ 
    _id: 5b7a97508e00501ceaf66032,
    teacher: '李四',
    courseName: '高等數(shù)學(xué)'
}

如果只是想修改值,那就不需要取出來(lái),直接修改就可以了

student.update(
    {stunum:'1'},
    {
        $set:{'course.$[element].teacher':'張三'}
    },
    {arrayFilters:[{'element.teacher':'李四'}]}
)
兮顏 回答
//文章的  評(píng)論的改一下表就好了
select tb_user.* from tb_article join tb_user on tb_user.id=tb_article.id order by tb_article.create_time desc limit 5;
//一起?效率...就沒(méi)怎么考慮233.....
SELECT
    a.uid,
    username
FROM
    (
        (
            SELECT
                `uid`,
                `create_time` AS `time`
            FROM
                tb_article
        )
        UNION ALL
            (
                SELECT
                    `uid`,
                    `create_time` AS time
                FROM
                    tb_comment
            )
    ) AS a
JOIN tb_userAS b ON a.uid = b.uid
GROUP BY
    a.uid
ORDER BY
    a.time DESC
LIMIT 5
情未了 回答

1、注意看數(shù)字8的表頭key_len,說(shuō)的是使用索引字段的長(zhǎng)度。
2、Using tempory, Using filesort是受order by語(yǔ)句的影響,你可以去掉order by再看一下執(zhí)行計(jì)劃。
3、eo表使用覆蓋索引是合理的,因?yàn)樗饕呀?jīng)包含了查詢(xún)所需的所有數(shù)據(jù)。

艷骨 回答

所以是查詢(xún)的sql語(yǔ)句有問(wèn)題了,你這應(yīng)該分成兩個(gè)查詢(xún):一個(gè)查詢(xún)最外面的那個(gè)while的數(shù)據(jù),一個(gè)查詢(xún)藍(lán)色圖片的while的數(shù)據(jù)
查詢(xún)最外層的數(shù)據(jù)是一個(gè)List,然后在里面一個(gè)字段存圖片的List信息
-- 不懂PHP ,但是意思相通

空痕 回答

寫(xiě)上端口!命令行默認(rèn)3306,sequel pro并不會(huì)給你默認(rèn)

有你在 回答

1,本地能ping到這臺(tái)主機(jī)嗎?
2,本地能telnet通這臺(tái)主機(jī)的3306端口嗎?
3,把bind-address = 127.0.0.1換成bind-address = 0.0.0.0試試呢?

久舊酒 回答

分層設(shè)計(jì)
路由和模型之間加一層控制器來(lái)處理業(yè)務(wù)邏輯

//以文章為例,文章控制器
'use strict';
import ArticleModel from '../../models/article';
class Article {
    constructor() {
      //...
    }
    async getArticleById(req, res, next) {
        //查找
       let article = await ArticleModel.findOne(...);
    }

    async addArticle(req, res, next) {
       //新增
    }
    // 更新文章需要更新文章評(píng)論數(shù)
    // 刪除文章
    async deleteArticle(req, res, next) {
        //刪除
    }
    // 更新文章
    async updateArticle(req, res, next) {
        // 更新
        //這里可以先查找在更新,多次調(diào)用
    }
}
export default new Article();
//文章路由
'use strict';
import express from 'express';
import Article from '../controllers/blog/article';
const router = express.Router();
router.get('/article/:id',  Article.getArticleById);
router.post('/article/add',  Article.addArticle);
router.post('/article/update',  Article.updateArticle);
router.post('/article/delete',  Article.deleteArticle);
export default router

我之前看到的一個(gè)koa+mysql寫(xiě)的也可以參考下,原理類(lèi)似
koa-blog

澐染 回答

clipboard.png

我這個(gè)是可以的。flask-sqlachemy遷移只能添加字段,不能修改和刪除的??聪履愕膍odels.py中表和數(shù)據(jù)庫(kù)表是否一致。

情未了 回答

首先,你要確定是你用的MySQL客戶(hù)端截?cái)嗟?,還是MySQL返回時(shí)就截?cái)嗟??測(cè)試方法很簡(jiǎn)單:

SELECT LENGTH(GROUP_CONCAT(id)) ...

如果是后者,可以考慮在配置(my.cnf或my.ini)中把group_concat_max_len設(shè)得大些,或者每次連接時(shí)執(zhí)行SET SESSION group_concat_max_len = 1000000。

未命名 回答

websockethttp輪詢(xún),舊的瀏覽器不支持websocket

不妨 brew install mongodb, 簡(jiǎn)單省事,哈哈哈

或者裝個(gè) docker,docker pull mongodb ,不爽就刪了換個(gè)鏡像,簡(jiǎn)單省心

然后把 對(duì)應(yīng)端口(默認(rèn)27017吧)expose 出來(lái),用對(duì)應(yīng)語(yǔ)言的驅(qū)動(dòng)就可以使用了。

直接用的話(huà),命令行 mongod, 再起一個(gè)界面運(yùn)行 mongo 就可以使用了 db.getCollection('xxx').find({}) 等等,自己上網(wǎng)找找就有了

短嘆 回答

事務(wù)會(huì)話(huà)期間能不能看到改動(dòng)和事務(wù)的隔離級(jí)別有關(guān).

參見(jiàn)官方文檔:
https://dev.mysql.com/doc/ref...

默認(rèn)情況下是REPEATABLE READ, 可重復(fù)讀,即在事務(wù)期間的多次讀取返回同樣的結(jié)果.

BTW:
mysql定義的四種隔離級(jí)別沒(méi)有 repetable commit這個(gè).

官網(wǎng)上只有

level:

   REPEATABLE READ
   READ COMMITTED
   READ UNCOMMITTED
   SERIALIZABLE

失魂人 回答

SELECT i.* FROM c_item i, c_item_attr ia WHERE i.item_id = ia.item_id AND ia.attr_id IN (4, 7, 14) GROUP BY i.item_id having count(i.item_id)>2