(max の所に数字を入れると表示します) トランザクションが割り当てられたコマンドが実行されたときに ですよね? 同時に複数のinsertが実行された場合でも、同じコネクションで発行されたIDだけを取得可能でしょうか? ↑全て同じにしてみたらいかがでしょうか? SELECT * FROM tb_a WHERE id = 1 FOR UPDATE; mysqlでは前回insertのauto increment値を「 last_insert_id() 」関数で取得できます。 テーブルを作成して、1件INSERTすると「1」が取れました。 憶測での回答になってしまいますが UPDATE tb_a SET price = 残高-10000 WHERE id = xxx; >トランザクションオブジェクトも参照できるのでは?と思うのですが・・・。 とりあえず、思いついたのは、numberでした。 ブログを報告する, laravelのインストールはとっても簡単です。 bonoponz.hatenabl…, 【laravel】composer global require "laravel/installe…, 【jQuery/DataTables】invalid dateになるとき、値の型を確認すべし!, 【jQuery Validation Plugin】日付のバリデーション(現在より未来、終了日を開始日より未来を検証), 【Laravel】安易にphp artisan config:cacheはしないほうがいい. item6 VARCHAR (16) NOT NULL, .......省略................} やろうとしていることとしては、 if(s_data != dumy){ ...... } 田中   9:00      22:30    1:00 以下のようにして、最後のレコードを取り出したいのですが UPDATE tb_a SET price = 残高-10000 WHERE id = xxx; ・下記のテーブル定義の属性数を適当に減らす(id, item1, item4, item6くらいにする)と、エラーが出ずデータがちゃんとinsertできる。 自動採番された値を取得するには、 last_insert_id を使用します。 PHP MYSQL の組み合わせで使っています AJAXのかたちにして、ページ遷移を見えなくするというのが手っ取り早いかも。, mysql5.0.27(RedhatLinux 9)です。 item5 VARCHAR (64), item4 VARCHAR (64), 引き続き、もう少し自分でも調べてみようと思います。 しかしそもそもなぜSELECTで行ロックするのか、運用上でどんなときに使うのかを解説しているサイトは見当たりませんでした。 と書いています。SELECTするのに行をロックする必要性がいまいちわからないです。 私はなにか、とんてもない勘違いをしているのでしょうか?かなりの時間試行錯誤しているのですが、一向にわかりません。。。 よろしくお願いします。 select * from 表名 MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。 自動的にCommit Tranが実行されてしまうのかも知れません 私は、SELECTするときは単に 他にも、レコードを入れた時間も記録したフィールドがあるのですが 以上ですが、よろしくお願いします。, 多分できないです。 insert into hoge (item1, item2, item3, item4, item5, item6) としか記述していません。 環境: php5,mysql5 (InnoDB), トランザクション中にinsertする予定のテーブル(未コミット)のauto_increment値を取得することはできるのでしょうか。 一つのトランザクションでSELECTとUPDATEできますか? (ADO.NET). COMMIT; (5) $sql2=" INSERT INTO hoge2(hoge1_primary,age) value($key,'20歳'); "; ですね。, SELECT ~ FOR UPDATEやSELECT ~ LOCK IN SHARE MODEという行ロックがあり、この件について解説しているサイトをいろいろ見ているのですが、振る舞いが複雑だということはわかりました。 SELECT name,start_time,end_time,break_time 以下のような処理を期待しているのですが、hoge1テーブルのauto_increment値が取得できずに困っております。last_insert_id に関わらず、hoge1テーブルのauto_increment値が取得できる方法があれば教えてください。 本当に隠すならサーバ側でセッション情報を引き継ぐような形にしないとダメでしょう。 ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1 auto_incrementを使用しているテーブルには、他にユニークなデータを持つカラムがありません。order by 句はやろうとしている事から、使用不可能です。 ・下記のinsert文で、その下のエラーメッセージが出て、データを登録できない。 なぜSELECTするのにトランザクションが必要なのでしょうか?運用上でどんなときにSELECTでト...続きを読む, >>質問3.select だから意味があります。 CONSTRAINT PK_HOGE PRIMARY KEY (id) UPDATE tb_a SET price = 残高-10000 WHERE id = xxx; Webをいろいろ漁って、AUTO_INCREMENTの属性は明示的に指定しないようだと理解しました。冗長で申し訳ないのですが、エラーが出た状態のものを、そのまま掲載させていただきます(テーブル名や属性名のみ変更しました)。 いまはSELECTとUPDATEを別のコネクションで行っているのですが、UPDATE後に CREATE INDEX IDX_HOGE_1 ON hoge(item1); 「データの件数」は"a number of data"でしょうか? テーブルA、テーブルBと共にPRIMARYをセットしておけば、 (2) $sql=" INSERT INTO hoge1(name) value('あああ'); "; でも、"a number of"は「いくつかの」という意味ですよね。 お手数かけますが、どなたかご教授お願いいたします。, #2回答者です。 CREATE INDEX IDX_HOGE_5 ON hoge(item6); | item3 | varchar(32) | NO | MUL | | | the number of (the) data ・どうみても、コラム数は合っている(と思う)。 たとえば、「りんごの個数」は"a number of apples"ですか? ELSE TIMEDIFF(end_time,'22:00:00') え、本当?」と、奇異に感じたことを、思い出しました。, ※各種外部サービスのアカウントをお持ちの方はこちらから簡単に登録できます。 } 質問1. WHEN TIMEDIFF(TIMEDIFF(end_time,start_time),break_time)<='08:00:00' THEN NULL CREATE TABLE hoge ( そして上のBIGIN~UPDATE~INSERT~COMMITは以下のように書かないといけないのでしょうか? (2) $sql=" INSERT INTO hoge1(name) value('あああ'); "; item5 VARCHAR (64) NOT NULL, auto_incermentで発行されたIDを別テーブルに使いたいのです。 | item6 | varchar(16) | NO | MUL | | | SELECT文にはFOR UPDATEも書いていないのですが、これは何を意味するのでしょうか?つまり、SELECTするのになぜトランザクションを実行するのでしょうか? 何故、mysql_insert_id が not a valid になるのでしょうか? 読みたいときにselect,更新したいときにupdate、追加したいときにinsertでいいです。 ・descで確認しても、ちゃんとテーブルはできているよう。 質問4. SELECT * FROM tb_a WHERE id = yyy FOR UPDATE;   それはうまくいっているみたいです  それぞれのinsertで発行されたIDを取得できるのかどうか疑問でした。 UPDATE tb_a SET price = 残高-10000 WHERE id = xxx; COMMIT; s_data = document.kaiin_form.input_name.value; トランザクションを開始したときにロックがかかるのではないのでしょうか?つまりBEGIN;でロックがかかるわけではないのですか?SELECTのクエリーにFOR UPDATEと書くということはこのSELECTのコードが実行された時点でロックがかかるのでしょうか? (8) トランザクション終了 END AS SHINYA どうしてよいか?判りません。 updateやinsertは更新と決まっています。 >「りんごの個数」 SELECT * FROM tb_a WHERE id = xxx FOR UPDATE; +---------------------+-----------------------+------+-----+---------+----------------+ >BIGIN; ===== エラーメッセージ ===== (adsbygoogle = window.adsbygoogle || []).push({}); Follow @tsubaiso1 !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)? BEGIN; 状態をまとめると、以下のようになります。 (1) トランザクション開始 "INSERT INTO tablename VALUES (1,'hoge',3)" (直にSQLで『SELECT LAST_INSERT_ID();』を実行して、ダメでしょうか?), function kensaku(){ Webをいろいろ漁って、AUTO_INCREMENTの属性は明示的に指定しないようだと理解しました。冗長で申し訳ないのですが、エラーが出た状態のものを、そのまま掲載させていただきます(テーブル名や属性名のみ変更しました)。 テーブル定義. **その中の一つのフィールドを取り出すのですが、 INSERT tb_a (price) VALUE (10000) WHERE id = yyy; FOR UPDATEやLOCK IN SHARE MODEというのはSELECTにしか使えないのか、もしくはSELECTだから意味があるのでしょうか?UPDATEやDELETEは単にBEGINE;とCOMMIT;で囲えばいいだけですよね? 最終的な手段としては、auto_incrementのIDを生成するためだけのテーブルを作成して、 CASEにこだわるなら、WHENで条件外をしぼってELSEで実数を得ればよいかも 同時に始めのinsertが実行されてしまった場合、last_insert_idで 合ってます。 WHEN end_time<'22:00:00' THEN NULL よろしくお願いします。, 「_」に関するQ&A: DVD VTS_01_1.VOBをWindows ムービーメーカーで編集したい!, ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!, トランザクション中にinsertする予定のテーブル(未コミット)のauto_increment値を取得することはできるのでしょうか。 属性のひとつがAUTO_INCREMENTになっているテーブルhogeに、データをinsertしたいのですが、「コラムの数が合致しない」というエラーで、insertできません。 よろしくお願いします。, 「MySQL 関数」に関するQ&A: 関数mysql_connectについて, 大変助かります。 データの整合性が保たれるのではないかと考えていました。 (プログラムとしてはapacheモジュールのPHPを使用しています。) INSERT tb_a (price) VALUE (10000) WHERE id = yyy; if(!s_data){ ここでは、auto_increment 列で自動採番された最新の値を取得するサンプルを掲載しています。, MySQL には Oracle のようにシーケンスが存在しないので一意な値を扱う場合には、auto_increment 列を定義して、自動で数字を採番することが多いです。というよりも、Oracle に auto_increment の機能がないといったほうが正確でしょうか。, Oracle 12c から Oracle でも auto_increment に対応しようようです。, なお、select last_insert_id() from table1 のようにテーブル名を SQL に入れてもエラーが発生します。テーブル名は必要ありません。, SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ・・・, 備忘録用の参考情報となりますがテーブル作成時に AUTO_INCREMENT 列はプライマリキーとする必要があります。プライマリキーとしない場合には下記のようにテーブルの作成でエラーとなります。, Your email address will not be published. COMMIT; そこで、 | id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment |