网络编程
位置:首页>> 网络编程>> Python编程>> python mysql自增字段AUTO_INCREMENT值的修改方式

python mysql自增字段AUTO_INCREMENT值的修改方式

作者:他说少年如歌  发布时间:2023-10-15 07:12:19 

标签:python,mysql,自增,AUTO,INCREMENT

在之前得文章中我们说过,如果使用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的值:

python mysql自增字段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;来验证一下。

python mysql自增字段AUTO_INCREMENT值的修改方式

此时我们可以找到AUTO_INCREMENT这个属性,并且它的值等于4,这个是不是就是说明AUTO_INCREMENT记录的值表示对于下一条记录的id值。

通过delete table t4; 来把t4里面的记录清空。

然后再调用show create table t4 \G;命令

python mysql自增字段AUTO_INCREMENT值的修改方式

可以发现表的信息并没有因为表里的信息被删除而改变,这样的话,我们要是想让添加的数据id从2开始不就会不行了吗?

but,我们可以修改表的信息。

通过alter table t4 AUTO_INCREMENT=2;这个命令我们可以修改AUTO_INCREMENT属性的值,将其修改为2,那么我们再添加数据,id不就从2开始了嘛。

最后,我们在验证一下

python mysql自增字段AUTO_INCREMENT值的修改方式

返现结果如我们要的一样,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的官方解释:

python mysql自增字段AUTO_INCREMENT值的修改方式

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

0
投稿

猜你喜欢

  • 一般上电子商务网站买东西的用户分三种:随便看看,就是不买先看看,买不买再说就是来买东西的这样的需求反应到产品页的购买按钮上,我们一般会看到购
  • JavaScript Dom编程 学习书籍选择JavaScript Dom编程学习,很多朋友无疑对如何选择入门的书籍,比较头疼。或许也是他们
  • CSS Sprites 简介:通常被意译为“CSS图像拼合”或“CSS贴图定位”。CSS Sprites并不是一门新技术,目前它已经在网页开
  • 一段重用很高的ajax代码,可以套用    <!DOCTYPE HTML 
  • 为什么页面出现乱码?为什么数据库里出现乱码?为什么这些乱码的出现几率飘忽不定了?诸如此类的乱码问题困扰了很多WEB开发人员。假如不将这背后的
  •  <% Rem  Rem ## 在线升级类声明 Class Cls_oUpdate
  • 1. 排序有什么用“排序”这个专业名词原本是来源于计算机程序操作中的,是一种很常见的算法设计,当然,对交互设计来说,探讨冒泡排序和堆排序之间
  • 前几天帮人调试一个ASP+SQL2000+IIS5.1/6.0的网站程序,调试过程中遇到的问题如下:一、 SQLServer登录 原先存在备
  •     1.问:在DW中如何设置页面边距为0?答:在DW中似乎没有直接设置的方法,你只有在Html文档中插入以
  • QQ医生在广大用户心中一直以来都是清爽便捷的一款安全工具,随着QQ医生的不断发展,QQ医生团队一直在思考,怎样能够给QQ医生用户带来性能更优
  • 前言引用一张比较清晰易懂的图php伪协议是php自己支持的一种协议与封装协议,简单来说就是php定义的一种特殊访问资源的方法。常见的php伪
  •  代码如下所示:$num = 10.4567;    //第一种:利用round()对浮点数进行四舍五入 &n
  • 名称:YUI Compressor最新版本:2.4.2用途:js/css压缩必备指数:使用难度:(YUI Compressor非常易用,只是
  • 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Se
  • set oSQLServer =server.createobject("SQLDMO.SQLServer")oSQLS
  • 第一,两者的功能不同。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后
  • 阅读上一片:微软建议的ASP性能优化28条守则(1)技巧 3:将数据和 HTML 缓存在 Web 服务器的磁盘上有时,数据可能太多,无法都缓
  • 一、数字类型所谓的&ldquo;数字类&rdquo;,就是指 DECIMAL 和 NUMERIC,它们是同一种类型。它严格的
  • PHP asXML()函数实例格式化 XML(版本 1.0)中的 SimpleXML 对象的数据:<?php $note=<&l
  • 本文实例为大家分享了tensorflow神经网络实现mnist分类的具体代码,供大家参考,具体内容如下只有两层的神经网络,直接上代码#引入包
手机版 网络编程 asp之家 www.aspxhome.com