我一直在多次导入数千条记录,以确保导入运行完美.
因此,现在当我在发布之前进行实时导入时,自动增量列的ID列大约为300,000.
一旦删除了这些表中的所有数据,有没有简单的方法来"重置"这个?我只想出于搜索引擎优化的原因,网址:
Forum/1/Post
Forum/35/Post
Forum/5600/Post
Run Code Online (Sandbox Code Playgroud)
看起来更漂亮,更简洁(因此在结果中更易于点击)
Forum/300124/Post
Forum/370321/Post
Forum/450111/Post
Run Code Online (Sandbox Code Playgroud)
我宁愿不删除列并重新插入列,因为它会破坏所有关系,并且意味着我必须刷新所有数据上下文图等.
primary-key reset auto-increment sql-server-express sql-server-2008
我正在使用主-主复制进行一些测试,并且遇到了一些奇怪的问题,我将尝试描述我遵循的过程,以便有人可以重现该问题。
我在 2 个虚拟机上和每个虚拟机的配置文件中设置了复制:
-- Master1 --
auto_increment_increment = 2
auto_increment_offset = 1
-- Master2 --
auto_increment_increment = 2
auto_increment_offset = 2
Run Code Online (Sandbox Code Playgroud)
这些设置应该导致自动增量列的算术级数:
- Master1: 1,3,5,7,9,11,13 ...
- Master2: 2,4,6,8,10,12,14 ...
Run Code Online (Sandbox Code Playgroud)
Master1 得到奇数,Master2 得到偶数。然后我创建一个测试数据库并添加一个具有以下定义的表:
CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` varchar(50) DEFAULT NULL,
`d1` date DEFAULT '1970-01-01',
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Run Code Online (Sandbox Code Playgroud)
当然,数据库是在两台服务器上创建的。之后,我执行
START SLAVE;
Run Code Online (Sandbox Code Playgroud)
在两台服务器上,以便开始复制。为了生成数据,我使用以下过程:
必须插入单个记录才能使进程起飞
INSERT INTO t1(c1,d1) SELECT LPAD('', 50, MD5( RAND() ) ), DATE_ADD( CURDATE(), INTERVAL FLOOR( RAND() * 365 ) DAY …
mysql replication auto-increment master-slave database-replication
我在 MySQL 服务器(版本 5.5.27,安装了 EasyPHP 用于开发)中有一个表,它有一个带有 Auto_Increment 的 ID,它的数据类型是 INT(11)。
当我尝试使用此语句插入记录时,它可以工作。
insert into factclientes (IDFactClientes, IDTercero, SubTotal, IVA, Total)
values ('', '3', '2500.00', '400.00', '2900.00')
ON DUPLICATE KEY UPDATE IDTercero = values(IDTercero),
SubTotal = values(SubTotal),
IVA = values(IVA),
Total = values(Total)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在我的生产服务器(版本 5.6.17,独立安装在另一台机器上)上插入相同的记录时,它会引发错误:
Incorrect integer value: '' for column 'IDFactClientes' at row 1
Run Code Online (Sandbox Code Playgroud)
我知道这是因为主键 ID 'IDFactClientes' 有一个空值。我这样做是因为我对 INSERT 和 UPDATE 使用了相同的语句。如果我的程序不知道并且没有指定 IDFactClientes,我想要一个新记录,如果我的程序已经知道 ID,并且指定了我想要更新记录。
奇怪的是它可以在我的开发机器上运行,但不能在我的生产服务器上运行。
是不是缺少什么设置??我怎么能解决这个问题??我的数据库的所有表都有完全相同的问题,我不想修改程序中的所有语句......如果可能的话
先感谢您!!
基本上我想要的是以下代码的工作版本:
ALTER TABLE table_name
AUTO_INCREMENT =
(
SELECT
`AUTO_INCREMENT`
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'database_name'
AND TABLE_NAME = 'another_table_name'
);
Run Code Online (Sandbox Code Playgroud)
错误:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AUTO_INCREMENT =
Run Code Online (Sandbox Code Playgroud)
原因:
根据MySQL Doc:
只要服务器运行,InnoDB就会使用内存中的自动增量计数器.当服务器停止并重新启动时,InnoDB会重新初始化每个表的计数器,以便第一次INSERT到表中,如前所述.
这意味着每当我重新启动服务器时,我的auto_increment值都会设置为尽可能小的值.
我有一张叫做ticket另一张叫的桌子ticket_backup.它们都有一个id共享的列.ticket表格内的记录可供客户索取.当他们声称ticket我在里面插入记录ticket_backup然后我从ticket表中删除它们.截至今天,我56 thousand已经索赔(内部ticket_backup)和0票可用.如果我现在重新启动服务器并且不执行该操作ALTER TABLE,则我提供的第一张票将具有 …
MySQL/InnoDB
就我而言,我的收据应按年计算;1/2015、2/2015 ... 556/2015 等等。明年来的时候,柜台应该重新从1开始,收据应该计算为1/2016,2/2016 ...
如何定义将每年重置的 auto_increment 字段?
RCID | RCNO | RCYEAR | ...
=====+======+========+====
200 | 1 | 2015 |
201 | 2 | 2015 |
... | ... | 2015 |
756 | 556 | 2015 | <- last receipt in 2015
757 | 1 | 2016 | <- yearly counter restarted
Run Code Online (Sandbox Code Playgroud)
注意:RCID 是标准的 PK 自动递增字段。
我想使用环回自动增加 mongodb 文档编号。
我在 mongo 中做了功能
function getNextSequence(name) {
var ret = db.counters.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true
}
);
return ret.seq;
}
db.tweet.insert(
{
"_id" : getNextSequence("userid"),
"content": "test",
"date": "1",
"ownerUsername": "1",
"ownerId": "1"
}
)
Run Code Online (Sandbox Code Playgroud)
它在 mongo shell 中工作。
但是,当我使用 loopback.js 浏览器(http://localhost:3000/explorer/)插入时,它不起作用。显示 400 错误(SytaxError)代码。
我不能在环回休息 API 中使用 mongo 函数?
我认为问题是这一行中的引号getNextSequence("userid"),
我正在尝试使用biginteger-primary密钥创建迁移并将其切换为auto_increment.
我正在使用robmorgans Phinx来创建迁移.
是否可以在创建数据类型BIGINTEGER后将表的主键更改为auto_incremented?
目前它看起来像这样.
$positions = $this->table('positions', ['id' => false, 'primary_key' => 'id'])
->changeColumn('id', 'biginteger', ['auto_increment' => true])
->addColumn('work_order_id', 'char', ['after' => 'vehicle_id','default' => null, 'null' => true,'limit' => 36])
->update();
Run Code Online (Sandbox Code Playgroud) 我一直在尝试创建一个具有主键的模型,但我不希望该主键自动递增。
我知道我每次都可以指定该值,但我希望该字段需要我指定它(希望由数据库和 django 强制执行),并且如果我忘记了快速失败。
我可以auto_increment=False在我的领域说这似乎是合乎逻辑的,但这不受该领域的支持:(
我正在开发一个使用Docrtrine和Symfony 2.7的项目.我有一个我想要克隆的Document实体,我当然需要确保我没有重复的主键.这是我到目前为止所尝试的:
/**
* Document
*
* @ORM\Table(name="documents")
*/
class Document {
public function ___clone(){
$newObj = clone $this;
$newObj->id = null;
return $newObj;
}
...
}
Run Code Online (Sandbox Code Playgroud)
然而,这似乎并不多,因为当我打电话clone myDocument然后尝试坚持时,我仍然得到这样的信息:
SQLSTATE [23000]:完整性约束违规:1062密钥"UNIQ_A2B07288ECC6147F"的重复条目"1"
如何让对象的主键恢复为空或自动递增状态?
=====
Upate:使用
public function __clone(){
$this->id = null;
}
Run Code Online (Sandbox Code Playgroud)
仍会导致相同的错误.完整错误文字:
执行'INSERT INTO文件(usageFrom,usageTo,status,workflow_identifier,created_date,modified_date,language_id,translationRoot_id,ownerGroup_id,responsible_ser_id,production_id,media_id,created_user,modified_user)VALUES(?,?,?,?,?, ?,?,?,?,?,?,?,?,?)'与params ["2018-06-28 09:54:37","2018-06-28 09:54:37",100, "4cc723c2a5730c1b9c2ed6428ae57205","2018-06-28 09:54:37","2018-06-28 09:54:37",null,null,null,null,1,null,1,1]:
SQLSTATE [23000]:完整性约束违规:1062密钥"UNIQ_A2B07288ECC6147F"的重复条目"1"
auto-increment ×10
mysql ×4
alter-table ×1
cakephp ×1
clone ×1
django ×1
doctrine ×1
hibernate ×1
increment ×1
innodb ×1
java ×1
loopbackjs ×1
master-slave ×1
mongodb ×1
phinx ×1
php ×1
primary-key ×1
python ×1
replication ×1
reset ×1
select ×1
sql ×1
string ×1
strongloop ×1
symfony ×1