質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

2回答

403閲覧

MySQLでInnoDBのTransaction機能とdesc文が非rootユーザ で正常に機能しません

hakurei

総合スコア7

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

1クリップ

投稿2018/12/12 14:37

編集2018/12/12 15:33

前提

プログラミング初心者です。
Python/Djangoを用いて趣味でWeb開発に挑戦しています。
データベース管理システムとしてMySQLを利用しています。

問題はタイトルの通りです。どちらも何か同じ原因に起因しているのではないかと感じたので、まとめさせていただきました。
MySQLのバージョンは8.0.12です。OSはmacOS Mojave10.14.1です。
以下をmy.cnfに書き、mysqld_safeでサーバを立てて、ログインしています。(user名とpasswordは伏せました)。

[mysqld] bind-address = 127.0.0.1 character-set-server=utf8 default_authentication_plugin=mysql_native_password [client] database = TestProject user = **** password = ***** default-character-set = utf8

またgrantは`test_developer'と名付けたroleにTestProject.*についてallを振り、そのroleを上記のユーザ に振っています。

発生している問題1. transaction機能が使えない。

例えばmysqlにログインし以下のように

mysql

1mysql> start transaction; 2mysql> create table TransactionTest (id INT); 3mysql> rollback;

このようにすると、rootユーザ ではcreateしたテーブルが消えます。rollbackがうまくいったからだと思います。ところが、これを上記の非rootユーザ としてログインした場合、rollbackしても"TransactionTest"テーブルが残ったままなのです。rollbackした際も、エラーも何もなく以下のように出ます。

mysql

1Query OK, 0 rows affected (0.00 sec)

発生している問題2. description(desc)が効かない

これもタイトル通りで、rootはうまく機能するもののそうでないユーザ では機能しません。

rootでは

mysql> desc TransactionTest; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.01 sec)

非rootでは

mysql> desc TransactionTest; Empty set (0.01 sec)

試したこと

https://dev.mysql.com/doc/refman/8.0/en/commit.html
こちらの公式リファレンスに、begin, begin work, set autocommitなどについて解説されていたのでそれらも試してみました。しかしそこで解説されているとおり、そもそもstart transactionした時点でautocommitなどは関係なくなるはずですし、実際何も問題は変わりませんでした。

stackoverflowでも調べてみたのですが、調べ方が悪いのか「autocommitの存在を知らない」「InnoDBをつかってない」のような初歩的なものしか、関連するものを見つけられませんでした。

describe文については全くお手上げです。

初歩的なことで申し訳ないのですが、お力添えいただきたく存じます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

13.3.3 Statements That Cause an Implicit Commit
によるとcreate table のまえに Commit しちゃうから rollback が無効と読めます。
だとすると非rootの動作が正常でrootユーザの動作が問題かもしれません。
desc の問題もそれに付随するのかも

投稿2018/12/13 04:20

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hakurei

2018/12/14 12:01

コメントありがとうございます。リンク先を読ませていただきました。私が勘違いをしていました。申し訳ございません。rootでのcreate句も、再び確認したところrollbackされていませんでした。本当に確認不足で申し訳ないです。(descはやはり,rootでしかつかえませんでした) お二方ともコメント助かりましたが、リンク先の内容が非常に助かりましたので、ベストアンサーに選ばせていただきます。 本当に申し訳ないです。
guest

0

ほんとにrootでrollbackすればcreate tableした処理が無効になりますか?
もしそうならdesc TransactionTest;はemptyになるような気が・・・

投稿2018/12/13 01:13

yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hakurei

2018/12/14 12:13 編集

コメントありがとうございます。 非常にお恥ずかしいことなのですが私が勘違いをしていたようで、おっしゃる通りcreate句はrootでもrollbackされていませんでした。今後このようなことがないようにしっかりエラーの再現をとりたいと思います....本当に申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問