上面我们讲了,在创建一张表时,需要为表中的字段定义数据类型。这样在向表中插入数据时,就需要插入与对应位置字段的字段类型一致的数据,否则是会报错的。
但当我们插入数据的时候,并不想或并不需要对某个字段赋值时,如果字段有设置默认值,则会以默认值来填充该字段的值而不会导致错误;比如,在网上下订单时,对于下订单的日期字段,可以使用数据库的系统变量“当前日期”来默认赋值,这样就不需要在向订单表插入订单数据时,单独再对下订单的日期字段进行赋值。
再举个例子,我们在CSDN网站上注册一个新用户时,除了用户名、密码、手机号外,还有一些非必填信息,比如性别、QQ号、职业等。这些信息如果没有填写,那向数据库插入时,默认就会赋值为NULL值。
可如果性别、QQ号、职业等,这些字段被设置为NOT NULL,不可以插入NULL值,那怎么办呢?
同样,这个时候,就可以在创建表时,为字段设置默认值。
在向表中插入数据的时候,如果某个字段并没有指定赋值为多少,而此时该字段也没有赋默认值,那么就会向该字段插入NULL值。而NULL值的使用效率并不高,并且使用起来也比较麻烦。
所以,为避免字段的值被插入NULL值,一般在表创建时,都会为字段指定默认值。
设置默认值的关键字为DEFAULT,比如,像下面这样为老师姓名字段设置默认值”,为年龄字段设置默认值0,也就是空字段串:
CREATETABLEteacher
(
teacher_idVARCHAR(20),
teacher_nameVARCHAR(50)DEFAULT'',
genderVARCHAR(10),
ageINTDEFAULT
)COMMENT'老师';
设置默认值需要关注以下几点:
表中所有的字段都可以设置默认值;
默认值的数据类型必须与字段类型保持一致;(不一致时,数据库虽然有时也会默认做隐式类型转换,但并不推荐这样做。一方面是这样做并不规范,另一方面是这样做可能会导致未知的错误)
除主键字段外,建议其他所有字段都设置默认值;
那一般根据什么来决定字段应该赋什么默认值呢?
对于字符型字段来说,一般赋值为空字符串(也就是”),或者具有某种业务含义的值。比如,对于性别字段,有三个取值,F-女,M-男,N-未知,当向这个性别字段插入数据时,可能并不知道性别是男还是女,那这时,就可以定义默认值为N-未知,代表我们并不知道这条数据记录的值到底是多少。
对于数值型字段来说,一般赋值为0,或者具有某种业务含义的值,或者该字段所表示的业务含义的最大值或极大值。
对于日期和时间型呢,常见的赋值有系统当前日期CURRENT_DATE、系统当前时间CURRENT_TIME、系统当前时间戳CURRENT_TIMESTAMP及NOW()等。
总的来说,我们都可以根据字段的业务含义来为字段赋默认值。
下面的表格列出了各个数据类型常见的默认值。
(小提示:长按如下二维码添加老师微信)
领取专属 10元无门槛券
私享最新 技术干货