码迷,mamicode.com
首页 > 数据库 > 详细

Mysql 表约束(基础6)

时间:2018-04-15 13:30:02      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:等于   并且   alt   erro   不为   row   and   sys   rman   

准备基础环境:

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)

标签:等于   并且   alt   erro   不为   row   and   sys   rman   

原文地址:https://www.cnblogs.com/longxd/p/8846707.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!