• 締切済み

ロールバックできないステートメントについて

こんばんは。 既存のテーブルのカラムを削除することになりまして、 以下の手順で変更をかけました。 環境:mysql_5.5 mysql>begin; mysql>alter table test_table drop column test_column; mysql>desc test_table; mysql>rollback; mysql>desc test_table; しかし、ロールバックをかけても元に戻らなかったのですが、 http://dev.mysql.com/doc/refman/5.1/ja/cannot-roll-back.htmlhttp://dev.mysql.com/doc/refman/5.1/ja/cannot-roll-back.html の記述にあるようにバージョン5.5でもalterでのロールバックは出来ないのでしょうか。 英語のサイトを見たのですが、ただしく訳せませんでした。 http://dev.mysql.com/doc/refman/5.5/en/implicit-commit.htmlhttp://dev.mysql.com/doc/refman/5.5/en/implicit-commit.html 回避方法があったら、教えてください。

  • MySQL
  • 回答数2
  • ありがとう数2

みんなの回答

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.2

そもそも、rollbackは、データの変更(挿入・削除・アップデート)を無かったことにするコマンドです。 テーブル構造の変更は対象外です。これはMySQLに限らずRDBMS一般の基本です。

momo_chi_chi
質問者

お礼

回答ありがとうございます。 知り合いが、PostgreSQLでテーブル作成や定義変更の際にrollbackしてると言っていたので、Mysqlでも出来るのか調べていたのですが、自分の聞き違いかも知れないのないので、もう一度確認をとってみます。 ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

暗黙のコミットを引き起こすステートメント http://dev.mysql.com/doc/refman/5.1/ja/implicit-commit.html

momo_chi_chi
質問者

お礼

回答ありがとうございます。 「暗黙のコミットを引き起こす」ということだったので、 SET AUTOCOMMIT = 0; にしてやってみたんですが、やはりロールバックできていなかったので そういうことではなかったんですね。 今後は、気をつけながらやっていきます。

関連するQ&A

  • MySQL Connector C++について

    ttp://dev.mysql.com/doc/refman/5.1/en/connector-cpp.html MySQL Connector/C++についてなんですが、 Connector/Cでいう mysql_options(&mysql, MYSQL_SET_CHARACTER_NAME, "sjis") に相当するものは無いでしょうか? sjisで文字を扱いたいんですが…

    • ベストアンサー
    • MySQL
  • MySQL TIMESTAMP型は、UTCですか?

    MySQL5で、 TIMESTAMP型のカラムに格納されるのは、UTCでしょうか。 それともローカルタイムゾーンなのでしょうか? あるいは、設定による、のでしょうか? >TIMESTAMP カラムの値は、ストレージでは現在のタイム ゾーンから UTC へ、読み出しでは UTC からカレントのタイム ゾーンに変換します。 http://dev.mysql.com/doc/refman/5.1/ja/time-zone-support.html と書いてあったのを見て、TIMESTAMP型のカラムに格納されるのは、UTC(日本時間-9)だ、と思ったのですが、 実際にカラムの中を確認してみると、その時点の日本時間が格納されています。 >TIMESTAMP 値は、現在のタイムゾーンから変換されて格納され、また検索された時に現在のタイムゾーンに再変換されながら、UTCに格納されます。 http://dev.mysql.com/doc/refman/5.1/ja/timestamp-4-1.html こちらでも、「UTCに格納されます」って書かれているのですが、 これは、「現在のタイムゾーンをそれぞれの接続ごとに設定した場合」に限っての話なのでしょうか? それとも、ストレージでは、って書かれているので、 ストレージのことが絡んでいるのでしょうか?(ストレージって何のことですか)

    • ベストアンサー
    • MySQL
  • 論理名とコメント構文(?)について

    ・論理名とコメント構文が分からないので、教えてください ■論理名 ・論理名は、内容を分かりやすくするために付ける日本語表記、と思っているのですが、そういう認識で合っているでしょうか? ・論理名は、どこに付けるのでしょうか? テーブル定義書などの設計書にだけ表記するのでしょうか? それとも、SQLの中で「論理名」を付ける場所は決まっているのでしょうか? ・MySQLのコメント内に、「論理名」を記述しても良いのでしょうか? ・「論理名」を付与する場合、一般的に、どこに記述するのか? SQLの中でも記述するのか? について、教えてください ■コメント ・「コメント構文」と、「COMMENT オプション」では、何が違うのでしょうか? ・SQLステートメントの構文解析とは、具体的に何を指すのでしょうか? ・両者の使い分け(どういう時にどちらを用いるのか等)について、教えてください ▽MySQL :: MySQL 5.1 リファレンスマニュアル :: 8.5 コメント構文   http://dev.mysql.com/doc/refman/5.1/ja/comments.html >記述されたコメント構文はmysqldサーバによるSQLステートメントの構文解析に適用 ▽MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.8 CREATE TABLE 構文   http://dev.mysql.com/doc/refman/5.1/ja/create-table.html >カラムのコメントは、255文字の長さまでで COMMENT オプションで指定できます。コメントは SHOW CREATE TABLE と SHOW FULL COLUMNS ステートメントによって表示

    • ベストアンサー
    • MySQL
  • MYSQLのフィールドにユニークキーを設定する。

    すでに作ってしまったテーブルにユニークキーを付けたいと考えています。最悪の場合、新しくカラムを作っての追加でもかまわないのですが、いろいろ試してもエラーが返されてしまいます。 codeというカラムにユニークキーを設定したいのですが、 alter table テーブル名 modify unique code; alter table テーブル名 add unique code2; alter table テーブル名 modify code unique; alter table テーブル名 add code2 unique; alter table テーブル名 modify code test unique; alter table テーブル名 add code2 test unique; alter table テーブル名 modify unique code test; alter table テーブル名 add unique code2 test; alter table テーブル名 modify (code unique); alter table テーブル名 add (code2 unique); alter table テーブル名 modify (code text unique); alter table テーブル名 add (code2 text unique); など、思いつく限り試し、グーグルで調べる限り調べたのですが、出てきたものをためしてもダメでした。 テーブルを作成した後、カラムにユニークキーを設定した経験のある方、どのように変更をしたのでしょうか?

    • ベストアンサー
    • MySQL
  • MySQLリファレンスマニュアル(公式)の見方

    MySQLの公式サイトのリファレンスマニュアルに、そもそもの見方が説明されているページは用意されていますか? 探したのですが、見当たらなかったので質問させていただきました。 特に斜体の部分が説明がなされているページがあれば大変助かります。 斜体の部分とは、例えば、以下のページのtable_references等です。 http://dev.mysql.com/doc/refman/5.1/ja/update.html 英語の意味からざっくり予想することはできるのですが、直訳してもよく分からないものもあるので。 ご教示のほど、なにとぞよろしくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • MySQLで、テーブル内のフィールドの名前を変えたいのですが・・・

    MySQL4.0.20 Linuxを使っています。 テーブル内のフィールドの名前を変えたいのですが、alter table の modifyはカラムの属性を変えるもので、名前を変えるのは運用途中でできるのかなと、ふと疑問に思いました。 alter tableなどでできるのでしょうか? 結局サーバーを止めて、バックアップし、テーブル定義を書き直して、リストアするしか無いのでしょうか?

    • ベストアンサー
    • MySQL
  • 予約語のgroup

    groupは予約語のためカラム名には使えないはずですが、alter文だと作れてしまうのはmysqlのバグですか? ALTER TABLE `hoge` ADD `group` INT NOT NULL ;

    • ベストアンサー
    • MySQL
  • My-SQLのUserと、予約文字列

    http://dev.mysql.com/doc/refman/4.1/ja/reserved-words.html 予約されている文字列はUser名として使えないのでしょうか? また大文字でも小文字でも区別はなく使えないのでしょうか?

  • MySQL 予約語名で、カラム作成できるでしょうか

    ■質問 ・MySQL予約語名でもカラムを作成できるのでしょうか? ■背景 ・文法エラーSQL文の原因を調べると、どうやら予約語を利用したためだと分かりました ・予約語と知っていたら初めから利用しなかったのですが、その名前で普通にカラムを作成できたので、てっきり使えるものだと思い込んでしまいました ■知りたいこと ・予約語を回避するには、ここをチェックするしかないのでしょうか? ▽MySQL 5.1 リファレンスマニュアル :: 8.3 MySQLでの予約語の扱い   http://dev.mysql.com/doc/refman/5.1/ja/reserved-words.html ・予約語による影響を受けるのはどんな時?(CREATEは関係ない?) 予約語によって異なる?

    • ベストアンサー
    • MySQL
  • MySQLのカラムを削除したが,それを復元したい

    MySQLのテーブル内のカラムを再編成しようとしています. そこで,カラムAをALTER TABLE DROPで削除しました. その直後,カラムAは必要であることに気づきました. テーブルのバックアップを取っていないので,困ります. この削除コマンドをキャンセル(UNDO)したり,削除したカラムを復元できますか?