この質問にはすでに答えがあります。
mysql5.5のテーブルの構造
テーブル名:
id:
name:
detail:
ここでもテーブルを変更する:
ALTER TABLE tablename MODIFY name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL;
または
ALTER TABLE `tablename` CHANGE `name` `name` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL DEFAULT NOT NULL;
値を挿入した後
INSERT INTO `databasename`.`tablename` (`id`, `name`, `detail`) VALUES (NULL, '', 'asdfasfdadsfadsfafd');
クエリは正常に実行され、エラー行はテーブルに追加されていません。
どのように私はそのような空またはnullを防ぐことができます。
よろしく
これを試して:
ALTER TABLE tablename
MODIFY COLUMN name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL CHECK (name <> '');
デモ:
mysql> create table tablename(id int(2) not null, something varchar(25) null, primary key(id));
Query OK, 0 rows affected (0.15 sec)
mysql> insert into tablename values(0,'hello');
Query OK, 1 row affected (0.38 sec)
mysql> insert into tablename values(1,'salut');
Query OK, 1 row affected (0.31 sec)
mysql> select * from tablename;
+----+-----------+
| id | something |
+----+-----------+
| 0 | hello |
| 1 | salut |
+----+-----------+
2 rows in set (0.00 sec)
今、私は実行しますUPDATE
コマンド:
mysql> ALTER TABLE tablename MODIFY COLUMN something VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL;
Query OK, 2 rows affected (0.70 sec)
Records: 2 Duplicates: 0 Warnings: 0
挿入します普通の行:
mysql> insert into tablename values(2,'france');
Query OK, 1 row affected (0.29 sec)
しかし、それは私がNULL値を挿入することを可能にしません:
mysql> insert into tablename values(3,NULL);
ERROR 1048 (23000): Column 'something' cannot be null
私は確かめるためにチェックします:
mysql> select * from tablename;
+----+-----------+
| id | something |
+----+-----------+
| 0 | hello |
| 1 | salut |
| 2 | france |
+----+-----------+
3 rows in set (0.00 sec)
''
とは違うNULL
なぜなら''
空の文字列を意味するので、もちろんそれを受け入れます - user3522371
null
値が異なるNOT NULL
制約は空文字列を防ぎません。空の文字列の場合は、使用できますcheck
この質問のような制約stackoverflow.com/questions/2514178/… - Mahmoud Gamal