• ベストアンサー

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までアッデートされてしまうのですが何ででしょう? 何か特別なことしなくてはいけないのでしょうか?

noname#244833
noname#244833

質問者が選んだベストアンサー

  • ベストアンサー
  • akkun2k
  • ベストアンサー率71% (5/7)
回答No.2

TIMESTAMP型の仕様です。 TIMESTAMP型は、INSERT や UPDATE の際に自動的に現在日時で更新されます。 複数のTIMESTAMP型のフィールドがある場合は最初の一つだけが更新されます。 任意の日時を保管する場合、DATETIME型を用いるようにしましょう。

noname#244833
質問者

お礼

両方ともDATETIME型変え UPDATEさせるようにしたらうまくいくようになりました。 ありがとうございました。

その他の回答 (1)

  • ukkey119
  • ベストアンサー率27% (36/129)
回答No.1

 MySQLが一般のSQLとの違いが解らないのですが、SQLですと、 update テーブル名 set 更新field名 = 更新データ where 条件  となるはずですので、updateのあとにテーブル名が抜けているということはありませんか?

参考URL:
http://www.rfs.co.jp/sitebuilder/sql/03/01.html
noname#244833
質問者

補足

すいません。 update tb set b='あ',c='い',e=NULL where a='1'; のようにテーブル名は書いています。

関連するQ&A

  • mysqlのクエリの質問です。

    最近phpmyadminを使い始めたmysqlの初心者です。 テーブルAにはフィールドC(int(10))とフィールドD(varchar(32))があります。 テーブルBにはフィールドE(int(10))とフィールドF(text)があります。 フィールドCとフィールドEは同じキーです。(申し訳ありません。正しい表現方法がわかりません。) テーブルAのレコードの中でフィールドDの値がXYZのものであるときのみ、フィールドCをフィールドEに入れたレコードをテーブルBに作りたいと思っています。この場合、どのようなクエリを書いたらよろしいでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 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~55位まで) 下記の2つのテーブルがあります。 rankingscoreinfo フィールド名 型 長さ missionid integer 4 NOT NULL name varchar 20 NOT NULL skill integer 4 NOT NULL score integer 4 NOT NULL rankinginfo フィールド名 型 長さ NOT NULL missionid integer 4 NOT NULL name varchar 20 NOT NULL kind integer 4 NOT NULL missionidとname2つのテーブルの共通フィールドです。 この二つを組み合わせて同順位を考慮したスコアランキングを作成したいです。 1位のscoreが3人同点の場合、3人のスコアランキングは1位で次の人は4位になるようにしたいです。 SQLを組んだのですがレコード数が増えるにつれてどんどんSQLが返ってくる速度が遅くなって困っています。 この二つのテーブルの最速のSQLを組みたいのですがどなたか教えて下さい。 とりあえずINDEXは考慮なしでお願いします。 参考までに私が組んだSQLは下記のものになります。 SELECT d.name FROM (SELECT *, (SELECT COUNT(a.score)+1 FROM rankingscoreinfo AS a , rankinginfo as b WHERE a.missionid=10 AND a.skill= 2 AND b.kind = 2 AND a.missionid = b.missionid AND a.name = b.name AND a.score > c.score ) AS score_rank FROM rankingscoreinfo AS c WHERE c.missionid = 10 AND c.score AND c.skill=2 ) AS d , rankinginfo as e WHERE e.missionid = 10 AND e.kind = 2 AND d.skill = 2 AND d.missionid = e.missionid AND d.name = e.name AND d.score_rank >=1 AND d.score_rank <= 55 ORDER BY score_rank

    • ベストアンサー
    • MySQL
  • [MYSQL]TIMESTAMPをWHERE句に指定しUPDATEする方法

    以下のようにテーブルを作成し、TIMESTAMP型のカラムをキーにUPDATEをしたいと考えています。 create table test(time timestamp, amount int); insert into test values('2008-01-07 19:15:12',0); update test set amount = -1 where time = '2008-01-07 19:15:12'; ところがMYSQLではUPDATE後、TIMESTAMPのカラムが2008年から2009年に変化します。ORACLEで試しましたが、TIMESTAMP型のカラムは変わりませんでした。 +---------------------+--------+ | time | amount | +---------------------+--------+ | 2009-06-30 10:04:53 | -1 | +---------------------+--------+ MYSQLの独自の仕様があるのでしょうか? MYSQL 5.1.35(mysql-essential-5.1.35-win32.msi) Windows 2003 Server Standard Edition R2 MYISAM

    • ベストアンサー
    • MySQL
  • 特定のフィールドが更新されたときだけ日時を更新する

    targetのデータが変わった・更新されたときに、update_dayをその日時に更新したいと考えています。 フィールドは、field_1, field_2, target, field_4, field_5, update_day, new_day ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー field_1=int型、primary key field_2=varchar型、 target=float型(7.3) field_4=boolean型 field_5=text型 update_day=timestamp型、NULL、 default CURRENT_TIMESTAMP、 on update CURRENT_TIMESTAMP new_day=timestamp型、NOT NULL、 default '0000-00-00 00:00:00' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー target以外のフィールドのデータが更新されたときにもupdate_dayが更新されてしまいます。 ■field_1, field_2, field_4, field_5 ■target, update_day, new_day とテーブルを分けるしか方法がありませんか??? ぐっちゃりしてしまうため極力テーブルを分けたくありません。

    • ベストアンサー
    • PHP
  • 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文の副問い合わせ使用

    2つのテーブルを結合して、片方のテーブルをUpdateしたいが、Update文での結合方法がよくわかりません。 table_a の excode列が更新対象で、table_aのname列とtable_bのname列の等価結合です。 テーブルとデータの例は以下です。 テーブル1:table_a create table table_a (code int(3), name varchar(10), excode int(6)); insert into table_a values (101,'あいう',0),(102,'かきく',0),(103,'たちつ',0),(201,'なにぬ',0),(301,'わをん',0); テーブル2:table_b create table table_b (excode int(6), name varchar(10)); insert into table_b values (500101,'あいう'),(500102,'かきく'),(500103,'たちつ'); 期待する結果は以下です。 SQL> select * from table_a; +------+--------+--------+ | code | name | excode | +------+--------+--------+ | 101 | あいう | 500101 | | 102 | かきく | 500102 | | 103 | たちつ | 500103 | +------+--------+--------+ MySQLバージョンは、5.0です。 よろしくお願いいたします。

  • SQL文で

    すみません。質問させてください。 A,B,C,D,Eと5個のフィールドで構成されたテーブルtableがあるとします。 tableにはデータがすべて格納され(NULLなし)ています。 ですが、フィールドA,C,DについてA,C,Dとも同じデータが格納される ことがあります。 その重複したデータ以外を取得したいのですが (要するにフィールドA,C,Dでユニークのデータのみ取得) SQL文でどのように書けばいいかわかりません。 よろしくお願いいたします

  • インデックスの作り方

    MySQL4.1.19を使っているのですが、ユニークなインデックスの作り方で困っています。 例えば、 create table dttest ( a int NOT NULL , b int NOT NULL , c int NOT NULL , d int NOT NULL , CONSTRAINT PK_dttest PRIMARY KEY ( b ) ) type=InnoDB; というテーブルがあったとして、 aフィールドはユニークのインデックスを作り cフィールドは、重複可能なインデックスを作りには どうすればよいのでしょうか? 初歩的な質問で申し訳ありませんが、 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Oracle10gのSQL文についての質問です。

    Oracle10gのSQL文についての質問です。 [A]テーブルに CODE(key) NAME と、フィールドがあります。 A NAME-A B NAME-B C NAME-C D NAME-D E NAME-E と、データが入っています。 [B]テーブルに CODE(key) LINE(key) BIKO と、フィールドがあります。 A 1 BIKO-A-1 A 2 A 3 BIKO-A-3 B 1 B 2 B 3 C 1 C 2 BIKO-B-2 C 3 D 1 BIKO-D-1 D 2 BIKO-D-2 D 3 BIKO-D-3 E 1 E 2 E 3 BIKO-E-3 と、データが入っています。 結果が CODE(key) LINE(key) BIKO と、フィールドがあります。 A 1 BIKO-A-1 A 2 BIKO-A-1 A 3 BIKO-A-1 B 1 (null) B 2 (null) B 3 (null) C 1 BIKO-B-2 C 2 BIKO-B-2 C 3 BIKO-B-2 D 1 BIKO-D-1 D 2 BIKO-D-1 D 3 BIKO-D-1 E 1 BIKO-E-3 E 2 BIKO-E-3 E 3 BIKO-E-3 と、したいのです。 つまり、[B]テーブルのLINEが一番小さいBIKOが欲しいのです。 色々と考えてみましたが、解りません。 宜しくお願い致します。