MySQL应用异常问题解决
?派生表都必須有自己的別名
一般在多表查詢時,會出現此錯誤。
因為,進行嵌套查詢的時候子查詢出來的的結果是作為一個派生表來進行上一級的查詢的,所以子查詢的結果必須要有一個別名,
把MySQL語句改成:select count(*) from (select * from ……) as total;
問題就解決,雖然只加了一個沒有任何作用的別名total,但這個別名是必須的。
select name1 name, java, jdbc, hibernate,totalfrom (select sc1.name name1, sc1.mark javafrom student_course2 sc1where sc1.course='java') as a,(select sc2.name name2, sc2.mark jdbcfrom student_course2 sc2 where sc2.course='jdbc') as b, (select sc3.name name3, sc3.mark hibernate from student_course2 sc3 where sc3.course='hibernate') as c, (select sc4.name name4,sum(sc4.mark) total from student_course2 sc4 group by sc4.name) as d where name1=name2 and name2=name3 and name3=name4 order by total ASC;?結果正確:
+----------+------+------+-----------+-------+
| name?????| java | jdbc | hibernate | total |
+----------+------+------+-----------+-------+
| wangwu???|???40 |???30 |????????20 |????90 |
| lisi?????|???70 |???60 |????????50 |???180 |
| zhangsan |??100 |???90 |????????80 |???270 |
+----------+------+------+-----------+-------+
3 rows in set (0.02 sec)
?
Error Code: 1045. Access denied for user 'test'@'%' (using password: YES)
使用MySQL的select * into outfile ‘/tmp/rs.txt’ from tb_name來導出結果時遇到這個問題,
當前用戶雖然擁有全部權限,但是file權限需要單獨賦予,使用root用戶執行:
| 1 | grant?file?on?*.*?to?test@localhost; |
?
Error Code: 1093. You can't specify target table 'mytable' for update in FROM clause
在使用update或者delete語句時,在where條件里面加入的子查詢導致的。
這時候可以將該表再嵌套一層,即“(select * from table) tt”,得出一個臨時的結果集,
在這個結果集上操作就可以了。
| 1 2 | delete?from?mytable?where?mytable.id?not?in (SELECT?tt.id?FROM?(SELECT?*?FROM?mytable) tt?where?tt.siteid=22 ); |
?
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode,toggle the option in Preferences -> SQL Editor and reconnect.
解決辦法是關閉安全模式:
| 1 | SET?SQL_SAFE_UPDATES = 0; |
注意如果你是使用MySQL Workbench,還需要配置一下軟件的首選項。
因為MySQL Workbench的默認的安全設置是不能批量更新表的。
當要執行的SQL語句是進行批量更新或者刪除的時候就會提示這個錯誤。
解決方法如下:
打開Workbench的菜單[Edit]->[Preferences...]
切換到[SQL Editor]頁面
把[Forbid UPDATE and DELETE statements without a WHERE clause (safe updates)]之前的對勾去掉
點擊[OK]按鈕
MySQL插入時使用當前時間
NOW()函數以`'YYYY-MM-DD HH:MM:SS'返回當前的日期時間,可以直接存到DATETIME字段中。
CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。
CURTIME()以’HH:MM:SS’的格式返回當前的時間,可以直接存到TIME字段中。
| 1 | insert?into?table?(id ,time)?values('1',NOW() ) |
?
Error Code: 1100. Table 'mytable' was not locked with LOCK TABLES
?我在插入前執行了
| 1 | LOCK TABLES `mytable` WRITE; |
重新解鎖即可:
| 1 | UNLOCK TABLES; |
本文轉自邴越博客園博客,原文鏈接:http://www.cnblogs.com/binyue/p/5145530.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的MySQL应用异常问题解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过Exchange online实现H
- 下一篇: 安装多个版本JDK相关问题