
皆さん、はじめまして。
今回業務mysqlでデータベースを作成することになりました。
ビューを用いて二つのテーブルに値の追加・削除・更新をしようと試みたのですが、追加、削除が上手くできませんでした。
mysqlのバージョンは5.0.37です。
今回以下のコマンドを実行しました。
1.<cwork1テーブル作成>
create table cwork1
(testname1 varchar(255),
testname2 varchar(255),
primary key(testname1))TYPE=INNODB;
primary key(id));
2.<cwork2テーブル作成>
create table cwork2
(r_name1 varchar(255),
yakusyoku varchar(255),
foreign key(r_name1) references cwork1(testname1) ON DELETE CASCADE ON UPDATE CASCADE
)TYPE=INNODB;
3.<cwork1テーブルに追加>
insert into cwork1(testname1,testname2) values('山田','太郎');
4.<cwork2テーブルに追加>
insert into cwork2(r_name1,yakusyoku) values('山田','一般');
5.<ビュー作成>
CREATE VIEW testview AS SELECT * FROM cwork1,cwork2 where cwork1.testname1=cwork2.r_name1;
この5つを実行後、
<insert実行>
insert into testview(testname1,testname2,yakusyoku) values('斉藤','花子','一般');
ERROR 1395 (HY000):Can not modify more than one base table through a join view 'sampledb.testview'
<delete実行>
delete from testview where testname1='山田';
ERROR 1395 (HY000): Can not delete from join view 'sampledb.testview'
というようにinsert、delete文実行時にエラーが帰ってきてしまいます。
原因がわかるかたがいらっしゃいましたらご教授のほうよろしくお願いします。
No.2ベストアンサー
- 回答日時:
結合したりグループ化した情報を表示したりするViewの場合、
表示されるデータだけは、DBMSがデータが特定できない可能性があるため、読み取り専用になります。
あなたの提示した例のような単純な結合であればDBMSががんばれば、実は解決できるのですが、いちいちどのView定義(結合したりグループ化した)が更新可能かを解析していてはコストがかかるので、単純に禁止しているのだと思います。
逆に結合したりグループ化していないViewは更新させてくれるDBMSもあったはずです。
例:create view test as select testname1 from cwork1;
この場合、testname1の列を一部非表示にしているだけですので、
DBMSはレコードを更新出来る。
delete from test where testname1 = '山田';
mysqlが出来るかどうかは、当方テスト環境が無いためわかりませんが、
あなたのdelete文に対するエラー文に、
join viewと明示されているので、join していなければ更新してくれそうですけど。
No.1
- 回答日時:
MySQLあまり詳しくないのですが。
VIEWと言うものはもともと複数テーブルの参照をかんたんに行う為のテーブルです。
複数のテーブルから特定カラムを持ってきているのでその他のレコードからも参照される可能性があります。
今回は1対1のレコードですが1対多などの場合にdeleteが出来ると
ほかからの参照が出来なくなりますよね。
そのためVIEWの更新は出来ないのではないでしょうか。
早期回答ありがとうございます。
確かにそういわれますとそのような気がします。
削除に関してですが 制約で消えてくれるかなとおもっておりました。
もう少し試してみることにします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- PHP php エラー 2 2022/10/23 16:43
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルが作成できない
-
DBの文字コード切り替え
-
ビューに追加・削除が出来ません。
-
一つ前に戻るには…
-
mysqlでJOIN文
-
コラムの値からコラム・テーブ...
-
update文で改行を入れる
-
ユーザーテーブルとシステムテ...
-
更新クエリが実行できず、困っ...
-
MSDEへのデータのインポート
-
ADO.NETのDataSetのコピー
-
「テーブルに座って……」という...
-
SQL削除条件について
-
Accessでデータシートに同じデ...
-
複数テーブル表示
-
SQL2008 クエリ文について
-
【PHP&MySQL】ユニークな大量デ...
-
MySQLのDB内容をWEB上に表示す...
-
LINQでn:nテーブルを階層オブジ...
-
カラム位置変更
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
一つ前に戻るには…
-
1列について重複行を除いて全列...
-
ビューに追加・削除が出来ません。
-
mysqlでJOIN文
-
挿入先テーブルに存在しないレ...
-
DBの文字コード切り替え
-
1000万件のデータをmysqlで効率...
-
PHP上のSQLで、SELECT文をいく...
-
mysqlのフィールド名
-
mysqlでのテーブル削除について...
-
最大値を持つレコードを削除したい
-
複数の列にまたがってユニーク...
-
MySQL INSERT文 エラー
-
【ストアドプロシージャ】条件...
-
テーブル作成時のエラーについ...
-
MySQLでテーブルとビューの区別
-
空欄のあるレコードの処理
-
会社の飲み会の幹事になり、座...
-
「テーブルに座って……」という...
-
SQL、2つのテーブルで条件一致...
おすすめ情報