MySQL 字段默认值该如何设置

前言:

在 MySQL 中,我们可以为表字段设置默认值,在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。关于默认值,有些知识还是需要了解的,本篇文章我们一起来学习下字段默认值相关知识。

1.默认值相关操作

我们可以用 DEFAULT 关键字来定义默认值,默认值通常用在非空列,这样能够防止数据表在录入数据时出现错误。

创建表时,我们可以给某个列设置默认值,具体语法格式如下:

# 格式模板
<字段名> <数据类型> DEFAULT <默认值># 示例
mysql> CREATE TABLE `test_tb` (->   `id` int NOT NULL AUTO_INCREMENT,->   `col1` varchar(50) not null DEFAULT 'a',->   `col2` int not null DEFAULT 1,->   PRIMARY KEY (`id`)-> ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.06 sec)mysql> desc test_tb;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| col1  | varchar(50) | NO   |     | a       |                |
| col2  | int(11)     | NO   |     | 1       |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)mysql> insert into test_tb (col1) values ('fdg');
Query OK, 1 row affected (0.01 sec)mysql> insert into test_tb (col2) values (2);
Query OK, 1 row affected (0.03 sec)mysql> select * from test_tb;
+----+------+------+
| id | col1 | col2 |
+----+------+------+
|  1 | fdg  |    1 |
|  2 | a    |    2 |
+----+------+------+
2 rows in set (0.00 sec)

通过以上实验可以看出,当该字段设置默认值后,插入数据时,若不指定该字段的值,则以默认值处理。

关于默认值,还有其他操作,例如修改默认值,增加默认值,删除默认值等。一起来看下这些应该如何操作。

# 添加新字段 并设置默认值
alter table `test_tb` add column `col3` varchar(20) not null DEFAULT 'abc';# 修改原有默认值
alter table `test_tb` alter column `col3` set default '3a';
alter table `test_tb` change column `col3` `col3` varchar(20) not null DEFAULT '3b';
alter table `test_tb` MODIFY column `col3` varchar(20) not null DEFAULT '3c';# 删除原有默认值
alter table `test_tb` alter column `col3` drop default;# 增加默认值(和修改类似)
alter table `test_tb` alter column `col3` set default '3aa';

2.几点使用建议

其实不止非空字段可以设置默认值,普通字段也可以设置默认值,不过一般推荐字段设为非空。

mysql> alter table `test_tb` add column `col4` varchar(20) DEFAULT '4a';
Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql>  desc test_tb;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| col1  | varchar(50) | NO   |     | a       |                |
| col2  | int(11)     | NO   |     | 1       |                |
| col3  | varchar(20) | NO   |     | 3aa     |                |
| col4  | varchar(20) | YES  |     | 4a      |                |
+-------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

在项目开发中,有些默认值字段还是经常使用的,比如默认为当前时间、默认未删除、某状态值默认为 1 等等。简单通过下表展示下常用的一些默认值字段。

CREATE TABLE `default_tb` (`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',...`country` varchar(50) not null DEFAULT '中国',`col_status` tinyint not null DEFAULT 1 COMMENT '1:代表啥 2:代表啥...',`col_time` datetime NOT NULL DEFAULT '2020-10-01 00:00:00' COMMENT '什么时间',`is_deleted` tinyint not null DEFAULT 0 COMMENT '0:未删除 1:删除',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

这里也要提醒下,默认值一定要和字段类型匹配,比如说某个字段表示状态值,可能取值 1、2、3… 那这个字段推荐使用 tinyint 类型,而不应该使用 char 或 varchar 类型。

笔者结合个人经验,总结下关于默认值使用的几点建议:

非空字段设置默认值可以预防插入报错。

默认值同样可设置在可为 null 字段。

一些状态值字段最好给出备注,标明某个数值代表什么状态。

默认值要和字段类型匹配。

总结:

本篇文章主要讲述 MySQL 字段默认值相关知识,比较简单易懂,希望各位有所收获。

MySQL 字段默认值该如何设置相关推荐

  1. mysql字段默认值不生效的问题解决(上)

    mysql字段默认值不生效的问题解决(上) 参考文章: (1)mysql字段默认值不生效的问题解决(上) (2)https://www.cnblogs.com/yuhuameng/p/10703931 ...

  2. json mysql 字段 默认值_MySQL新增JSON类型字段的使用总结

    最近刚好用到了MySQL的JSON函数做了一些数据处理相关的工作,顺便记录总结一下相关知识点和用法. MySQL从5.7.8开始支持原生JSON数据类型,以JSON类型存储json格式的数据,比字符串 ...

  3. json mysql 字段 默认值_MySQL中的JSON类型

    前言(废话) 昨天抽了点时间在网上搜列了一个开源项目,项目挺完整的,前后台分离还带有微信小程序,我Clone下代码,经过一番倒腾,嘿~还真就跑起来了.在这个过程中,体验了一把VUE项目工程细节,因为之 ...

  4. mysql字段默认值

    mysql数据库填入数据时遇到的一个问题,使用getHibernateTemplate().save()实例化,没有给出name字段的值,填入数据时通过mysqlworkbench查看发现name字段 ...

  5. json mysql 字段 默认值_mysql json字段

    查看插入的数据 mysql> SELECT * FROM lnmp; +----+------------------------------+-----------+ | id | categ ...

  6. mysql增加字段设默认值_mysql原表增加字段且设置默认值及修改字段默认值

    -- 增加字段及注释 alter table sr_zjff_main add zjbzjxbj int(1) DEFAULT '0' COMMENT ''; alter table sr_main_ ...

  7. mysql创建表的时候日期给个默认值_mysql 创建表时 日期字段默认值为当前时间...

    mysql 创建表时 日期字段默认值为当前时间 mysql version 5.1 在mysql创建表的时候经常会遇到创建日期字段需要设置当前时间为默认值的时候,就如sqlserver2000一样,把 ...

  8. Mysql 修改字段默认值问题

    临下班前,测试测出所有的返回报文中有一个版本号的值没有上送,最后定位是由于数据库配置表里版本号是空. 这应该属于前辈们留下的bug了.... 首先试了下 ALTER TABLE newftp alte ...

  9. 关于MySQL中date字段默认值为“0000-00-00 00:00:00“导致MyBatisPlus无法正常list()而报系统异常错误码500的问题

    今天在SpringBoot整合MyBatisPlus的时候,使用自动代码生成的功能,对User表生成了entity.mapper.service代码,之后编写测试类调用userService.list ...

最新文章

  1. turtlebot雷达模块
  2. 用 mongodb + elasticsearch 实现中文检索
  3. 谷歌否认街景服务侵犯隐私
  4. linux系统网络对时,Linux系统网络优化【转】
  5. html5 中 video 标签,H5页面中 video 标签的坑
  6. [网络流24题]圆桌问题
  7. keepalived nginx 双机热备图文讲解
  8. [LeetCode] #44 Wildcard Matching
  9. 配置Memcache服务器并实现主从复制功能(repcached)(转)
  10. 二叉树中获取从根节点到某个节点的路径
  11. 基于MFC的OpenDDS发布订阅例子(idl)
  12. google保存网页为图片
  13. Python图片按比例缩放后的宽和高(PIL等比缩放)
  14. (转)常用的js代码
  15. js手机号中间部分隐藏****,显示前三位和后四位
  16. 利用python计算复合材料ABD矩阵以及压缩载荷的代码
  17. 你了解屏幕后期特效怎么做吗?碉堡了!!!开箱即用
  18. 已有一个已排好序的数组,要求输入一个数,将它插入数组中,保持数组依然有序。
  19. opencv学习之(三)-LBP算法的研究及其实现
  20. 2.1.4 超声波雷达

热门文章

  1. [转载] Java序列化的几种方式以及序列化的作用
  2. Java LocalDate类| toString()方法与示例
  3. 哪个计算机无法做到双屏显示,怎么启用双屏显示设置【图文介绍】
  4. python矩阵变化_用numpy改变矩阵的形状
  5. python怎么开发软件_怎么使用python进行软件开发
  6. php curl_error源码,PHP curl_error函数
  7. cdh集群linux命令,CDH集群中,服务器启动spark2-shell命令行注意事项
  8. Promethus搭建 K8S 集群节点资源监控系统
  9. c++11特性move和forward区别
  10. EntityFramework进阶——Entity Splitting和Table Splitting