什么叫约束条件,约束条件就是控制我们往表字段里插入数据时的一些条件,那我怎么查看一个表的约束条件呢,我们可以通过查看表结构来看一个表的约束条件

查看一个没有设置约束条件的表结构

mysql> desc tab1;




mysql其他条件放到in前还是后 mysql条件为空_默认值


前2列是字段名和字段的类型,后4列都属于约束条件,每一列约束的条件都不一样

NULL:代表的是允不允许为空,如果NULL里边的值是YES,那就代表这个字段里边可以存空值,空就是没有数据,如果是NO的话,那就不允许存空值,如果我们没设置过约束条件,那默认是允许存空值的

给字段赋空值
mysql> insert into tab1 values(null);
Query OK, 1 row affected (0.00 sec)
表记录
mysql> select * from tab1;


mysql其他条件放到in前还是后 mysql条件为空_字段_02


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;


mysql其他条件放到in前还是后 mysql条件为空_默认值_03


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其他条件放到in前还是后 mysql条件为空_字段_04


接下来我们在看一下其他的约束条件

mysql> desc tab13;


mysql其他条件放到in前还是后 mysql条件为空_字段_05


Key:代表索引标记,如果给字段设置过索引,那该字段的值会变成MUL

Default:代表默认值,如果我们不给字段赋值的话,那默认值就是空,但是默认值我们可以指定,我们在建表的时候可以设置某一个字段的默认值,设置完默认值以后,如果我们在往表里边插入记录的时候,如果不给该字段赋值,那它就用默认值给这个字段赋值,每个字段我们都可以设置默认值,但是默认值不能瞎定义,需要考虑它的合理性合理,但是如果你的NULL字段设置的不允许为空的话,那default字段设置的默认值它也没用,为什么这么说呢,默认值是你没有赋值的时候它才会用默认值去赋值,如果你没赋值说白了就是空值,而你的NULL字段又设置不允许为空值,那就会发生冲突

在定义默认值的时候,默认值一定要和字段类型匹配

mysql> create table tab14(

-> 姓名 char(5) not null, //不允许为空

-> 余额 int(5) default 0 //默认值为0

-> );

提示:给字符类型设置默认值时要加引号

查看表结构

mysql> desc tab14;


mysql其他条件放到in前还是后 mysql条件为空_怎么临时禁用默认值约束_06


名字字段的值不能为空,余额字段的值如果不赋值,默认值为0

那我现在就只给姓名字段赋值,余额字段我不赋值,我让他用默认值去赋

mysql> insert into tab14(姓名) values("haha");

Query OK, 1 row affected (0.00 sec)

查看表记录

mysql> select * from tab14;


mysql其他条件放到in前还是后 mysql条件为空_怎么临时禁用默认值约束_07


我们自己赋值时,将不使用默认值

mysql> insert into tab14 values("haha",200);

Query OK, 1 row affected (0.01 sec)

查看一下

mysql> select * from tab14;


mysql其他条件放到in前还是后 mysql条件为空_怎么临时禁用默认值约束_08


我们前边设计表结构的时候,名字字段是不是不允许赋空值,但是我现在可以这样赋值,用一个空格去赋值,空格不算空值


mysql其他条件放到in前还是后 mysql条件为空_mysql其他条件放到in前还是后_09


查看表记录

mysql> select * from tab14;


mysql其他条件放到in前还是后 mysql条件为空_默认值_10