python mysql自增字段AUTO_INCREMENT值的修改方式
作者:他说少年如歌 发布时间:2023-10-15 07:12:19
在之前得文章中我们说过,如果使用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属性文档链接。希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:https://blog.csdn.net/qq_27437781/article/details/84645900


猜你喜欢
- 目录MySQL数据库重命名的方法 第一种方法:rename database 弃用了第二种方法:mysqldump 备份第三种方法
- 前言:Python smtplib 教程:展示了如何使用 smtplib 模块在 Python 中发送电子邮件。 要发送电子邮件,我们使用
- numpy数组的广播功能强大,但是也同时让人疑惑不解,现在让我们来谈谈其中的原理。广播原则:如果两个数组的后缘维度(即:从末尾开始算起的维度
- 进行编程时,一般我们会给一个函数或者变量起一个名字,该名称是用于引用或寻址函数变量。但是有一个低调的函数,你不需要赋予它名字,因此该函数也叫
- 主要介绍了SQL删除语句DROP、TRUNCATE、 DELETE 的区别,帮助大家更好的理解和学习sql语句,感兴趣的朋友可以了解下DRO
- 使用PyQt5开发图形界面,里面使用日期框,这里把这个QDateEdit组件命名为:beginDatefrom PyQt5.QtCore i
- 论证完使用target=_blank并非绝对错误之后,分场景探讨如何减少新开窗口。自有意识注意这个问题,是看到蓝色经典Plod大叔在04年提
- 原型扩展:>> String.prototype :String对象原型扩展 --------------
- PHPStudy hosts文件可能不存在或被阻止打开,同步hosts失败在使用PHPStudy建站包时,有时会遇到同步hosts失败的问题
- 除了使用pycharm外,还可使用vscode来操作pyqt,方法如下:1. 在vscode中配置相关的pyqt的相关根据自己实际情况修改第
- 本文实例讲述了Python数据类型之Set集合。分享给大家供大家参考,具体如下:set集合1.概述set与dict类似,但set是一组key
- 前言大家好,我是苏凉,在前面我们已经学习了网络爬虫并且获取到了数据,接下来当然是对数据进行分析啦,本篇文章带大家进入新的模块:pyhon数据
- 海量数据(百万以上),其中有些全部字段都相同,有些部分字段相同,怎样高效去除重复?如果要删除手机(mobilePhone),电话(offic
- 本文实例讲述了PHP中round()函数对浮点数进行四舍五入的方法。分享给大家供大家参考。具体方法如下:语法:round(x,prec)参数
- 1.第一种就是直接调用 window.print()方法这种方法的坏处就是 默认打印整个页面,不能打印局部页面。2.第二种使用v-print
- 本文实例讲述了Python实现的大数据分析操作系统日志功能。分享给大家供大家参考,具体如下:一 代码1、大文件切分import osimpo
- 本文讲述了python在Windows下安装setuptools(easy_install工具)的方法。分享给大家供大家参考,具体如下:【题
- 下面就先定义一个函数: def foo(): print('function') foo() 在上述代码中,定义了一个名为f
- 由于GROUP BY 实际上也同样会进行排序操作,而且与ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组操作。当然,如果
- 本文实例为大家分享了python实现FTP文件下载功能的具体代码,供大家参考,具体内容如下代码:#-*-coding:utf-8-*- im