ラベル mysql の投稿を表示しています。 すべての投稿を表示
ラベル mysql の投稿を表示しています。 すべての投稿を表示

2014年9月9日火曜日

MySQLでERROR:1093を回避する

まー些細なことなんですけどね。

エラーになる(as tmpが意味をなしてない)
update hoge set code = 0
where id IN 
(select id from hoge as tmp where id = 1 group by id  order by id)
;

こんなエラー
ERROR 1093 (HY000): You can't specify target table 'hoge' for update in 
FROM clause
mysqlって同じテーブルに対するサブクエリからの操作ができないんですよね。

リファレンスマニュアルより
http://dev.mysql.com/doc/refman/5.1/ja/subquery-errors.html

サブクエリは、SELECT ステートメント同様 UPDATE と DELETE ステートメント内で正当なので、UPDATE ステートメント内で、割り当ての為にサブクエリを利用する事ができます。しかし、同じテーブルを(この場合、テーブル t1)サブクエリの FROM 条項と更新ターゲットの両方に対して利用する事はできません。

ではどうするかというと、いっこ別に fromでtmpを受け取ってあげれば実はOK

うまくいく
update hoge set code = 0
where id IN (
select id from 
(select id from hoge where id = 1 group by id  order by id) as tmp
)
;

2011年11月7日月曜日

MySQLでの制約メモ

制約あれこれ



  • 主キー制約(primary key制約)

  • 外部キー制約(Forein key制約)

  • 一意制約(Unique key制約)

  • 検査制約(check制約)


MySQLならでは



制約作成時の動作(oracleとの対比)

























種類MySQLOracle
PrimaryKey制約一意なインデックスを作成する既存のインデックスを使用するか、新しいインデックスを作成する
ForeinKey制約インデックスを生成するインデックスを生成しない
UniqueKey制約一意なインデックスを生成する既存のインデックスを使用するか、新しいインデックスを生成する

上記の表はオライリー初めてのSQLによっています。

2011年9月13日火曜日

MySQLでrootのパスワードをnullに戻すメモ

環境はmysql 5.5 GA

my.cnfに下記を追加してmysqlをrestart
[bash]
skip-grant-tables
[/bash]

mysqlにログイン
[bash]
$ mysql -uroot
[/bash]

下記のSQLを発行
[SQL]
> use mysql;
> update user set Password=null where Host='localhost' and User='root';
> FLUSH PRIVILEGES;
>\q
[/SQL]

その後SET PASSWORD~とかすればよいです