- - PR -
Mysql カラムの型でInsertを制御したい
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-09-07 16:43
MySQLにおいて、Insertで登録される値が、カラムの型とあっていない場合、
(例えば、int型のカラムに文字'AAA'がきた場合) Insertを実施しないよう、エラーで返したいのですが、うまくいきません。 どなたか、ご教授願います。 ■事象説明 以下のテーブル構造があるとします。 CREATE TABLE todo ( ID int(11) NOT NULL default '0', Site int(11) , PRIMARY KEY (ID) ) TYPE=MyISAM; このテーブルに対して、Insertを実施します。 insert into todo values(1,100); insert into todo values(2,"aaa"); selectすると以下のようになります。 mysql> select * from todo; +----+------+ | ID | Site | +----+------+ | 1 | 100 | | 2 | 0 | +----+------+ 2 rows in set (0.00 sec) aaaが勝手に0に置き換わって、登録されてしまいます。 2行目は登録されず、エラーで返すためにはどのようにすればよろしいでしょうか? | ||||
|
投稿日時: 2005-09-07 17:10
とりあえず、リテラルはシングルクォートで囲む必要がありますよ。 | ||||
|
投稿日時: 2005-09-07 18:21
さっそくのご回答ありがとうございました。
insert into todo values(1,100); insert into todo values(2,'aaa'); 上記でやってみましたが、結果は同じでした。 +----+------+ | ID | Site | +----+------+ | 1 | 100 | | 2 | 0 | +----+------+ 2 rows in set (0.00 sec) | ||||
|
投稿日時: 2005-09-07 18:24
insert into todo values(1,100);
insert into todo values(2,aaa); ちなみに、上記でやったら、 ERROR 1054 at line 2: Unknown column 'aaa' in 'field list' となりました。当たり前といったら、当たり前ですが・・ | ||||
|
投稿日時: 2005-09-08 08:49
MySQLは使ってないのですが、マニュアルに、
> 数値型のカラムへの '10.34 a' などの値の設定。この場合、後続のガーベジは除去され、 > 残りの数値の部分だけが挿入される。値が数値として意味をなさない場合、 > カラムの値は 0 に設定される。 と書かれているので、仕様のようですね。 また、同じページに > MySQL では、フィールド内容のチェックはデータベースサーバではなく > アプリケーション側で行う、という見解に立っている。 という解説があります。 http://dev.mysql.com/doc/mysql/ja/insert.html ちょっと変わったRDBMSですね。 | ||||
|
投稿日時: 2005-09-15 13:49
なるほど、ありがとうございました。
DBではじけるエラーはDB側にしたかったのですが・・・ ま、タダだから、しょうがないか・・ | ||||
1
