鍍金池/ 問答/ 數(shù)據(jù)庫問答
嘟尛嘴 回答

mysql默認(rèn)語句最大長度是1m,2000條問題不大。但是你可以選擇用熟悉的語言來拼sql語句,從文件讀userid,這樣支持更多的userid,效率更高

笨小蛋 回答

應(yīng)用加鎖解決不了程序分布式部署的問題。

這有點(diǎn)類似隊(duì)列里的出隊(duì)列。A取的了一條消息, 該消息就不能被B取到。這種并發(fā)控制用mongo的話,我一般醬紫:

  1. 記錄加上一個(gè)處理狀態(tài)字段,如processStatus, 默值認(rèn)為0未處理 1處理中 2處理成功 3處理失敗 4重試。
  2. 利用findAndModify具有原子性操作的特性。
db.foo.findAndModify({
    query:{processStatus:[0,4]},
    update: { $set: { processStatus: 1} },
});
// 再根據(jù)處理結(jié)果 置processStatus為成功、失敗或者重試。

參考文檔:mongo的原則性和事務(wù)性

墨小羽 回答

時(shí)間分組,排序字段不清,姑且按price排序吧

select 
    mtime,sum(price),sum(number),
    substring_index(group_concat(price order by price),',',1) min_price,
    substring_index(group_concat(price order by price),',',-1) max_price
from table group by mtime;
野橘 回答

主要就是(?=),這個(gè)表示正向先行斷言,鏈接

你這個(gè)例子里面,就是找到一個(gè)位置,這個(gè)位置是數(shù)字,同時(shí)后面可以匹配括號里面的表達(dá)式,比如你匹配a1a也可以的。

尋仙 回答

PHP里有個(gè)叫mysql_escape_string的函數(shù)

愚念 回答

應(yīng)該是數(shù)據(jù)庫編碼和php編碼不同造成的,sqlserver一般是gbk編碼,php一般是utf-8編碼,最后設(shè)置下php那邊的編碼,比較改代碼比改已經(jīng)運(yùn)行的數(shù)據(jù)庫靠譜

樓上的想法應(yīng)該是并發(fā)的請求數(shù)。
1。用await等待下一個(gè)請求之前,還沒有結(jié)束這一次鏈接。那么就存在多個(gè)請求使用單一mysql鏈接(這里是指全局變量)
2。單例模式給你的體驗(yàn)就是和全局變量差不多,但是實(shí)際上單例不同于變量,單例類始終占用同樣內(nèi)存地址,1號請求和2號請求同樣是用一個(gè)單例類。
3。可以簡單理解為,如果你是全局變量,那么1號請求在使用global進(jìn)行select的時(shí)候,2號也要使用global進(jìn)行select

擱淺 回答

你直接存的時(shí)候$value = json_encode($value)弄成json格式存不行嗎。。。。只不過這樣取出來的時(shí)候要json_decode()解析一下

吢涼 回答

嗯,我覺得當(dāng)然能夠自動(dòng)生成migration比較好,不過寫好model之后,改migration也很容易了。
參考這個(gè)

比如想加一個(gè)test列,只要up中queryInterface.addColumn(),down中queryInterface.removeColumn(),

練命 回答

樓主的問題

  1. 限制同一用戶在不同瀏覽器登陸的功能,利用session這個(gè)方案是否合理?-- 合理
  2. 我理解每個(gè)瀏覽器向后端發(fā)送請求后,都會(huì)形成相應(yīng)的session保存起來,查詢session數(shù)據(jù)一般是怎樣實(shí)現(xiàn)的?例如,怎樣查詢包含”user“的session的”id“ -- 這個(gè)是session store的實(shí)現(xiàn)細(xì)節(jié),不同的store不一樣,一般是存在數(shù)據(jù)庫里(mysql、mongo、redis等)。session id是可以自定義的,只要能跟用戶名關(guān)聯(lián)起來就行
  3. 怎樣實(shí)現(xiàn)后端主動(dòng)向前端發(fā)起請求?比如用戶A未向后端發(fā)起請求的情況下,后端直接修改用戶A的cookie,使之過期? -- 這里在服務(wù)端清除session即可,有官方的api store.destroy(sid, callback)。

怎么限制同個(gè)用戶不能多個(gè)地方同時(shí)登錄

實(shí)現(xiàn)思路樓主應(yīng)該是有的,只是實(shí)現(xiàn)細(xì)節(jié)不清楚:

  1. 用戶登錄,存儲session。每個(gè)用戶的session對應(yīng)一個(gè)id,假設(shè)就是用戶名。
  2. 用戶再次登錄,檢測當(dāng)前用戶是否已經(jīng)登錄 -> 檢測該用戶名,是否已經(jīng)存在session。

樓主不清除的應(yīng)該是,怎么把 用戶名、session id關(guān)聯(lián)起來,包括怎么在有用戶名的情況下,查詢到該用戶名對應(yīng)的session。

如果用express-session,可以這么實(shí)現(xiàn)。

genid選項(xiàng):生成session id

genid返回的是session對應(yīng)的id,樓主根據(jù)實(shí)際情況進(jìn)行自定義。

app.use(session({
  genid: function (req) {
    return req.query.usrname; // 生成session的id
  }
}));

session檢測

用戶再次登錄,通過session id 去檢測session是否存在,以此判斷用戶是否已登錄。

app.use(function (req, res, next) {
  req.sessionStore.get(req.query.usrname, function (error, session) {
    // 如果session存在,表示用戶已在其他地方登錄
  });
});
命多硬 回答

我就是使用的 MariaDB , Typecho 和 WordPress 基本上都是默認(rèn)支持的!不需要你有啥修改的!

https://www.imydl.tech

https://www.imydl.com

舊螢火 回答
netstat -antp|grep 3306

上圖

阿里云的服務(wù)器?那你得到服務(wù)器安全組找找

瞄小懶 回答

1、建表語句,每次都刪除再創(chuàng)建,所以只有最后一條記錄,建議提前把表建好,不要放在這里建表,或者做一下是否存在該表就不創(chuàng)建,不要?jiǎng)h除表。
2、命令行,需要設(shè)置字符集

set names utf8;
撿肥皂 回答
INSERT INTO b(`name`,`aa`,`type`)
SELECT `name`, `aa`, 0
FROM b AS c
WHERE `type`=1
ON DUPLICATE KEY UPDATE b.aa = CONCAT(b.aa,c.aa)

這個(gè)意思?

+----+------+--------------------------+------+
| id | name | aa                       | type |
+----+------+--------------------------+------+
| 4  | a    | {2017,01,01}{2017,02,01} | 0    |
| 5  | a    | {2017,02,01}             | 1    |
| 7  | b    | {2017,01,11}{2017,01,01} | 0    |
| 8  | b    | {2017,01,01}             | 1    |
| 16 | c    | {2017,01,01}3            | 1    |
| 17 | c    | {2017,01,01}3            | 0    |
+----+------+--------------------------+------+
囍槑 回答

ascii('ok') ascii(col_name)

未命名 回答

SELECT * FROM product WHERE ID > = (select id from product limit 1000000, 1) limit 20 ;

喵小咪 回答
SELECT t1.* 
 FROM Table t1
   inner join (SELECT ob_id,MAX(time) mx_time FROM TABLE GROUP BY ob_id) t2 on t1.ob_id=t2.ob_id and t1.time=t2.mx_time

SELECT *
FROM

(
    SELECT  ROW_NUMBER() OVER (ORDER BY ID) AS RowNumber, NAME,count(*) over as Total FROM TB_USERS WHERE LEVEL = 2
)   as A

WHERE rownumber between 20 and 30

很簡單,直接為這個(gè)UDF加參數(shù)不就行了

逗婦惱 回答

丟失參數(shù),分頁的最好使用get方式請求傳參