MySQLからWindowAzureに移行してidentityの値の変更/自動更新について

このQ&Aのポイント
  • MySQLからWindowAzureに移行し、identityの値の変更や自動更新について困っています
  • identityを使用してテーブルを作成したが、更新ができなくて困っています。データの追加ではIDENTITY_INSERTをONにすれば問題ありませんが、更新時はどうすればよいでしょうか?複数個所からの更新をするので、すべての箇所に記述したくありません。
  • テーブルを更新する際にデータを自動で更新したいですが、MySQLではon updateを使用しています。SQLAzureではどのように記述すればよいでしょうか?
回答を見る
  • ベストアンサー

identityの値の変更/自動更新について

MySQLからWindowAzureに移行しています。 1.identityが設定されている値の変更 auto_incrementが使えないようなので、identityを使用して下記のテーブルを作成しました。 ですが、identityだと更新ができないので困っています。 CREATE TABLE test ( id int NOT NULL identity, text nvarchar(255) NOT NULL, PRIMARY KEY (id), ); データの追加に関しては、IDENTITY_INSERTをONにすることでできますが、更新時はどうすればよいでしょうか? データの追加の場合は、使用の際上記のように、毎回ONにする必要がありますか?(DB接続時にONにしてしまえばよい/テーブル作成時に記述で可能ではない?) 複数個所から更新をするので、すべての箇所に記述するのは可能な限りしたくありません。 2.データの自動更新 テーブルを更新した際に、データを自動で更新したいのですが、mysqlでは on update で可能ですが、 SQLAzureでは、下記のSQLをどのように記述すればよいでしょうか? create table time( id int not null, time1 datetime NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY(id) ); よろしくお願いします。

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

> 1.identityが設定されている値の変更 SQLServerでは基本的に想定していないと思います。 そもそも、identityは自動で採番したい時に使用する機能なので、それを更新したい場面が想像できません。MySQLのauto_incrementの項目では挿入時の値指定や更新ができますが、その場合主キーの重複エラーの可能性が出てきます。 > 2.データの自動更新 普通は更新トリガーを使うのではないのでしょうか。

関連するQ&A

  • IDENTITY指定項目の値に付きまして

    お世話になります。 CREATE TABLE [AAAA] ( [ID] [decimal](5,0) IDENTITY (1,1) NOT NULL, 以下項目が続きます CONSTRAINT [PK_AAAA] PRIMARY KEY CLUSTED ( [ID] ) ON [PRIMARY] ) ON [PRIMARY] で作成されたテーブルがあります。 insertの度、[ID]は1ずつインクリメントされ、 又deleteされます度、当該[ID]番号は削除されて行く事と思います。 この削除されました[ID]の所にデータをinsertすることは可能でしょうか。 初歩的な質問で大変申し訳ございませんが、ご教授頂けますよう よろしくお願いいたします。

  • 特定のフィールドが更新されたときだけ日時を更新する

    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
  • PostgreSQLからMySQLへ変換

    現在ECサイトに追加カスタマイズ機能を導入したいと考えているのですが、 その際の使用コードが以下のようにPostgreSQLの記載となっており、 使用しているphpMyAdminにてSQLコードを入力するとエラーとなってしまいます。 ↓PostgreSQLコード CREATE TABLE dtb_bookmark ( bookmark_id serial NOT NULL, customer_id integer NOT NULL, product_id integer NOT NULL, memo text, create_date timestamp without time zone NOT NULL, update_date timestamp without time zone NOT NULL, del_flg integer ); ALTER TABLE ONLY dtb_bookmark ADD CONSTRAINT dtb_bookmark_pkey PRIMARY KEY (bookmark_id); COMMENT ON TABLE dtb_bookmark IS 'お気に入り情報'; エラーはtimestamp型とALTER以降の文で発生致します。 mysql文にて解釈させるにはどのように変更したらよろしいのでしょうか? 使用mysqlバージョンはMySQL 4.1.21です。 アドバイスなど頂けましたら幸いです。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 投稿サイトをサクッと作りたい

    http://webeg.info/php-course/step3-030/のログイン画面をログインして、投稿サイトを作りたいのですが、 ログイン情報はどこで定義してなんというものになっているのでしょうか? 空にして もログインできません。 投稿部分だけが欲しいのですが、ログインしないと作れないようです。 もちろんもっと簡単に投稿サイトが作れる情報があればそれでも構いません。 CREATE TABLE `users` ( `user_id` int(11) NOT NULL COMMENT '通しID', `user_loginid` varchar(20) NOT NULL COMMENT 'ログインID', `user_password` varchar(100) NOT NULL COMMENT 'パスワード', `user_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日時', `user_created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '作成日時' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='管理画面ユーザー'; ALTER TABLE `users` ADD PRIMARY KEY (`user_id`); ALTER TABLE `users` MODIFY `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '通しID', AUTO_INCREMENT=1; アカウントの追加 を実行しただけなのでPW、IDは空と考えてよいでしょうか? パスワードの所には長さ100とコメントパスワードとしか記載がないのですがdbではどこにpwを入れるのですか? この場合は空と考えるべきでしょうか? 投稿サイトをサクッと作りたいだけなのですが、もっと簡単に作る方法はないのでしょうか?

    • ベストアンサー
    • MySQL
  • identity属性の列に自動採番(SQL)

    ID、name、seibetuという列を持つ、membersというテーブルがあり、INSERT文を実行してテーブルに値を入れたいと考えています。 IDがIs IDENTITYの値がTRUEになっている列で、NOT NULLです。 以下のクエリを実行したところ、IDにNULLが入るといったエラーが起きます。 SET IDENTITY_INSERT members ON INSERT INTO members (seibetu, name, ID) VALUES ('男', 'すずき', @@IDENTITY) 何か問題があるのでしょうか? お分かりの方いらっしゃいましたらよろしくお願いします。

  • 同じ値が存在しないレコードの抽出方法について

    下記のテーブルの中で、 b_tableテーブルのidフィールドの値が1つしかない(重複していない)フィールドを抽出したいと思います(この場合ですが、3002と3004を抽出したいです)。 その際、抽出条件を下記の【※※※ここに記述を追加※※※】に記述することで実現したいと思ったのですが、その場合どのようなsql文を書けば良いか分かりませんでした。 その為、このような場合、どのようなsql文を書けば良いかご存知の方がいらっしゃいましたら、ご教示の程、よろしくお願いします。 なお、【※※※ここに記述を追加※※※】に記述を追加したい理由ですが、既存のSQL文にこの条件を追加したいのですが、WHERE以前は別の部分に記述されており、その部分が変更できない為です。 なお、下記のWHERE以前の記述はあくまでサンプルであり、重複していないフィールドを抽出するSQL文と直接関係のない記述でしたら、変更していただいても大丈夫かもしれません(この点曖昧で申し訳ございません。移植元の記述ではテーブルを連結しているように見受けられたため、連結の仕方が多少変わる分には問題ないのかなと思っています。この点については実際にソースをご提示いただければ、それを元に移植させていただいた上で、ご回答差し上げたいと思います)。 ■SQL文 SELECT a.id FROM `a_table` AS a LEFT JOIN `b_table` AS b ON a.id = b.id WHERE 【※※※ここに記述を追加※※※】 ■a_tableテーブル CREATE TABLE IF NOT EXISTS `a_table` ( `auto_id` int(3) NOT NULL, `id` varchar(4) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `a_table` (`auto_id`, `id`) VALUES (101, '3001'), (102, '3002'), (103, '3003'), (104, '3004'); ■b_tableテーブル CREATE TABLE IF NOT EXISTS `b_table` ( `auto_id` int(3) NOT NULL, `id` varchar(4) NOT NULL, `no` varchar(1) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `b_table` (`auto_id`, `id`, `no`) VALUES (101, '3001', '1'), (102, '3001', '2'), (103, '3001', '3'), (104, '3002', '2'), (105, '3003', '1'), (106, '3003', '2'), (107, '3004', '1'); 以上、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • create時にFOREIGN KEYでエラー

    以下のSQL文を実行すると CREATE TABLE if not exists table_A ( id int(11) not null auto_increment, company_id int(11) not null, created_at datetime NOT NULL, updated_at timestamp NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE if not exists table_B ( id int(11) not null auto_increment, from_id int(11) not null, company_id int(11) not null, created_at datetime NOT NULL, updated_at timestamp NOT NULL, PRIMARY KEY (id) FOREIGN KEY (from_id) REFERENCES table_A(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 上記を実行すると以下のエラーがでます。 #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 'FOREIGN KEY (from_id) REFERENCES table_A(id) ON DELETE CASCADE ) ENGINE=Inn' at line 8 解決方法をご存知の方はご教示頂けますと幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • FOREIGN KEYの追加について。

    FOREIGN KEYの追加について。 MySQL5.1.37 CREATE TABLE `goods` ( `id` int NOT NULL AUTO_INCREMENT, `num` int NOT NULL DEFAULT '1', PRIMARY KEY (`id`), index (`num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `sales` ( `id` int NOT NULL AUTO_INCREMENT, `num` int NOT NULL DEFAULT '1', PRIMARY KEY (`id`), index (`num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 上記のようなテーブルを作り、salesテーブルにCSVファイルからデータをインポートしたのち、FOREIGN KEYを子テーブルに追加したいのですが、下記のようなエラーになります。 ALTER TABLE `sales` ADD FOREIGN KEY ( `num` ) REFERENCES `test`.`goods` ( `num` ) ON UPDATE CASCADE ; MySQLのメッセージ: ドキュメント #1452 - Cannot add or update a child row: a foreign key constraint fails (`test`.`#sql-561_cf`, CONSTRAINT `#sql-561_cf_ibfk_1` FOREIGN KEY (`num`) REFERENCES `goods` (`num`) ON UPDATE CASCADE) データをインポートしたのちにFOREIGN KEYを追加するにはどのようにしたらいいのでしょうか?

  • MySQLのFOREIGN KEYについて

     MySQLのFOREIGN KEYについて質問です。 下記のようにitemテーブルを作ってからarrivalhistoryテーブルを作ろうとすると ERROR 1005 (HY000): Can't create table 'xxx_db.arrivalhistory' (errno: 150) というエラーが出てしまいます。 自分でもForeign keyの作り方等調べてはみたのですが、 上手く解決することができません。 どなたかアドバイス下さい。お願いします。 ・親 create table item ( id bigint not null primary key, itemno VARCHAR(50) ) engine=InnoDB; ・子 create table arrivalhistory( id int primary key, itemno varchar(50), arrivaldate date, index(itemno), foreign key(itemno) references item(itemno) on update cascade on delete cascade ) engine=InnoDB;

    • ベストアンサー
    • MySQL
  • create table時のdefaultにLAST_INSERT_ID()を使う

    いつもお世話になってます。 現在、postgreSQL→MySQLへの移行作業をしようとしています。 型が微妙に違う等の修正を手作業で行っているのですが、 postgreSQLの下記の型(default値)をMySQLでどう設定してよいかわからずに困っています。 ■postgreSQLのcreate文 CREATE TABLE test_tab ( id_i serial NOT NULL, parent_id integer DEFAULT currval('inquiry_tab_id_i_seq'::text) ) 下記のような感じでMySQLで出来るかなと思ったらうまく出来ませんでした。 ■試してみたMySQLのcreate文 CREATE TABLE test_tab ( id_i int primary key not null auto_increment, parent_id integer DEFAULT LAST_INSERT_ID() ) どう設定すれば、同じ設定のテーブルが作れるのか、どなたかご教授願えませんでしょうか。 よろしくお願いします。