我测试 sql 查询。
IF 3 = 3 THEN
SELECT 'TRUE'
ELSE
SELECT 'FALSE'
END IF;
Run Code Online (Sandbox Code Playgroud)
我在 SQLyog 上执行了该查询。
我收到以下错误消息。
You have an error in your SQL syntax; check the manual that corresponds to
your MariaDB server version for the right syntax to use near 'ELSE SELECT
'FALSE' END IF' at line 3
Run Code Online (Sandbox Code Playgroud)
该查询非常简单。我不知道为什么会出现错误消息。
我的问题可能是直截了当的,但我无法弄清楚幕后发生了什么.我循环遍历数据库表中的一系列域,调用它们,获取SSL证书并将有关它的信息存储回数据库.
在大多数情况下,它是有效的 - 除了当循环退出任何尚未完成的调用时才停止.
开始检查的数据库检索:
function queryRows() {
complete = false;
var query = c.query("SELECT * FROM domains LIMIT 100 OFFSET " + offset);
query.on('result', function(res) {
res.on('data', function(row) {
checkUrl(row)
}).on('end', function() {
complete = true;
});
}).on('end', function() {
console.log(complete);
offset += 100;
if(offset <= (parseInt(rows) + 400)){
queryRows();
} else {
console.log("Done, waiting");
setTimeoutPromise(600000, 'foobar').then((value) => {
console.log("restarting")
offset = 0;
getTotal();
});
}
});
}
Run Code Online (Sandbox Code Playgroud)
以及检查SSL的代码:
function checkSSL(id, domain){
complete = false
var options = { …
Run Code Online (Sandbox Code Playgroud) 在我的 Node.JS 应用程序中,我使用集群来利用我的多核 CPU。我正在使用节点的 mariasql 库与我的数据库进行通信。由于node-mariasql
库不支持池化,我使用第三方 - generic-pool来维护连接池。
我注意到,每当主线程中的连接在未捕获的异常导致其中一个子集群重新启动后关闭时,我们的 CPU 使用率就会上升到 100%。
每当子集群重新启动时,我都会破坏所有 MySQL 连接。
节点版本 - v4.2.2
MariaDB 版本 - v10.0.15
node-mariasql 版本 - v0.2.5
可重现的代码 - https://github.com/bsurendrakumar/node-simplex/
var pool = poolModule.Pool({
name: 'mariadb',
create: function(callback) {
var client = new mSQLClient();
client.connect(dbConfig);
client.on('error', function(err) {
callback(err, null);
});
client.on('ready', function() {
callback(null, client);
});
},
destroy: function(client) {
if(cluster.isMaster) {
console.log('Destroying / ending master thread ID -', client.threadId);
}
if(isDraining) {
client.destroy();
} …
Run Code Online (Sandbox Code Playgroud) 我正在记录某些特定查询的结果,并且工作正常,但我注意到还记录了太多元数据,如何禁用这些元数据被记录?
const pool = mariadb.createPool({
host: 'localhost',
port: 3306,
user: 'example',
password: 'pass',
waitForConnections: true,
connectionLimit: 10
});
async function asyncFunction () {
let conn;
try {
conn = await pool.getConnection();
const queryResult = await conn.query('select * from test.sb__user where id=94');
console.log(queryResult); // [ {val: 1}, meta: ... ]
} catch (err) {
throw err;
} finally {
if (conn) return conn.end();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将其设置sequelize
为ORM MariaDB
。
这是我的设置:
var sequelize = require('sequelize');
var db= new sequelize('dbname', 'user', 'pass', {
dialect: 'mariadb'
});
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序时,出现以下错误:
/my/path/to/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:23
throw new Error('Please install mysql package manually');
^
Error: Please install mysql package manually
Run Code Online (Sandbox Code Playgroud)
为什么sequelize尝试连接到mysql而不是我在dialect
指令中指定的mariadb ?我想念什么吗?
我一直忙于更改一些 SQL 查询,以便它们看起来对人眼更具可读性,我还被告知它们可能会快 5-10%。
以前的 SQL 语句看起来像这样。
SELECT * FROM team WHERE Team1='Joe Bloggs' OR Team2='Joe Bloggs' OR Team3='Joe Bloggs'
我把它改成
SELECT * FROM team WHERE 'Joe Bloggs' IN (Team1,Team2,Team3)
新查询大约慢了 10 倍,在检查可能是什么原因后,我发现它没有使用任何索引,即使我试图强制使用索引,它仍然不会使用它。
该表有大约 120,000 行,我无法更改表格式,因为其他应用程序我无权访问,请使用它。Team1,Team2,Team3 列都是 VARCHAR(45)
有人可以解释为什么索引用于原始查询而不是新查询吗?我已经阅读了大量页面,但找不到答案,我读到 mysql 可能正在确定不使用索引的速度更快,但是这里不应该是这种情况,因为 IN 查询几乎慢了 10 倍。
多个 OR SELECT(无缓存运行 1000 次)- 12.863906860352 已过去 IN SELECT(无缓存运行 1000 次)- 122.73787903786 已过去
感谢您的时间。
我正在使用mariaDB,codeigniter php
但是,当我使用php codeigniter运行相同的过程时,它会返回不同的结果集。
array(1) {
[0]=>
array(1) {
[0]=>
array(2) {
["stuScore"]=> string(7) "44.0000"
["answerdQues"]=> string(2) "50"
}
}
}
Run Code Online (Sandbox Code Playgroud)
查询过程...
SELECT sum(Score) as stuScore, count(distinct ta1.idTestQuestion) as answerdQues
FROM (select ta0.*, @running_time := if(@running_student = idStudent, @running_time, 0) + ta0.TimeTaken, date_add(ta0.StartTime, INTERVAL @running_time SECOND) as running_time, @running_student := idStudent
from (select tap.idStudent, ta.score, ta.idTestQuestion, tap.StartTime, ta.TimeTaken
from `testanswerpaper` tap
left join testanswer ta on ta.idTestAnswerPaper = tap.idTestAnswerPaper and (ta.Status = 'Flagged' || ta.Status = 'Answered')
where tap.`idTestQuestionPaper` …
Run Code Online (Sandbox Code Playgroud) 我有一个 MySQL 语句,一次将数据插入 4 行。该insert
是工作,但我遇到的困难ON DUPLICATE KEY UPDATE
。
我收到一个错误: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''count = VALUES(11, 22, 33, 44)'' at line 15
下面是一个例子:
INSERT INTO table1 (id, dept, date, count)
VALUES
(1, 4, 2018-01-15, 3),
(2, 3, 2018-01-15, 4),
(3, 3, 2018-01-15, 14),
(4, 2, 2018-01-15, 11)
ON DUPLICATE KEY UPDATE
count = VALUES(11, 22, …
Run Code Online (Sandbox Code Playgroud) 每当我尝试运行我的代码时,都会显示列数不匹配错误。
values=[
[{id:12227722345,name:"dgssssdavgsgfv",pass:"cvhsssssadfvugod"}],
[{id:12,name:"ddd",pass:"cvh"}]
];
c.query('insert into Hash.asn(userid,username,password) values (?,?,?)',[values],function(err,rows)
{
if (err)
console.log(err);
c.query('commit');
console.log(rows);
});
Run Code Online (Sandbox Code Playgroud)
错误:
{ [Error: Column count doesn't match value count at row 1] code: 1136 }
Run Code Online (Sandbox Code Playgroud) 我使用的是具有32GB RAM和8核服务器的专用服务器,使用Maria DB 10.1,大多数表都是InnoDB.总数据库大小小于2GB,但我认为性能很慢.
以下是my.cnf
我正在使用的文件:
[mysqld]
log-error=/home/MySQL_Server/mysql/dedi.server.co.err
datadir=/home/MySQL_Server/mysql
pid-file=/home/MySQL_Server/mysqlmysqld.pid
innodb_file_per_table=1
skip-name-resolve=1
bind-address=127.0.0.1
#skip-networking=1
#query_cache_type=0
query_cache_type=1
innodb_file_per_table=1
default-storage-engine=InnoDB
#query_cache_size=0
query_cache_size=128M
query_cache_limit=256K
query_cache_min_res_unit = 2k
performance_schema=ON
innodb_buffer_pool_size = 1536M
innodb_log_file_size = 140M
innodb_log_files_in_group=2
sort_buffer_size=256k
join_buffer_size=256k
read_buffer_size=256k
read_rnd_buffer_size=256k
thread_stack=256k
mrr_buffer_size=256k
join_cache_level=8
tmp_table_size=64M
max_heap_table_size=64M
table_open_cache=1024
thread_cache_size=32
innodb_buffer_pool_instances=1
innodb_use_sys_malloc = 1
max_connections=500
wait_timeout=300
interactive_timeout=360
#tmpdir=/var/mysqltmp
#max_allowed_packet=268435456
Run Code Online (Sandbox Code Playgroud)
MySQL Tuner建议如下:
General recommendations:
Control warning line(s) into /home/MySQL_Server/mysql/dedi.niresh.co.err file
Control error line(s) into /home/MySQL_Server/mysql/dedi.niresh.co.err file
Increasing the query_cache size over 128M may reduce performance
When making …
Run Code Online (Sandbox Code Playgroud) mariasql ×10
mariadb ×8
node.js ×5
mysql ×4
sql ×3
codeigniter ×1
https ×1
javascript ×1
node-cluster ×1
php ×1
select ×1
sequelize.js ×1
server ×1
sockets ×1
ssl ×1