【发布时间】:2018-03-02 23:52:30
【问题描述】:
我正在通过编写一个测试器来测试我的应用程序(一个 ERP 系统),该测试器将执行 30 步这样的固定场景
//pseudo code(PHP)
public function runScenario1Test(){
V2_1Tester::resetDatabase();
V2_1Tester::insert60Companies();
V2_1Tester::insert2000Items();
V2_1Tester::insert100Purchases();
V2_1Tester::insert100Sales();
//do some other stuff
V2_1Tester:checkResults();
}
虽然每次我运行相同代码、相同数据、所有输入都相同的测试时,我有时会得到不同的结果!!!
我的头要炸了,经过 4 天的调查、眼泪,甚至是晚上做数据库梦,结果发现这个 bug 是在一个有时返回不同结果的查询中。是这样的
+-----+--------------+-----------+------+--------+
| ID | date | direction | col3 | col4 |
+-----+--------------+-----------+------+--------+
| 1 | 2018-03-03 | in | 6 | 100.50 |
| 2 | 2018-03-03 | in | 6 | 350.75 |
+-----+--------------+-----------+------+--------+
-- more ~ 3000 rows
$query = "SELECT * FROM table ORDER BY date, direction, col3";
此查询有时返回 1 然后 2,有时返回 2 然后 1。
我通过添加额外的订购级别来修复查询ID
$query = "SELECT * FROM table ORDER BY date, direction, col3, ID";
但我不明白为什么 MySQL 会这样?,换句话说 对于所有 order-by 列都相同的行,MySQL 将遵循什么规则?以及为什么会发生变化?
【问题讨论】:
标签: mysql sql sql-order-by