12

だから、これはかなり簡単なように思えますし、私は以前にこれをやったことがあると断言しますが、何らかの理由でうまくいきません.

私はMAMP約200列のテーブルを使用しており、NULLまたは空のデータが挿入された場合、約20列をデフォルトで0に設定したいと考えています。

これは、テーブルがどのように見えるか、およびデフォルトで 0 にしたい列に対して行ったことの小さな例です。

CREATE TABLE `listings` (
  `ListingID` int(11) NOT NULL,
  `BathsFull` int(6) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ListingID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

BathsFull問題に設定したことに注意してください。NOT NULL DEFAULT '0'空のデータが渡されると、SQLエラーが発生しますSQLSTATE[23000]: Integrity constraint violation: 1048 Column 'BathsFull' cannot be null

BathsFull acceptsNULL andDEFAULT '0'も試してみましたが、空のデータが渡されると、NULL代わりにテーブルが表示され0ます。

ここで何か不足していますか?ある種のトリガーを書く必要がありますか? 必要がなければ、DB に入れる前にスクリプト内のデータをスクラブしたくありません。

4

5 に答える 5

2

INSERT クエリを投稿するのを忘れていましたが、問題があると確信しています。これは期待どおりに機能します。

insert into listings (ListingID) values(1)

...省略BathsFullしたため、MySQLはデフォルトを使用します。これはしません:

insert into listings (ListingID, BathsFull) values(1, null);

...あなたが望む NULLことをMySQLに伝えているからです。

于 2013-04-04T15:01:12.130 に答える
1

多分あなたはこれを試してみるべきです:

insert into listings (ListingID, ListingID, BathsFull) 
values (@listing_id, @ListingID, isnull(BathsFull, 0)
于 2013-04-04T14:55:29.923 に答える
1

キーワードを使用して、default挿入中に列のデフォルト値を取得できます。

例 :

INSERT INTO listings(ListingID, BathsFull) VALUES (2,DEFAULT);
于 2013-04-04T14:55:11.613 に答える