什么叫约束条件,约束条件就是控制我们往表字段里插入数据时的一些条件,那我怎么查看一个表的约束条件呢,我们可以通过查看表结构来看一个表的约束条件
查看一个没有设置约束条件的表结构
mysql> desc tab1;
前2列是字段名和字段的类型,后4列都属于约束条件,每一列约束的条件都不一样
NULL:代表的是允不允许为空,如果NULL里边的值是YES,那就代表这个字段里边可以存空值,空就是没有数据,如果是NO的话,那就不允许存空值,如果我们没设置过约束条件,那默认是允许存空值的
给字段赋空值
mysql> insert into tab1 values(null);
Query OK, 1 row affected (0.00 sec)
表记录
mysql> select * from tab1;
NULL代表的就是没有数据,就是空的
如果你希望表里的字段不能存空值,那我们在建表的时候要设置它的约束条件
mysql> create table tab13(
-> haha char(3) not null,//not null 不允许为空
-> xixi char(3) not null
-> );
Query OK, 0 rows affected (0.01 sec)
你不想让那个字段存空值,那就在那个字段的后边加上 not null
查看表结构
mysql> desc tab13;
NO就是不能存空值了
这时候如果在往该表里存空值就会报错
mysql> insert into tab13 values(null,null);
ERROR 1048 (23000): Column 'haha' cannot be null
提示:这一列不能为空
如果正常存储数据就没问题
mysql> insert into tab13 values("xx","oo");
Query OK, 1 row affected (0.00 sec)
查看一下
mysql> select * from tab13;
接下来我们在看一下其他的约束条件
mysql> desc tab13;
Key:代表索引标记,如果给字段设置过索引,那该字段的值会变成MUL
Default:代表默认值,如果我们不给字段赋值的话,那默认值就是空,但是默认值我们可以指定,我们在建表的时候可以设置某一个字段的默认值,设置完默认值以后,如果我们在往表里边插入记录的时候,如果不给该字段赋值,那它就用默认值给这个字段赋值,每个字段我们都可以设置默认值,但是默认值不能瞎定义,需要考虑它的合理性合理,但是如果你的NULL字段设置的不允许为空的话,那default字段设置的默认值它也没用,为什么这么说呢,默认值是你没有赋值的时候它才会用默认值去赋值,如果你没赋值说白了就是空值,而你的NULL字段又设置不允许为空值,那就会发生冲突
在定义默认值的时候,默认值一定要和字段类型匹配
mysql> create table tab14(
-> 姓名 char(5) not null,//不允许为空
-> 余额 int(5) default 0//默认值为0
-> );
提示:给字符类型设置默认值时要加引号
查看表结构
mysql> desc tab14;
名字字段的值不能为空,余额字段的值如果不赋值,默认值为0
那我现在就只给姓名字段赋值,余额字段我不赋值,我让他用默认值去赋
mysql> insert into tab14(姓名) values("haha");
Query OK, 1 row affected (0.00 sec)
查看表记录
mysql> select * from tab14;
我们自己赋值时,将不使用默认值
mysql> insert into tab14 values("haha",200);
Query OK, 1 row affected (0.01 sec)
查看一下
mysql> select * from tab14;
我们前边设计表结构的时候,名字字段是不是不允许赋空值,但是我现在可以这样赋值,用一个空格去赋值,空格不算空值
查看表记录
mysql> select * from tab14;