前提
プログラミング初心者です。
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文については全くお手上げです。
初歩的なことで申し訳ないのですが、お力添えいただきたく存じます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/14 12:01