程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MYSQL入門知識 >> 數據庫上的試錯心理

數據庫上的試錯心理

編輯:MYSQL入門知識
 

如果我們習慣試錯,將會收獲更多。

最近一位好友問了我一個問題,就是MySQL的Delete語句刪除會報ERROR1093 (HY000)錯誤。SQL語句如下:DELETE FROM test WHEREid=(SELECT max(id) FROM test); 我看了下這個SQL,語法上面沒有什麼問題啊,這不是標准SQL嗎。於是我在Linux環境下測試了MySQL5.1版本和MySQL 5.5版本,均有這樣的問題。後來我又到Oracle 11G R2環境下模擬了相同的問題,卻可以正確地刪除。後來才知道,使用MySQL進行DELETE FROM操作時,若子查詢的 FROM 字句和更新或者刪除對象使用同一張表,會出現錯誤。這裡有一個變通的解決辦法,可以通過多加一層SELECT別名表來變通解決。比如DELETE FROM test WHERE id=(SELECT max(id) FROM (SELECT * FROM test) AS t),但是這樣的效率是極低的。這也算是MySQL的一個坑吧。

以下是操作日志:

mysql> SELECT max(id) FROM test;
+---------+
| max(id) |
+---------+
| 49134 |
+---------+
1 row in set (0.00 sec)

mysql> DELETE FROM test WHERE id=(SELECT max(id) FROM test);
ERROR 1093 (HY000): You can'tspecify target table 'test' for update in FROM clause
mysql> DELETE FROM test WHERE id=(SELECT max(id) FROM (SELECT * FROM test) AS t);
Query OK, 1 row affected (0.12sec)

mysql> SELECT max(id) FROM test;
+---------+
| max(id) |
+---------+
| 49133 |
+---------+
1 row in set (0.00 sec)

同理,UPDATE類似。

mysql> UPDATE test SET name='LARRY' WHERE id=(SELECT max(id) FROM test);
ERROR 1093 (HY000): You can'tspecify target table 'test' for update in FROM clause
mysql> UPDATE test SET name='LARRY' WHERE id=(SELECT max(id) FROM (SELECT * FROM
test) AS t);
Query OK, 1 row affected (0.16sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> SELECT id,name FROM test WHERE id=(SELECT max(id) FROM test);
+-------+-------+
| id | name |
+-------+-------+
| 49133 | LARRY |
+-------+-------+
1 row in set (0.03 sec)

我就是一個在學習過程喜歡嘗試,喜歡試錯的人,這樣帶給我的好處就是可以遇到更多的問題,學習到更多知識。同樣一個問題,在不同的軟件版本,不同的實驗環境結果是不一樣的。如果你嘗試在排列組合允許的范圍內模擬各種問題,那樣你的成長會相當地快。同理,把試錯心理運用在生活中,你可能會遇到更多的問題,這樣你會嘗試使用更多的辦法來解決。年輕人不要怕犯錯,害怕犯錯的人是很難取得成長的。

Trial and error psychology on the database

從心理學上來講,人類都有規避傷害的本能,埋藏在內心的規避傷害本能讓我們錯過太多。比如我們習慣了很多東西,一旦嘗試其他的,就會遇到各種麻煩,但往往你嘗試其他的會得到更好的,很多時候我們應該習慣改變習慣。尤其對做IT的人來說,死守“最好”的城池會讓你止步不前,也會錯過很多更好的東西。當你擺脫習慣,嘗試其他,你的世界可以多一點不一樣。在學習數據庫時,如果不害怕“傷害”,不麻煩各種問題,你將會得到更廣闊的天空。

年輕在於折騰。

–EOF–

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved