作者DarkKiller (System hacked)
看板Database
标题Re: [SQL ] UPDATE 用法?
时间Thu Jan 24 21:07:09 2008
※ 引述《DarkKiller (System hacked)》之铭言:
: ※ 引述《dcplay01 (dcplay)》之铭言:
: : 上面这段可以查询
: : 可是我想套用上面的查询结果 放在新的资料表calculate 的liberal_grade栏位名称上
: : 我用
: : UPDATE calculate SET liberal_grade= avg(grade)
: : FROM JoinClass j1
: : JOIN calculate c1 ON j1.stu_id = c1.stu_id
: : WHERE course_id
: : LIKE "%l" OR course_id
: : LIKE "%a" OR course_id
: : LIKE "%n" OR course_id
: : LIKE "%p" AND j1.stu_id =93101163
: http://dev.mysql.com/doc/refman/5.1/en/update.html
: Currently, you cannot update a table and select from the same table
: in a subquery.
: UPDATE 时所更新的表格不能与 JOIN 所用到的表格重叠。
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.113.54.119
: 推 dcplay01:所以不能用别张资料表的查询结果放置到新资料表的栏位中? 01/24 19:34
如果要确保资料的正确性,可以用 Transaction 做,不过你必须用 InnoDB 或
BDB (MySQL 5.1 以及之後版本不支援)。
BEGIN;
SELECT stu_id FROM ... WHERE ...
FOR UPDATE;
UPDATE ... SET ... WHERE stu_id = [刚刚的学号];
COMMIT;
如果坚持用 MyISAM 做,则可以用 LOCK TABLE:
LOCK TABLE ...;
SELECT stu_id FROM ... WHERE ...;
UPDATE ... SET ... WHERE stu_id = [刚刚的学号];
UNLOCK TABLE;
印象中是这样做...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.54.119