面试官:为什么mysql所有的字段都建议设置为not null,default?

306 阅读1分钟

  • 公众号:大宝宏说java(专注踩坑记录,让他人走上康庄大道)

1、当字段是计算字段时,如果出现字段值相加的话,某个字段为null为时,结果将为null,如下表字段:

​编辑

select t1.volume_of_business_inquiries + t1.amount_of_instant_processing + t1.acceptance_of_commitment + t1.network_handle_number as '合计' from form_955866690466775040 t1 where t1.is_delete = false and t1.submit_time >= '${submit_time_start_time}' and t1.submit_time <= '${submit_time_end_time}'

​编辑

如果出现上述如何设计表结构,设计为null,可以采用mysql,ifnull方式,不建议这么做,因为字段会出现在不同的sql语句中,你要每一个都要这样写?不累死?而且也不符合设计模式的观念,相同的代码出现多次,那你就要思考一下你的代码结构是否有问题?

​编辑

2、从性能上考虑,设置为null,索引就会出现失效,性能降低,相信这句理论在很多的java八股文都有见到。

总结:

1、全部字段设置为notnull 和 不同的字段设置为相对应的默认值,例如字符串设置为'',数值设置为0或者0.0,时间设置为1970:01:01.

2、这是一种规范,给大家再分享一个常用的mysql设置ddl语句,可直接复制黏贴使用哦,都是一个表必须要有的字段,如果不写会出现很多问题,在工作中。

 create table form_name ( id bigint auto_increment primary key, create_time datetime(6) not null default '1970-01-01' comment '创建时间', update_time datetime(6) not null default '1970-01-01' comment '更新时间', create_user varchar(50) not null default '' comment '创建人', create_user_id varchar(50) not null default '' comment '创建人id', update_user varchar(50) not null default '' comment '更新人', is_delete bit default b'0' not null comment '软删除。默认不删除,0表示不删除,1表示已删除' ) comment '一定要写表注释';

最后:

1、如果大家想知道为什么对性能有影响,欢迎询问,我会再发一瓶文章和视频说这件事情

2、常用的mysql设置ddl语句中,为什么每个字段都必须要有呢?

是不是特别想知道,公众号会及时更新,大宝宏说java,全网同名搜索关注哦。

  • 公众号:大宝宏说java(专注踩坑记录,让他人走上康庄大道)