Mysql 表約束(基礎6)
準備基礎環境:
mysql> create database mydb2; #創建一個名為 mydb2的數據庫
Query OK, 1 row affected (0.00 sec)
mysql> show databases; #查看創建的數據庫, mydb2已經創建成功。
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb2 |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use mydb2; #進入新建的數據庫。
Database changed
mysql> select database(); #查看當前所在的數據庫。
+------------+
| database() |
+------------+
| mydb2 |
+------------+
1 row in set (0.00 sec)
mysql>
mysql> show tables; #查看數據庫,裏面沒有表
Empty set (0.00 sec)
##################非空約束##################
mysql> create table tb1( #創建表
-> id int,
-> name varchar(20) not null #這裏使用not null約束值不能為空。
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> desc tb1; #查看表結構,name字段不為空。
#測試插入一條數據,name字段的值為空。結果會報錯。
mysql> insert into tb1(id) value(1); #如果name字段不使用not null約束的話,這種方式是可以的;但是目前有了約束name字段必須有值。
ERROR 1364 (HY000): Field ‘name‘ doesn‘t have a default value
mysql> insert into tb1(name) value(‘小明‘); #單獨插入name字段的值是可以的,因為id字段沒有約束。
Query OK, 1 row affected (0.00 sec)
mysql> insert into tb1(name) value(‘NULL‘); #在Mysql裏面,NULL不等於空。
Query OK, 1 row affected (0.00 sec)
mysql> insert into tb1(id,name) value(1,‘andy‘); #此時插入完整的數據。
Query OK, 1 row affected (0.01 sec)
mysql> select * from tb1; #查看結果,可發現name字段的值 ‘小明‘ 他對應的 id 字段為 null。並且name字段的值為 ‘NULL‘ 也添加進去了。
+------+--------+
| id | name |
+------+--------+
| 1 | andy |
| NULL | 小明 |
| NULL | NULL |
+------+--------+
3 rows in set (0.00 sec)
#####使用alter修改表結構#####
mysql> desc tb1; #查看當前表結構。當前name字段 Null為 NO
mysql> alter table tb1 modify name varchar(20); #使用 alter 修改表結構,相當於重新定義tb1表中的字段name屬性。
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb1; #查看當前表結構。當前name字段 Null為 YES
mysql> alter table tb1 modify name varchar(20) not null; #使用alter吧name再重新定義為 not null
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select * from tb1; #查看修改後的表結構。此時name字段 Null為NO
Mysql 表約束(基礎6)