質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

2回答

22278閲覧

MySQLにおけるNOT NULLとデフォルト値について

m1st

総合スコア21

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2018/12/04 14:01

## 前提条件
現在、最新バージョンのMySQLを使用しています。その時に使用していたテーブルが以下の通りです。

MySQL

1user 2|Field|Type |Null|Key|Default|Extra | 3|id |int(9) |NO |PRI|NULL |auto_increment| 4|name |varchar(64) |NO | |NULL | | 5|mail |varchar(64) |YES | |NULL | | 6|hash |varchar(255)|NO | |NULL | |

上記のように作成した際に下記の認識で作成しました。
0. Default指定がある場合
任意の内容
0. Default指定がない場合、かつNULLを許可している場合
NULL
0. Default指定がない、かつNULLを許可していない場合
NULL(指定する値が無いため)

質問したい点

  • 上記の認識は正しいのでしょうか? また、このテーブルは間違いでしょうか?
  • Not NULL制約を付与したカラムに対してDefault値がNULLになっているのは直感的にまずい気がするのですが、明示的にDefault値を指定しない場合はどのようにするのか?
  • なぜMySQLではNot NULL制約を付与しているのにDefault値を指定しないと、自動的にNULLが入るのか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

試せばわかることですね

not nullにdefault null

SQL

1create table tbl( 2c1 int null default null, 3c2 int null default 0, 4c3 int null, 5c4 int not null default 0, 6c5 int not null default null, 7c6 int not null, 8val int);

※c5が制約エラー

not nullにdefaultなし

SQL

1create table tbl( 2c1 int null default null, 3c2 int null default 0, 4c3 int null, 5c4 int not null default 0, 6c6 int not null, 7val int);

OK

SQL

1insert into tbl(val) values(100);

※c6が制約エラー

それ以外は未設定でOK

SQL

1create table tbl( 2c1 int null default null, 3c2 int null default 0, 4c3 int null, 5c4 int not null default 0, 6val int);

OK

SQL

1insert into tbl(val) values(100);

OK

SQL

1insert into tbl values(null,null,null,null,100);

not nullにnullは挿入できない

投稿2018/12/04 14:19

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m1st

2018/12/04 14:51 編集

具体的にかつ素早い回答していただいてありがとうございます。 とても分かりやすかったです。自分が何か勘違いをしていたようです。
guest

0

なぜMySQLではNot NULL制約を付与しているのにDefault値を指定しないと、自動的にNULLが入るのか?

NUllが入りますか?
回答でもある訳ですが、通常はエラーです。

投稿2018/12/04 14:15

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m1st

2018/12/04 14:44

回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問