在之前得文章中我们说过,如果使用delete对数据库中得表进行删除,那么只是把记录删除掉,并且id的值还会保持上次的状态。
即删除之前如果有四条数据,删除之后,再添加新的数据,id怎会从5开始。
但是我们显示想让id从2开始,应该怎么做呢?
这个时候我们就要学习去修改数据表的一些属性值了,而这个属性值就是AUTO_INCREMENT。
首先我们要知道怎么查看这个属性的值。
例如我建了一张表:
create table t4(id int auto_increment primary key, num int) engine=innodb default charset=utf8;
那么接下来我可以通过命令来查看AUTO_INCREMENT的值:
通过命令我们好像没找到这个AUTO_INCREMENT属性啊,why?这是因为我们刚建好表,还没有数据,所以这个属性还没开始被赋值。
那么我们就插入几条数据
insert into t4(num) values(11); insert into t4(num) values(12); insert into t4(num) values(13);
通过上面的sql语句插入三条记录。
在这里我们可以猜想一下,AUTO_INCREMENT属性的值应该是表示的什么?是记录最后记录的数据是第几条?还是表示下一条记录是第几条?
我们可以再次通过命令 show create table t4 \G;来验证一下。
此时我们可以找到AUTO_INCREMENT这个属性,并且它的值等于4,这个是不是就是说明AUTO_INCREMENT记录的值表示对于下一条记录的id值。
通过delete table t4; 来把t4里面的记录清空。
然后再调用show create table t4 \G;命令
可以发现表的信息并没有因为表里的信息被删除而改变,这样的话,我们要是想让添加的数据id从2开始不就会不行了吗?
but,我们可以修改表的信息。
通过alter table t4 AUTO_INCREMENT=2;这个命令我们可以修改AUTO_INCREMENT属性的值,将其修改为2,那么我们再添加数据,id不就从2开始了嘛。
最后,我们在验证一下
返现结果如我们要的一样,ok,完美解决。
补充知识:django 中model踩的坑之AttributeError: type object ** has no attribute 'objects'及Field defines a relation
django 中model踩的坑之AttributeError: type object ** has no attribute 'objects'及Field defines a relation with model **, which is either not installed, or is abstract.
1. AttributeError: type object ** has no attribute ‘objects'
作者目前使用的是django1.8.1版本,在一次新项目的启动中,在编译查询代码的时候(如下),总是抛出如上错误。有人告诉我那就自己在model中重新引入objects,即objects = Model.manager(),然而问题依然没有得到解决。
queryset = CompanyAuthRecord.objects.all()
最后发现原来把abstract = True注释掉就可以完美的解决这个问题,至于当初为什么会加这一属性,好像是在引入此model的时候,总是引入不成功,也是被别人告诉加入此属性就可以了。事实确实解决那个引入问题,然而当初并没有去研究为什么要用他,应了那句话:欠下的,迟早要还!
class CompanyAuthRecord(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, db_column='c_id') company_seal = models.OneToOneField(CompanySeal, verbose_name='企业印章id', null=True, db_column='c_company_seal_id') add_by_id = models.UUIDField(verbose_name='添加人id', db_column='c_add_by_id', null=True, default=None) add_dt = models.DateTimeField('添加时间', db_column='c_add_dt', auto_now_add=True) class Meta: db_table = 't_company_auth_record' verbose_name = '企业认证状态记录表' # abstract = True ordering = ["add_dt"] default_permissions = ()
附关于abstract=True的官方解释:
2.Field defines a relation with model **, which is either not installed, or is abstract.
解决了上述问题后,又有这样的问题出现,难道真要上演程序员修水管的景象?几经周折,原因又出现在被关联model的app_lable ='seal'属性上,如下注释即可解决问题。至于原因:django要求是这样的,你可以不设置这个参数,如果要设置请与你的app名称保持一致。而我就是犯了这样的错误。
class CompanySeal(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, db_column='c_id') add_by_id = models.UUIDField(verbose_name=u'添加人id', db_column='c_add_by_id', null=True, default=None) add_dt = models.DateTimeField(verbose_name=u'添加时间', db_column='c_add_dt', auto_now_add=True) class Meta: # app_label = 'seal' db_table = 't_company_seal' verbose_name = '企业电子印章数据表' ordering = ["add_dt"] default_permissions = ()
以上经验希望能帮到出现同样问题的你,问题其实本身不算问题,只怪我们太low,多看文档和源码才是提升之道。附关于Meta属性文档链接。希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星.2003-存为爱2CD【环球】【WAV+CUE】
- 韩磊《试音天碟》高清音频[WAV+CUE]
- 邓涛《寂寞蒲公英(黑胶CD)》[WAV]
- 江志丰.2011-爱你的理由【豪记】【WAV+CUE
- 群星《传承-太平洋影音45周年纪念版 (CD2)》[320K/MP3][140.01MB]
- 群星《传承-太平洋影音45周年纪念版 (CD2)》[FLAC/分轨][293.29MB]
- 首首经典《滚石红人堂I 一人一首成名曲 4CD》[WAV+CUE][2.5G]
- s14上单t0梯度怎么排名 s14世界赛上单t0梯度排行榜
- tes目前进了几次s赛 LPL队伍tes参加全球总决赛次数总览
- 英雄联盟巅峰礼赠什么时候开始 2024巅峰礼赠活动时间介绍
- 冯骥发文谈睡觉重要性 网友打趣:求求你先做DLC
- 博主惊叹《少女前线2》万圣节大雷皮肤:这真能过审吗?
- 《生化危机8》夫人比基尼Mod再引骂战:夸张身材有错吗?
- 江蕙.1994-悲情歌声【点将】【WAV+CUE】
- 戴娆.2006-绽放【易柏文化】【WAV+CUE】