发表于: 2017-12-07 17:35:10
2 760
今天查阅资料学习了关于设置字段的默认值的知识点。并大体了解了严格模式。严格模式下mysq对数据进行严格的校验,推荐日常使用严格模式。自己前面还在思考如果分多次插入一条数据,就需要对所有字段设置默认值,不然插入其他字段而空下无默认值的字段时会报错。根据这些知识点重新设计报名表格。
1. 字符串类型设置为not null,默认值为空串,因为设置默认值为null的话,null还要多占用一个字节
2. 数值类型设置默认值设置为null吧
a) Id为主键,不允许为null,直接设置为not null,非负所以设置为unsigned
b) create_at为bigint类型,需要插入当前日期,可以借助UNIX_TIMESTAMP函数获取当前时间相对与unix纪元的秒数为该字段赋值.这样记录的时间就不怕时区的干扰.如果去其他时区获取该日期,只需要把该数值转换成新时区下的时间即可.
c) update_at 为bigint类型,默认值设置为null,理想情况是实现当后续更新数据的时候自动把该字段更新为当时时间。如果设置为timestamp类型,就可以直接设置为DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP.但是现在是使用bigint类型,所以需要寻找其他思路.我以为on update是什么单独的语法,但一番查阅后发现他就是timestamp特殊的语法.其他想实现类似的功能,只能通过触发器.后来参考了辅导师兄的日志,他提到需要手动更新该字段.所以我也按照师兄的思路.触发器就先不去学习了,估计以后会有相关的任务吧,到时候再学习也不迟.
3. Text类型在严格模式下不允许有默认值,所以如果逐字段插入一条数据,设置为not null的话就必须作为第一批插入的字段不然报错。还是不要设置为not null了,灵活性更大
4. 日期类型
a) 入学日期enroll_data设置默认值设置为null吧
再就是关于update_at字段设置更新数据时自动插入当前时间,经过
然后新的命令如下
mysql> create TABLE student(
id bigint unsigned not null primary key auto_increment,
name varchar(5) not null default '',
QQ varchar(15) not NULL default '',
major varchar(20) not null default '',
enroll_date date,
gradulate_from varchar(20) not null default '',
daily_url text,
desire text ,
tutor varchar(5) not null default '',
know_from varchar(20) not NULL default '',
create_at bigint,
update_at bigint
);
创建的表格如下
任务六
插入数据操作如下insert into student(id,name,QQ,major,enroll_date,gradulate_from,daily_url,desire,tutor,know_from,create_at) values(
2641,
'曲艳行',
'3169119846',
'java工程师',
'2017-11-18',
'燕山大学',
'http://www.jnshu.com/daily/40038?dailyType=others&total=8&page=1&uid=18143&sort=0&orderBy=3',
'努力努力再努力!',
'郑州分院王鹏举',
'知乎',
unix_timestamp()
);
根据姓名查询该条数据时候,如果是在cmd中,需要考虑编码问题.我在安装mysql时,设置默认的characterset_server是utf8编码,那么characterset_client和character_set_results都是默认继承characterset_server也是utf8编码NaNd的默认编码是gbk,所以需要手动设置characterset_client为gbk,这样才能正确发送带有中文的查询指令.同时要在cmd中接收查询结果,所以还要设置character_set_results为gbk,这样才能在cmd中正确显示查阅结果中的中文.查询结果如下
任务七
任务八
明天计划的事情
学习索引,然后把任务十二之前的深度思考里面的内容学习一下,暂时不进入java的配置。
遇到的问题
我看辅导师兄的cmd查询结果中排列很整齐,是怎么做到的?为什么我的cmd中查阅出的表格标题跟数据行对不齐???
收获
今天只能做到导出了,没时间了,导入啥的明天再学。昨天没发日志,因为昨天时间都花在查阅和总结关于mysql各种格式,以及其默认值的情况,还了解了一下严格模式是咋回事,严格模式的开与关状态下,各种数据类型的默认值的情况还不同。特别是日期格式中的timestamp,根据使用的mysql版本的不同,还有不同的规定。自己总结知识点到OneNote上了,感觉太繁琐了,就没再提交到日志上了。日志上主要记录跟任务相关的知识点啥的吧。
评论