@magurosake

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

MYSQLでINSERTができない

Mysqlで新しくテーブルを作成して、そのテーブルにINSERTをしてSELECTでテーブルを表示させようとしたがEmpty set (0.00 sec)となりINSERTしたはずのものが入っていない。

CREATE TABLE todos2 (
id INT NOT NULL AUTO_INCREMENT,
is_done BOOL DEFAULT false,
title TEXT,
createnow DATETIME,
PRIMARY KEY (id)
);

CREATE TABLE mst_users (
user_id INT NOT NULL,
password VARCHAR(8) NOT NULL,
user_name VARCHAR(16) NOT NULL,
login_kbn INT NOT NULL,
PRIMARY KEY (user_id)
);

INSERT INTO todos2 (title) VALUES ('aaa');
INSERT INTO todos2 (title, is_done) VALUES ('bbb', true);
INSERT INTO todos2 (title) VALUES ('ccc');
INSERT INTO todos2 (createnow) VALUES (CURRENT_TIME);
INSERT INTO todos2 (title,is_done,createnow) VALUES ('eee',true,CURRENT_TIME);

INSERT INTO mst_users (user_id,password,user_name,login_kbn) VALUES (99999,'tanaka','田中太郎', 0);
INSERT INTO mst_users (user_id,password,user_name,login_kbn) VALUES (11111,'yamada','山田花子',1);

SELECT * FROM todos2;
SELECT * FROM mst_users;

上のtodos2は最初に作成したテーブルでこちらはSELECT * FROM todos2;で表示される。

新しく作成したテーブルのmst_usersの方にINSERTさせてもEmpty set (0.00 sec)となりINSERTした内容が表示されない。

原因がわからないので教えていただけると助かります。

0 likes

3Answer

INSERT文の日本語の部分('田中太郎', '山田花子')を適当な半角英字('aaa'など)に変更してみて、INSERTが成功するようでしたら、文字コードが原因の可能性があるかと思います。(違うようでしたら申し訳ございません。)

1Like

PostgreSQLはMysqlと異なり、DDL文まで、ROLLBACKでき、一方、Mysqlはデホルトでautocommitです。PostgreSQLにいいね?

 さて、結局、原因はわかりません。Mysqlのバージョン?とAUTO_INCREMENTがMysql特有の暗黙のコミットに・・・と仮説を立てましたが、手持ちがMariaDB 10.8.5 なので検証出来ません。尚、isolation level は関係ないと判断し度外視してます。

3つの端末で切り分けしてはどうでしょうか?

C端末
CREATE TABLE todos2 (
 PRIMARY KEY (id), id INT AUTO_INCREMENT,
 title TEXT,
 user_name VARCHAR(4)
);
CREATE TABLE mst_users (
 PRIMARY KEY (id), id INT,
 title TEXT,
 user_name VARCHAR(4)
);

問題がなければ、1項目、1項目追加、修正してネ!

I端末
SET AUTOCOMMIT=1;
INSERT INTO todos2 (title, user_name) 
       VALUES ('あああ', '山田太郎');
SELECT @@AUTOCOMMIT;
INSERT INTO mst_users (id, title, user_name) 
       VALUES (1111, 'いいい', '山田花子');
ROLLBACK;
S端末
SELECT * FROM todos2;
SELECT * FROM mst_users;

尚、SELECT @@AUTOCOMMIT;はINSERTで状態変化が起きないか確認する為です。
逆ならあるが、mysqlデホルトのオートコミットが外れることがあるの?

0Like

Your answer might help someone💌