8.1 作用

给某个字段/某列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显式赋值,则赋值为默认值。

8.2 关键字

DEFAULT

8.3 如何给字段加默认值

(1)建表时

  1. create table 表名称(
  2. 字段名 数据类型 primary key,
  3. 字段名 数据类型 unique key not null,
  4. 字段名 数据类型 unique key,
  5. 字段名 数据类型 not null default 默认值,
  6. );
  7. create table 表名称(
  8. 字段名 数据类型 default 默认值 ,
  9. 字段名 数据类型 not null default 默认值,
  10. 字段名 数据类型 not null default 默认值,
  11. primary key(字段名),
  12. unique key(字段名)
  13. );
  14. 说明:默认值约束一般不在唯一键和主键列上加
  1. create table employee(
  2. eid int primary key,
  3. ename varchar(20) not null,
  4. gender char default '男',
  5. tel char(11) not null default '' #默认是空字符串
  6. );
  1. mysql> desc employee;
  2. +--------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +--------+-------------+------+-----+---------+-------+
  5. | eid | int(11) | NO | PRI | NULL | |
  6. | ename | varchar(20) | NO | | NULL | |
  7. | gender | char(1) | YES | | | |
  8. | tel | char(11) | NO | | | |
  9. +--------+-------------+------+-----+---------+-------+
  10. 4 rows in set (0.00 sec)
  1. insert into employee values(1,'汪飞','男','13700102535'); #成功
  1. mysql> select * from employee;
  2. +-----+-------+--------+-------------+
  3. | eid | ename | gender | tel |
  4. +-----+-------+--------+-------------+
  5. | 1 | 汪飞 | | 13700102535 |
  6. +-----+-------+--------+-------------+
  7. 1 row in set (0.00 sec)
  1. insert into employee(eid,ename) values(2,'天琪'); #成功
  1. mysql> select * from employee;
  2. +-----+-------+--------+-------------+
  3. | eid | ename | gender | tel |
  4. +-----+-------+--------+-------------+
  5. | 1 | 汪飞 | | 13700102535 |
  6. | 2 | 天琪 | | |
  7. +-----+-------+--------+-------------+
  8. 2 rows in set (0.00 sec)
  1. insert into employee(eid,ename) values(3,'二虎');
  2. #ERROR 1062 (23000): Duplicate entry '' for key 'tel'
  3. #如果tel有唯一性约束的话会报错,如果tel没有唯一性约束,可以添加成功

再举例:

  1. CREATE TABLE myemp(
  2. id INT AUTO_INCREMENT PRIMARY KEY,
  3. NAME VARCHAR(15),
  4. salary DOUBLE(10,2) DEFAULT 2000
  5. );

(2)建表后

  1. alter table 表名称 modify 字段名 数据类型 default 默认值;
  2. #如果这个字段原来有非空约束,你还保留非空约束,那么在加默认值约束时,还得保留非空约束,否则非空约束就被删除了
  3. #同理,在给某个字段加非空约束也一样,如果这个字段原来有默认值约束,你想保留,也要在modify语句中保留默认值约束,否则就删除了
  4. alter table 表名称 modify 字段名 数据类型 default 默认值 not null;
  1. create table employee(
  2. eid int primary key,
  3. ename varchar(20),
  4. gender char,
  5. tel char(11) not null
  6. );
  1. mysql> desc employee;
  2. +--------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +--------+-------------+------+-----+---------+-------+
  5. | eid | int(11) | NO | PRI | NULL | |
  6. | ename | varchar(20) | YES | | NULL | |
  7. | gender | char(1) | YES | | NULL | |
  8. | tel | char(11) | NO | | NULL | |
  9. +--------+-------------+------+-----+---------+-------+
  10. 4 rows in set (0.00 sec)
  1. alter table employee modify gender char default '男'; #给gender字段增加默认值约束
  2. alter table employee modify tel char(11) default ''; #给tel字段增加默认值约束
  1. mysql> desc employee;
  2. +--------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +--------+-------------+------+-----+---------+-------+
  5. | eid | int(11) | NO | PRI | NULL | |
  6. | ename | varchar(20) | YES | | NULL | |
  7. | gender | char(1) | YES | | | |
  8. | tel | char(11) | YES | | | |
  9. +--------+-------------+------+-----+---------+-------+
  10. 4 rows in set (0.00 sec)
  1. alter table employee modify tel char(11) default '' not null;#给tel字段增加默认值约束,并保留非空约束
  1. mysql> desc employee;
  2. +--------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +--------+-------------+------+-----+---------+-------+
  5. | eid | int(11) | NO | PRI | NULL | |
  6. | ename | varchar(20) | YES | | NULL | |
  7. | gender | char(1) | YES | | | |
  8. | tel | char(11) | NO | | | |
  9. +--------+-------------+------+-----+---------+-------+
  10. 4 rows in set (0.00 sec)

8.4 如何删除默认值约束

  1. alter table 表名称 modify 字段名 数据类型 ;#删除默认值约束,也不保留非空约束
  2. alter table 表名称 modify 字段名 数据类型 not null; #删除默认值约束,保留非空约束
  1. alter table employee modify gender char; #删除gender字段默认值约束,如果有非空约束,也一并删除
  2. alter table employee modify tel char(11) not null;#删除tel字段默认值约束,保留非空约束
  1. mysql> desc employee;
  2. +--------+-------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +--------+-------------+------+-----+---------+-------+
  5. | eid | int(11) | NO | PRI | NULL | |
  6. | ename | varchar(20) | YES | | NULL | |
  7. | gender | char(1) | YES | | NULL | |
  8. | tel | char(11) | NO | | NULL | |
  9. +--------+-------------+------+-----+---------+-------+
  10. 4 rows in set (0.00 sec)