4.5 默认值约束

默认值的使用减轻了数据添加的负担。有着默认值约束的字段,在添加时省略该字段数据,MySQL会自动添加该字段的默认值。本节介绍默认值的使用。

4.5.1 创建默认值约束

创建默认值约束可参考图4-1。其他约束是直接选中复选框,而默认值约束是为字段设置一个默认的取值,因此是文本框的形式,将字段的默认取值写入Default文本框。

默认值在MySQL Workbench工具下的设置可参考表的创建步骤,只是添加了Default文本框设置。

默认值可以设置为固定值,也可以设置为通过计算获得的数据。系统在添加字段默认值设置时,将根据字段的数据类型提供几个常用的默认值。如图4-4~图4-6所示分别是INT型字段、VARCHAR型字段和TIMESTAMP型字段的默认值设置。

图4-4 INT型字段

图4-5 VARCHAR型字段

图4-6 TIMESTAMP型字段

在表的创建界面或表的修改界面,都可以对字段进行右击操作,弹出对话框如图4-4~图4-6所示。

比较三个图可以看出,不同数据类型的字段,系统提供的默认值设置不同。INT型字段和VARCHAR型字段的默认值操作比较简单,可选择Clear Default清除默认值、选择Default Null设置默认值为空,选择Dfault 0(或Dfault '')设置默认值为0(或空字符串)。而TIMESTAMP型字段的选项比较丰富,除了与INT型字段一样的设置以外,还可以使用以下几个选项。

1.Default CURRENT_TIMESTAMP

添加记录时设置字段值为当前时间;更新这条记录的时候,这条记录的这个字段不会改变。

2.Default NULL ON UPDATE CURRENT_TIMESTAMP

若字段为空,更新记录时更新这个字段为当前时间。

3.Default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

更新这条记录的时候,无论是否涉及该字段,这条记录的这个字段将会改变。

如将新闻发布的时间是新闻记录添加的时间,可设置为Default CURRENT_TIMESTAMP。而信息的最后修改时间是需要在更新信息时跟着变化的,可设置为Default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。

【范例9】

创建学生信息表,设置学生性别字段默认值为男,代码如下。

CREATE TABLE 'fruitshop'.'student' (
      'id' INT NOT NULL,
      'name' VARCHAR(45) NULL,
      'sex' VARCHAR(4) NOT NULL DEFAULT '男',
      'age' INT NULL,
      'native' VARCHAR(20) NULL,
      PRIMARY KEY ('id'));

若上述sex字段的非空约束设置为NULL,那么在添加数据时,系统将无法确定以NULL填充还是以'男'填充。

注意

被设置默认值的字段最好有非空约束,否则系统将无法确定该字段在添加时添加NULL还是添加默认值。

4.5.2 修改默认值约束

修改默认值约束包括对没有默认值的字段添加默认值和修改字段的默认值数据。这两种修改方式的语法一样,与表字段的类型修改语法相似。

【范例10】

为fruitshop.workers表的sex字段添加默认值约束,设置其默认值为男,代码如下。

ALTER TABLE 'fruitshop'.'workers'
    CHANGE COLUMN 'sex' 'sex' VARCHAR(45) NULL DEFAULT '男' ;

【范例11】

修改fruitshop.workers表的sex字段的默认值为女,代码如下。

ALTER TABLE 'fruitshop'.'workers'
    CHANGE COLUMN 'sex' 'sex' VARCHAR(45) NULL DEFAULT '女' ;

4.5.3 删除默认值约束

默认值的删除相当于清除默认值或将默认值设置为NULL,因此可在如图4-4~图4-6所示的弹出对话框中选择Clear Default选项清除默认值或选择Default Null选项设置默认值为空。若使用SQL语句删除默认值,如删除fruitshop.workers表的sex字段的默认值,代码如下。

ALTER TABLE 'fruitshop'.'workers'
    CHANGE COLUMN 'sex' 'sex' VARCHAR(45) NULL ;

上述代码与修改字段数据类型的代码一样,修改字段的默认值相当于修改字段的属性。