我有一个有一个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字段与另一个键分组,如此处所述.让我们假设为了论证,由于数据库中的其他约束,此解决方案将无法工作.
我有一个包含种子数据的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) 我在使用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) 我想在我的网站上有一行代码:最新注册人:x
人x是ID最高的人(auto_increment).
那段代码怎么样?
SELECT *
FROM characters
LIMIT 1
ORDER BY id
Run Code Online (Sandbox Code Playgroud) 我有和现有的数据库,我已经用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)
它对我有用,但我不喜欢它.
我有下表
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
亲切的问候
我有一张表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上
<?php
$s = "pa99";
$s++;
echo $s;
?>
Run Code Online (Sandbox Code Playgroud)
上面的代码输出到"pb00"我想要的是"pa100"等等.
但是,如果它是"pa",我希望它转到"pb",它适用于增量运算符.
我只是想知道,如果有一种优雅的方法可以根据当前内容自动将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表中有一列,该列在添加新行时输入自动递增ID。来自MySQL表的数据被拉入HTML表,并且HTML表的行按ID列排序。通常,对于我来说,这可以正常工作,但是我现在需要输入ID低于当前自动增量值的行,以便它在表格的下方显示。
因此,我想知道是否有一种方法,可以使用MySQL语句在特定行范围的ID值中加1,例如,在行800-850中加1,以使它们现在为801-851,然后我可以手动插入ID值为800的新行。
auto-increment ×10
mysql ×6
sql ×4
php ×2
django ×1
django-south ×1
perl ×1
postgresql ×1
reset ×1
seed ×1
sqlite ×1
t-sql ×1