2017-06-23 11 views
0

次の結果を得るための解決策を探しています。空の文字列が渡された場合のデフォルト値の設定MySQL

MySQLクエリに空の文字列''がある場合は、テーブルスキーマで定義されているデフォルト値を使用します。この場合

例えば

INSERT INTO `users`(`name`,`nickname`,`balance`) 
VALUES ('hello','world',''); 

バランス列のデフォルト値は、それが代わりに空の文字列を設定しなければならない0である場合。

これは可能ですか?

答えて

0

あなたは、データベースの列のデフォルト値を使用する場合は、この作品のデフォルト値を取得するために、すべてのフィールドを渡すNULLを渡すかどうするか持っているので、

INSERT INTO `users`(`name`,`nickname`,`balance`) 
VALUES ('hello','world',DEFAULT); 

または

INSERT INTO `users`(`name`,`nickname`) 
VALUES ('hello','world'); 

のいずれか。

編集:あなたは、テーブルを作成するときに は、デフォルト値が定義されている、例えば

CREATE TABLE `users` (
    `name` varchar(45) NOT NULL, 
    `nickname` varchar(45) NOT NULL, 
    `balance` int(11) NOT NULL DEFAULT '0' 
) 
+0

最初の文は私のために動作しません( 'ERROR 1048(23000):列「バランス」null'なのですることはできません)、あなたは公開することができます例がありますか?。 – wchiquito

+0

@wchiquito列のデフォルト値を定義する方法のcreate tableの例を追加しました。 –

+0

例のおかげで、しかし、最初の文は私に失敗します。例[db-fiddle](https://www.db-fiddle.com/f/iqKtbeKFKxe6FXMcrUohw3/0)を参照してください。 – wchiquito

0

トリガーを作成することですより良い方法。 Mysql documentationのトリガーについて詳しくは、こちらをご覧ください。詳細については、同様の答えはhereです。

この質問については、ここでトリガーを実装します。

delimiter # 
create trigger nonEmptyString 
before insert 
on users 
for each row 

BEGIN 
IF NEW.balance = '' THEN 
    SELECT COLUMN_DEFAULT INTO @def 
    FROM information_schema.COLUMNS 
    WHERE 
    table_schema = 'Schema Name' 
    AND table_name = 'users' 
    AND column_name = 'balance'; 
    SET NEW.balance = @def; 
END IF; 

end# 

delimiter ; 

注:スキーマの名前でスキーマ名を交換してください。

+0

'Schema Name'の代わりに[DATABASE()](https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_database)関数を使用することができます。 – wchiquito

0

(私はあなたがとにかくやっていると思います)の代わりに変数($ balanceなど)を使用します。お問い合わせの前の行に

if(strlen(trim($balance))==0){ $balance='0'; } 

また、あなたの説明については少し不格好ですMySQLの場合の構文を、使用していますが、非常に多くのポイントに可能性があります。

MySQL update CASE WHEN/THEN/ELSE

関連する問題