締切済み MySQLでUpdate文で更新したテーブルをUpdate前に復元できますか? 2010/03/03 16:59 バックアップをしないでUpdate文でテーブルを更新したのですが Update前に戻すことは可能ですか? みんなの回答 (1) 専門家の回答 みんなの回答 yambejp ベストアンサー率51% (3827/7415) 2010/03/03 18:40 回答No.1 できません 通報する ありがとう 0 広告を見て他の回答を表示する(0) カテゴリ [技術者向] コンピューターデータベースMySQL 関連するQ&A UPDATE文の更新順序について 環境はPostgreSQL 9.0です。 id(char(1)) number(integer) 1 1 2 2 3 3 っていうテーブルがあって、numberにUNIQUE制約が掛かっています。 一回のupdate文でnumを1ずつ増やしたいんですが、更新順序の指定 ってどうやるんですか? UPDATE table SET number = number+1 だと重複違反になるから、numberが大きい奴から更新したいんですよね。 誰か教えてくれませんか? SQL UPDATE 文 GroupByの値を更新したい SQLの UPDATE文について質問させていただきます。 テーブル内のデータを日付と時間で GroupBy して カウント求めています。 求めた値(カウント)を、日付をキーにして同じテーブル内のフィールドに更新するSQLを作成したいと考えています。 GroupByして、カウントを求めることはできるのですが、 どうしても、UPDATE文を実行させることができません。 この処理は、SQLで行うことはできるのでしょうか? 下記に、UPDATE前と後のテーブルデータを記載しています。 日付 時刻 20090101 0:00 20090101 0:00 20090102 0:00 20090102 0:00 20090102 1:00 20090103 2:00 ↓ 日付 時刻 カウント 20090101 0:00 2 20090101 0:00 2 20090102 0:00 2 20090102 0:00 2 20090102 1:00 1 20090103 2:00 1 よろしくお願いいたします。 1テーブル&複数レコードの更新に対して1度のupdate文での処理方法 1テーブル&複数レコードの更新に対して1度のupdate文での処理方法 Delphi2010+SQL SERVER 2005で開発しています。 update文で、 現在下のようにwhileで複数レコードに対して、 1回、1回、sqlを発行して、更新しています。 これを、一度のSQLの発行で処理できないものでしょうか? 更新テーブルは1つで、更新する項目も同じです。 更新するデータと、where句の条件が異なります。 もし可能なようでしたら、どうかご教授お願いします。 update table set A=1,B=2 where id=1 update table set A=2,B=3 where id=5 update table set A=9,B=99 where id=7 update table set A=5,B=10 where id=15 update table set A=1,B=10 where id=75 MySQLのUPDATE文でサブクエリ MySQLのUPDATE文でサブクエリの使い方について教えて下さい。 MySQLのUPDATE文でサブクエリを使うと「#1093 - You can't specify target table 'exam' for update in FROM clause 」というエラーになってしまいます。 「あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えない」 「サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能」 ということはわかりましたが、これに従いSQL文を変更してもうまくいきません。 どのようにSQL文を作ったら良いか教えていただければと思います。 環境 PHP:5.1.6 MySQL:5.0.77 ------具体的なSQL文--------------------------------------- テーブル名:sample カラム名:date(DATETIME型),name,flag 上記テーブルに対して、 1.社員(列名:nameのsuzuki)の最新出勤日(列名:date)のflagを1にする 2.社員(列名:nameのsuzuki)の最新出勤日以外(列名:date)のflagを2にする という処理をしたいと思います。 まず、SELECT文を作ってみました。 1.最新出勤日データを抽出 SELECT * FROM sample WHERE (date= (select max(date) from sample)) and name='sizili' 2.最新出勤日以外のデータを抽出 SELECT * FROM sample WHERE not (date= (SELECT max(date) FROM sample)) and name='suzuki' これをUPDATE文に変更すると、 #1093 - You can't specify target table 'exam' for update in FROM clause というエラーになります。 上記をUPDATE文に変更 1.最新出勤日データを抽出 UPDATE sample SET flag=1 WHERE (date= (select max(date) from sample)) and name='sizili' 2.最新出勤日以外のデータを抽出 UPDATE sample SET flag=2 WHERE not (date= (SELECT max(date) FROM sample)) and name='suzuki' エラー文を検索したところ下記のような情報を見つけることができました。 「仕事SPOT」 MySQLでサブクエリ(エラー#1093を回避する方法) http://wsjp.blogspot.com/2009/12/mysql1093.html 「あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えない」 「サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能」 と記載されています。 このページに掲載してあるように変更を加えてみました。 1.最新出勤日データを抽出 UPDATE sample SET flag=1 WHERE (date= (select max(date) as test_max from sample)) as text_tb and name='sizili' 2.最新出勤日以外のデータを抽出 UPDATE sample SET flag=2 WHERE not (date= (SELECT max(date) as test_max FROM sample)) as test_tb and name='suzuki' これでもエラーになってしまい、うまくいきません。 Mysqlのupdate文 Mysql3.23.42+PHPで下記のようなテーブルで Field| Type ----+------------ a | int b | varchar c | varchar d | timestamp e | timestamp update文を実行すると、 例 update set b='あ',c='い',e=NULL where a='1'; dまでアッデートされてしまうのですが何ででしょう? 何か特別なことしなくてはいけないのでしょうか? UPDATE文でこのような更新はできますか? (TBL_A) A1 A2 ----------- 1 100 2 200 3 300 4 400 5 500 (TBL_B) B1 B2 ----------- 1 100 3 300 4 400 上記のようなテーブルAとBがあったとして 次のようなUPDATE文を実行することはできますか? できない場合、SQL1発で更新する他の方法はありますでしょうか? UPDATE TBL_A A SET A.A1 = A.A1 + B.B1 A.A2 = A.A2 + B.B2 WHERE EXISTS (SELECT 'X' FROM TBL_B B WHERE A.A1=B.B1) 【更新後のTBL_A表】 A1 A2 ----------- 1 200 <= (*)更新される 2 200 3 600 <= (*)更新される 4 400 5 1000 <= (*)更新される 【やりたいこと】 TBL_A表のA2列のデータにTBL_B表のB2列のデータを加算したい。 その場合の更新条件として「A1がB1に存在している場合のみ」という条件を加えたいのです。 すいませんが、よろしくおねがいします。 MYSQLのUPDATEについて MYSQLのUPDATEについて こんにちは。MYSQLを最近勉強しはじめました。従来はACCESS2003を使っています。 全く同じテーブルをMYSQL側とACCESS側で用意しました。 あるフィールドに対し、UPDATE文をかけたら、MYSQLとACCESSではアップデートされた数に差がありました。 データ型も全て同じなのに、なぜ差がうまれるのか考えました。 例えば、「数量」という列にアップデートをかけるとします。 アップデート前のある行の数量が「0」とします。 アップデートしたい数量も「0」とします。 Accessはアップデート前、アップデート後、同じ数量でアップデートする場合もカウントする。 MYSQLはアップデート前とアップデート後の数量が同じであれば、アップデートしない。 と考えましたが、この考えは正しいでしょうか? MySQL 複数テーブルのフィールドにUPDATE よろしくお願いします。 PHP5、MySQL5、 PEAR DB、Smarty にて開発しております。 標題にもありますように、LEFT JOINを使ってUPDATEできる方法を探しております。 ●Aテーブル(親) id | del_flag ----------------- 1 | 0 2 | 0 3 | 0 4 | 0 ●Bテーブル id | del_flag ----------------- 1 | 0 3 | 0 4 | 0 ●Cテーブル id | del_flag ----------------- 1 | 0 2 | 0 3 | 0 4 | 0 上記のような3つ、またはもしくはそれ以上テーブルがあったとします。 そこで、 Aテーブルの id 2 のdel_flagを1 とアップデートしたときに、 同時に全てのB、Cのテーブルの id 2 のdel_flagも 1 としたく思います。 Bテーブルには、id 2 が存在しないため、結果的にはCテーブルだけが更新されますが、 A、B,Cともに同一のid値 がある場合も考慮して、 アップデートしたいと思います。 そこで、PHP内で、一つ一つのテーブルを地道にアップデートすることは可能だとおもいますが、 一度のSQLでdel_flagの値を1とできる方法はございませんでしょうか? お手数ですが、 具体的なクエリを書いていただけると、大変助かります。 いろいろ調べましたが、なかなか上手くいかず・・・・。 よろしくお願いいいたします。 updateで複数行更新したい OracleのSQLについて質問があります。 UPDATE文を1度しか使わずに、抽出条件の異なるデータを複数個更新することは可能ですが? 例えば、 テーブル名:TEST カラム: A B C D UPDATE A B C D 100 010 350 300 → 100 010 200 250 100 020 350 000 → 100 020 200 280 という感じで更新したいのですが、どんなUPDATE文を組み立てればいいのか思いつきません。 なので、何かきっかけになるようなことでも構いませんので、教えてください。 よろしくお願いします。 SQLで複数のテーブルと結合したUPDATE文 普通のUPDATE文はUPDATEするテーブル名を一つ記入して UPDATE テーブルA SET フィールドA = 値A WHERE テーブルA.フィールドB = 値B みたいな感じですが、私のしたい事はと言うと UPDATE テーブルA,テーブルB,テーブルC SET A.フィールドA = 値A WHERE テーブルA.フィールドA = テーブルB.フィールドB AND テーブルB.フィールドB = テーブルC.フィールドC AND テーブルB.フィールドD = 値D AND テーブルC.フィールドE = 値E という具合に複数のテーブルがUPDATEするテーブルA以外のところで、互いに条件で結ばれており、FROM句でUPDATEしないテーブル名まで宣言しないといけなくなっています。そもそもこういうFROM句を使うUPDATE文は実行可能かも不明です。どなたか解決策お願いいたします。ちなみに開発ソフトはVBAを使っています。 MySQLの謎テーブル構成の実現方法 タイトルが意味不明ですみません 実現したいことはちょっと複雑なのですが 1.表面テーブル(view?)は1つのテーブルであり、そこにSELECTやINSERT、UPDATE、DELETEを発行。 2.裏は更新系テーブルと参照系テーブルに分かれている。 【更新】表系テーブル(view可)に発行した更新系コマンドで更新系テーブルを更新し、トリガー等でリアルタイムに参照系テーブルに反映。 【参照】表系テーブルにたいして発行したSELECT文は参照系テーブルをみる。 条件として入り口を分けることはできません。 MySQLのUPDATE文について 以下のようなスクリプトを書いた時に、phpMyAdminで、テーブルの中身をみると、 photo カラムには、添付画像ファイルのファイル名の値が入っているのに、 bbs.php側からアップデートしようとすると、ip_add以下passwordまでのカラムの 中身が空なのです。SQLの文法的に何かまちがってるでしょうか? 一応、ラストレコードのカラムを更新することを念頭に置いておりますが。 <file_upload.php> $sql = "INSERT INTO bbstbl_test (photo) VALUES('$upfilename');"; -------------------------------------------------------------------------------- <bbs.php> $sql = "UPDATE bbstbl_test SET ip_add = $ip_add, date = $date, name = $name, email = $email, title = $title, message = $message, password = $password;"; 【mySQL】テーブル構造のアップデート WEB向けCMSをつくっているのですが、 CMSで データベースのテーブルの カラムの追加や 型の変更が合った場合 レコードにできるだけ影響を与えずアップデートできるようにしたいのですが、 どうすればいいのでしょうか? WordPress等は、アップデート時にデータベース構造に関わるような改変が合った場合 どのようにアップデートをおこなっているのでしょうか? mysql のテーブルロックについて Mysqlにてテーブルをロックしようとして以下2つの方法を試し疑問に思ったので質問します。 1.select for update によるテーブルロック 以下のselect for update(where句にレコードを一意に特定できない条件を指定) をコマンドライン で実行。 select * from test where test_state=0 for update; 別に起動したコマンドラインから下記アップデート文を実行したところ ロックされることが確認できました。 update test set test_official=0 where test_id = 1; しかし、最初に実行した select for update 文を下記のようにしたところ上記update文はロックされず に実行されてしまいました。 select * from test where test_state is null for update; これはなぜでしょうか。 MySQLのUPDATE文が分かりません。 2007年12月31日付けでEmployeesテーブルのA型の人にだけ特別給料5000円を追加するというもので Employeesテーブルには血液型(BloodType)があり給料(Amount)や支払月(PayDate)は、Salaryテーブルにあります。 UPDATE Salary INNER JOIN Employees ON Salary.EmployeeID = Employees.EmployeeID SET Amount = Amount + 5000; AND SET PayDate = '2007-12-31' FROM Salary WHERE BloodType = 'A'; ネットなどで調べて上記のコードを書いて試してみたんですがうまくいきませんでした。 どのようなコードを書くと正しく実行できるのでしょうか? あるテーブルの内容を基準にして違うテーブルを更新するSQL文 教えて下さい。 あるテーブルに下記の内容があります。 ID│名称 ─┼─── 1│花 2│木 3│水 もうひとつのテーブルには、 ID│名称 ─┼─── 1│海 3│水 4│空 となっています。 最初のテーブルの全レコードを対象に、最初のテーブルのIDと同じ値がもうひとつの テーブルにある場合、もうひとつのテーブルをUPDATEし、存在しなければINSERTしたい です。 結果を ID│名称 ─┼─── 1|花 2│木 3│水 4│空 を期待しています。 このようにするSQL文を教えていただけませんでしょうか。 よろしくお願いします。 accessでのリンクテーブルの更新 いつもお世話になっております。 AccessからSQLServerのテーブルにリンクをはっています。 このリンクテーブルをupdate文で更新したいのですが、 「更新可能なクエリであることが必要」とでています。 以前にも類似の質問をしました。 http://okwave.jp/qa/q6581636.html しかし、いったん解決したのですが、別のところで同様の現象が でてしまいました。 調べると、リンク先のSQLServerのテーブルにはキーが存在していて、 Access側からリンクするときには自動的に一意設定されてしまいます。 発行したいupdate文はこのキーとは別の項目が一意になっていないと だめな条件付けがされているのです。 リンクをはるときに、SQLServer側ですでに設定されているキーとは 違った項目を一意項目として選択する方法はあるのでしょうか? 調べてみると、まったくキーのないテーブルをリンクするときは当然、 一意な項目を選べるのですが、キーがすでにある場合はだめな ようでした。 毎度のことでお手数なのですが、どうかよろしくお願い申し上げます。 mysqlのupdateはどこでやるのですか? ものすごい愚問だったらすみません。 mysqlのデータをupdateするのはどこでするのですか? 今はhp上に xxx.phpをつくり、phpで今日の日付を取得し、複数のmysqlテーブルから条件抽出selectし、、、と値を出し、xxx.phpで $sql_l = "UPDATE table名 SET tyo{$month} = '{$ticket_city_month[price]}' WHERE cityname = '{$cityname}'"; $result = mysql_query($sql_l); とし、ブラウザ上から更新して、updateしています。 一応UPDATEはできているのですが、数が多く一気にできません。 (select時にデータ量を少なくするため、あえてwhereで一部ずづやってます。) phpMyAdmin 2.6.0 MySQL 4.1.20 で、 phpMyAdminとNavicat MySQLも利用しています。 UPDATE文の中でJOIN PostgreSQLで、 update文の条件として、ほかのテーブルを使いたいのですが、 updateのなかで,left joinなど結合文をいれることはできるでしょうか? よろしくお願いします。 MySQLのIF文 MySQLのUPDATE文にIFは使えないのでしょうか? 例えば、 テーブル名:item 主キー:id フィールド名:stock、他 として、以下の文 UPDATE item SET stock = stock - 1 WHERE id = 20; を行う際に、「stock > 0」という条件を付け加える場合は、どのようにしたらいいでしょうか? ※以下の文 UPDATE item SET stock = stock - 1 IF stock > 0 WHERE id = 20; ではだめのようでした よろしくお願いします。 注目のQ&A 「前置詞」が入った曲といえば? 緊急性のない救急車の利用は罪になるの? 助手席で寝ると怒る運転手 世界がEV車に全部切り替えてしまうなら ハズキルーペのCMって…。 全て黒の5色ペンが、欲しいです 長距離だったりしても 老人ホームが自分の住所になるのか? 彼氏と付き合って2日目で別れを告げられショックです 店長のチクチク言葉の対処法 カテゴリ [技術者向] コンピューター データベース SQL ServerOraclePostgreSQLMySQLNoSQLその他(データベース) カテゴリ一覧を見る あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど