- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SqlServer Mysql数据库修改自增列的值及相应问题的解决方案由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
SQL Server 平台修改自增列值 。
由于之前处理过sql server数据库的迁移工作,尝试过其自增列值的变更,但是通过SQL 语句修改自增列值,是严格不允许的,直接报错(无法更新标识列 '自增列名称‘)。sql server我测试是2008、2012和2014,都不允许变更自增列值,我相信SQL Server 2005+的环境均不允许变更字段列值.
如果非要在SQL Server 平台修改自增列值的,那就手动需要自增列属性,然后修改该列值,修改成功后再手动添加自增列属性。如果在生成环境修改自增列的话,建议在空闲时间(零点以后,平台或网站使用的用户很少的时间段)来处理这类问题。数据量大且多表关联的,那就通过T-SQL来变更。该方法最大的缺点就是要通过手工辅助取消和添加自增属性的.
还有一个方法,先将要修改的数据整理为T-SQL的插入脚本,再删除这批要修改的数据,在通过显示插入数据来实现。这种方式适用于要变更不较少的单表记录,该方法到时比较灵活的.
更简单的方法,那就是如果仅仅若干条,那就让运营人员重新发布信息,删除以前的数据.
还有网上通过修过T-SQL语句取消自增属性,我在SQL Server 2005+环境测试均未通过,相应的T-SQL代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
EXEC
sys.sp_configure
@configname =
'allow updates'
,
-- varchar(35)
@configvalue = 1;
-- int
EXEC
sys.sp_configure
@configname =
'show advanced options'
,
-- varchar(35)
@configvalue = 1;
-- int
RECONFIGURE
WITH
OVERRIDE;
GO
UPDATE
sys.syscolumns
SET
colstat = 1
WHERE
id = OBJECT_ID(N
'PrimaryKeyAndIdentityUpdateTestDataTable'
,
'U'
)
AND
name
= N
'ID'
AND
colstat = 1;
UPDATE
sys.columns
SET
is_identity = 0
WHERE
object_id = OBJECT_ID(N
'PrimaryKeyAndIdentityUpdateTestDataTable'
,
'U'
)
AND
name
= N
'ID'
AND
is_identity = 1;
|
执行后的结果如下:
MySQL 平台修改自增列值 。
mysql平台修改自增列值,有些麻烦的。mysql中存在自增列,如果其引擎是myisam,则该列可以为独立主键列,也可以为复合主键列,即该列必须为主键的关联列;如果其引擎是innodb,则该列必须是独立主键列。要直接修改两个自增列值对调变更,肯定是不行的.
我采用的方法是将两个自增列值(比如1、2)分为以下三个步骤来实现: 1、先将自增列值为1的修改为0; 2、再将自增列值为2的修改为1; 3、再将自增列值为0的修改为2; 。
以下两种数据引擎的测试环境均是mysql 5.6.
数据库引擎为innodb的前提下,具体的mysql测试代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
drop
table
if exists identity_datatable;
create
table
identity_datatable (
id
int
not
null
AUTO_INCREMENT,
name
varchar
(10)
not
null
,
primary
key
(id)
) engine=innodb,
default
charset=utf8;
insert
into
identity_datatable (id,
name
)
values
(1,
'1'
),(2,
'2'
);
insert
into
identity_datatable (id,
name
)
values
(3,
'3'
),(4,
'4'
);
select
*
from
identity_datatable;
-- 直接修改不可行
-- update identity_datatable
-- set id = case when id = 1 then 2 when id = 2 then 1 end
-- where id in (1, 2);
update
identity_datatable
set
id = 0
where
id = 1;
update
identity_datatable
set
id = 1
where
id = 2;
update
identity_datatable
set
id = 2
where
id = 0;
select
*
from
identity_datatable;
|
。
未修改前的数据表结果,如下图:
修改后的数据表结果,如下图:
注意:
1、采用了两个数字进行交换的方法。 2、引入的中间值最好<=0的数字。 3、仅仅提供一种解决方法,也可采用sql server平台的修改方法(1、先取消自增属性后变更最后增加自增属性,2、整理T-SQL脚本重新插入----小数据量时可以;3、运营人员手工重新添加,也是数据量小的情况下).
数据库引擎为myisam的前提下,具体的mysql测试代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
drop
table
if exists autoincremenet_datatable_myisam;
create
table
autoincremenet_datatable_myisam (
tid
int
not
null
,
id
int
not
null
auto_increment,
name
varchar
(20)
not
null
,
primary
key
(id)
) engine = myisam,
default
charset = utf8;
insert
into
autoincremenet_datatable_myisam (tid, id,
name
)
values
(1,1,
'a'
),(2,2,
'b'
),(3,3,
'c'
),(4,4,
'd'
);
select
*
from
autoincremenet_datatable_myisam;
update
autoincremenet_datatable_myisam
set
id = 0;
where
id = 1;
select
*
from
autoincremenet_datatable_myisam;
update
autoincremenet_datatable_myisam
set
id = 1;
where
id = 2;
select
*
from
autoincremenet_datatable_myisam;
update
autoincremenet_datatable_myisam
set
id = 2;
where
id = 0;
select
*
from
autoincremenet_datatable_myisam;
|
注意:
1、以上测试中的变更不可行.
2、疑问“第一条update和其后面的select确实看到了修改后的值,但是随后的sql继续执行,均报错却又恢复了未修改之前的状态“,这个还不清楚,需要继续研究.
Oracle平台的没有接触,不晓得,熟悉oracle平台的博友针对其自增列的变更做个测试或给出个总结.
最后此篇关于SqlServer Mysql数据库修改自增列的值及相应问题的解决方案的文章就讲到这里了,如果你想了解更多关于SqlServer Mysql数据库修改自增列的值及相应问题的解决方案的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理
这个问题已经有答案了: Condition variable deadlock (2 个回答) 已关闭 5 年前。 在研究多线程时,我编写了以下代码,但在屏幕上没有观察到输出。我在这里做错了什么?我期
复制代码 代码如下: <IfModule mod_rewrite.c> RewriteEngineOn RewriteBase/ #将www.zzvips.com跳转到www.zzv
复制代码 代码如下: <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 把 www.zzvips.com
复制代码 代码如下: Const T_GATEWAY = "1.1.1.1" '网关 Const T_NEWDNS1 = "2.2.2.2" 'DNS1
0. 修改索引 大文本字段支持排序 PUT http://localhost:9200/lrc_blog/_mapping //请求体 { "properties": { "title": { "t
仅 react 当状态发生变化时重新渲染 . 那么为什么我会直接看到我对真实 DOM 所做的更改呢? 我知道我正在修改真实的 DOM,但是当我根本没有改变状态时触发重新渲染的是什么。 import R
Xcode beta 5 推出 @FetchRequest对于 SwiftUI。 我有一个 View ,它有一个 @FetchRequest . NSFetchRequest是在管理器中创建的,该管理
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 7年前关闭。 Improve this questi
我有一个表达式[text][id]应替换为链接 text 解决方案是( id 是整数) $s = preg_replace("/\[([^\]]+)(\]*)\]\[([0-9]+)\]/","$1$
我在 repo 中有一个文件,我不想让任何人更新。 我能做什么? 最佳答案 你想要svn锁:http://www.linxit.de/svnbook/en/1.2/svn.ref.svn.c.lock
说我有项目 list 。我想导出到csv,但在此之前我想做一些计算/修改。 基本上,设置如下所示: PS C:\Files> gci Directory: C:\Files Mode
我有一个非常简单的问题 - 是否可以修改 Java API 的源代码,例如Junit,JABX ? 我知道这似乎是一个非常愚蠢的问题,但它一直困扰着我一段时间。 最佳答案 如果您可以掌握源代码,那么请
我有一个带有变量/列的小标题,其中包括不同形状的小标题列表。我想为其中一个变量中的每个(子)标题添加一个变量/列。 例如此类数据 library("tibble") aaa aaa # A tibb
我有几个菜单,可以在单击时向当前链接添加变量。这是一个例子: 1 2 3 x y z 我的问题是,如果我选择“y”2次,它会添加“&cord=y”2次。相反,我希望它替
我有两个项目:一个服务项目和一个服务安装程序项目。服务项目具有适合我的产品的装配信息。它包括公司信息和正确的服务名称。一旦服务实际安装,所有这些似乎都会被忽略。安装服务时,它使用在服务安装程序的ini
以下代码何时可能产生副作用? @some = map { s/xxx/y/; $_ } @some; perlcritic 将其解释为危险的,因为例如: @other = map { s/xxx/y/
我想知道以下哪种解决方案更好:我想修改一些 .class 文件,我意识到有两种方法可以做到这一点: 反编译.class文件,修改它,最后再次编译。 - 直接用十六进制编辑器修改。 谢谢 最佳答案 在这
这是我的按钮代码 onclick 我希望我的程序等待用户单击一个 JPanel,并且当用户单击 JPanel 时,它应该在控制台上打印其名称。 此按钮代码未显示输出 JPopupMenu popu
我正在使用一个具有“getName()”方法的特定 API。 getName() 返回一个字符串。是否可以修改该字符串? API 中不包含修饰符方法,并且 String getName() 返回的是私
我是一名优秀的程序员,十分优秀!