标签: auto-increment

是否可以使用允许重复的AUTO_INCREMENT列?

我有一个有一个AUTO_INCREMENT字段的表.目前,它也是一个主要的关键.

但是,在某些情况下我需要此AUTO_INCREMENT列以允许重复.换句话说 - 两个不同的行在列内可以具有相同的值AUTO_INCREMENT.这意味着拥有一个不是PRIMARY KEY的AUTO_INCREMENT字段.

这可能吗?

我猜它不是,因为每当我尝试这样做时,我都会收到此错误:

ERROR 1075 (42000) at line 130: Incorrect table definition; there can be only one auto column and it must be defined as a key

我喜欢使用AUTO_INCREMENT字段,因为它使我不必手动存储/增加数据库中其他位置的单独计数器.我可以插入表中并获取插入的值.但是,如果我不能重复,似乎我将不得不使用一个单独的表来跟踪并手动增加该字段.

更新:作为一个快速说明,我已经熟悉将AUTO_INCREMENT字段与另一个键分组,如此处所述.让我们假设为了论证,由于数据库中的其他约束,此解决方案将无法工作.

mysql sql auto-increment mysql-error-1075

2
推荐指数
1
解决办法
1392
查看次数

使用预设ID为Rails数据库播种

我有一个包含种子数据的XML文件,我正在尝试加载到我的生产数据库中.

问题是我在XML文件中的不同数据类型/节点之间存在关联,因此当从Rails加载到MySQL时,我需要指定的ID相同.

这在开发期间与SQLite一起工作正常,我只是在遍历XML文件中的每个节点后使用如下所示的行:

CardSet.connection.execute("UPDATE card_sets SET id = #{xml_set.attributes['id']} WHERE id = #{set.id}")
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何在播种数据库时强制预先设置ID,然后能够重新启用auto_increment以使Rails正常运行?

在创建数据库条目之前,我已尝试使用这两行:

CardSet.connection.execute("ALTER TABLE card_sets CHANGE id id INT(11) DEFAULT NULL")
CardSet.connection.execute("ALTER TABLE card_sets DROP PRIMARY KEY")
Run Code Online (Sandbox Code Playgroud)

这之后:

CardSet.connection.execute("ALTER TABLE card_sets CHANGE id id INT(11) DEFAULT NULL auto_increment PRIMARY KEY")
Run Code Online (Sandbox Code Playgroud)

哪个MySQL反击给我:

Mysql::Error: ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '18' for key 'PRIMARY': ALTER TABLE card_sets CHANGE id id INT(11) DEFAULT NULL auto_increment PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)

我的架构:

create_table "card_sets", :force => true do |t|
  t.string   "name" …
Run Code Online (Sandbox Code Playgroud)

mysql ruby-on-rails seed auto-increment

2
推荐指数
1
解决办法
2495
查看次数

使用Perl SQLite进行Auto_increment

我在使用Perl的SQLite中遇到自动增量问题.

数据库设计:

$dbh->do( "CREATE  TABLE IF NOT EXISTS `Users` (
  `UserID` VARCHAR(45) NOT NULL PRIMARY KEY UNIQUE ,
  `First_Name` VARCHAR(45) NOT NULL ,
  `Last_Name` VARCHAR(45) NOT NULL ,
  `Email` VARCHAR(45) NOT NULL ,
  `Password` VARCHAR(45) NOT NULL )" ) ;

$dbh->do( "CREATE  TABLE IF NOT EXISTS `Files` (
  `FileID` INTEGER AUTO_INCREMENT ,
  `UserID` VARCHAR(45) NOT NULL ,
  `File_Name` VARCHAR(45) NOT NULL ,
  `File` BLOB NULL ,
  PRIMARY KEY (`FileID`, `UserID`) ,
  CONSTRAINT `fk_Files_Users1`
    FOREIGN KEY (`UserID` )
    REFERENCES `Users` (`UserID` …
Run Code Online (Sandbox Code Playgroud)

sql sqlite perl auto-increment

2
推荐指数
1
解决办法
1417
查看次数

只显示ID最高的行?(SQL)

我想在我的网站上有一行代码:最新注册人:x

人x是ID最高的人(auto_increment).

那段代码怎么样?

SELECT * 
FROM characters 
LIMIT 1 
ORDER BY id
Run Code Online (Sandbox Code Playgroud)

php mysql auto-increment

2
推荐指数
1
解决办法
373
查看次数

修改Django AutoField的起始值

我有和现有的数据库,我已经用SQLAlchemy迁移到一个新的PostgreSQL数据库.

我用与以前相同的值移动了所有主键.现在我有填充数据的表,但相关的序列从1开始.我有pk值存储1到2000.

现在,当我尝试用Django保存一些东西时,我有了

重复键值违反了与主键有关的唯一约束.

如何修改序列起始值或逃避这种情况?
我目前的解决方案是:

conn = psycopg2.connect(...)
    for table_name in table_names:

        cursor = conn.cursor()
        cursor.execute("""
        SELECT setval('%s_id_seq', (SELECT COALESCE(MAX(id),0)+1 FROM %s));
        """% (table_name, table_name))
Run Code Online (Sandbox Code Playgroud)

它对我有用,但我不喜欢它.

django postgresql auto-increment django-south

2
推荐指数
1
解决办法
2524
查看次数

在多列上插入行自动增量

我有下表

tbl_Users

Id , UserFile, Name  
1,1200,Jan  
2,1201,Piet  
3,1202,Joris  
Run Code Online (Sandbox Code Playgroud)

第一列已经是一个标识列.现在我想将联系人的批量插入新用户.

INSERT INTO tbl_Users (UserFile,Name)  
    SELECT [AutoIncrement], Name 
    FROM tbl_ContactPerson 
    WHERE (ContactType = 'U') 
Run Code Online (Sandbox Code Playgroud)

我的问题在于[AutoIncrement],如何在UserFile列中添加+1,以便我在该列上也有自动增量?

我正在使用SQL Server 2008R2

亲切的问候

sql t-sql auto-increment sql-server-2008

2
推荐指数
1
解决办法
6215
查看次数

将表复制到另一个表但保留相同的自动增量键

我有一张表A,里面有记录.我创建了一个具有相同列的表B,我想将A的所有内容复制到B.但是,表A有一个自动递增的键,所以如果我有前三个记录(1,'itemA')(2,'itemB ')(5,'itemE')(假设3,4,5之后删除).这些记录将作为(1,'itemA')(2,'itemB')(3,'itemE')插入表B中.有没有办法将它们完全相同?

另一件事是,表A在mySql上,表B在MS SQL Server上

mysql sql auto-increment

2
推荐指数
2
解决办法
5900
查看次数

PHP增量运算符

<?php
 $s = "pa99";
 $s++;
 echo $s;
?>
Run Code Online (Sandbox Code Playgroud)

上面的代码输出到"pb00"我想要的是"pa100"等等.

但是,如果它是"pa",我希望它转到"pb",它适用于增量运算符.

php string-concatenation auto-increment

2
推荐指数
1
解决办法
1万
查看次数

自动将mysql自动增量设置为最小值

我只是想知道,如果有一种优雅的方法可以根据当前内容自动将mysql表的自动增量重置为最低值.

例:

mytable中:

1  content of row 1
2  content of row 2
3  content of row 3
4  content of row 4
5  content of row 5
Run Code Online (Sandbox Code Playgroud)

现在自动增量将是6

但在我插入新内容之前,我删除了第3,4和5行.内容如下所示:

1  content of row 1
2  content of row 2
Run Code Online (Sandbox Code Playgroud)

自动增量仍然是6.

这就是问题所在.

我希望自动增量为3,因为根据插入的ID,它是可能的最低值.

如果自动增量"无限增长"并超出12位长整数的范围,则会阻止极大数量.

谢谢你的任何建议!

mysql reset auto-increment

2
推荐指数
1
解决办法
1万
查看次数

如何将特定MySQL行的ID值增加1?

我在MySQL表中有一列,该列在添加新行时输入自动递增ID。来自MySQL表的数据被拉入HTML表,并且HTML表的行按ID列排序。通常,对于我来说,这可以正常工作,但是我现在需要输入ID低于当前自动增量值的行,以便它在表格的下方显示。

因此,我想知道是否有一种方法,可以使用MySQL语句在特定行范围的ID值中加1,例如,在行800-850中加1,以使它们现在为801-851,然后我可以手动插入ID值为800的新行。

mysql auto-increment

2
推荐指数
1
解决办法
3692
查看次数