更改主键

假设您必须更改现有表的主键。您可以通过执行以下语句来实现此目的:

ALTER TABLE tablename
DROP CONSTRAINT tablename_pkey ,
ADD PRIMARY KEY (column_newkey);

如果主键在其他表中用作外键,则可以添加该关键字。这将自动删除依赖于主键的任何外键:CASCADE

ALTER TABLE tablename
DROP CONSTRAINT tablename_pkey CASCADE,
ADD PRIMARY KEY (column_newkey);

当然,在此之后,您仍然必须重新创建已删除的外键。

默认情况下,KingbaseES还会为每个主键创建并维护一个索引。

安全地更改主键

如果您需要在KingbaseES数据库中的大型表(约1亿条记录)上更改主键列。不能锁定表,因为这是高度事务性的数据库,不能阻止表上的 DML 语句的情况下,安全地更改主键的正确方法是什么?

您可以并发创建唯一索引,在创建索引时,选项concurrently允许对表进行读取和写入访问。但是,并发构建索引比没有该选项,将花费更长的时间。

create unique index concurrently tablename_column_newkey on tablename (column_newkey);

创建索引后,可以将其用作主键:

alter table tablename
add primary key using index tablename_column_newkey;

这只会在很短的时间内锁定表。

最后,修改主键索引名称,

alter index tablename_column_newkey rename to tablename_pkey;

使用默认名称,便于识别表、约束和唯一索引之间的关系。

查看约束外键

要查看哪些外键指向有问题的特定表,您可以顺便使用以下语句:

SELECT tc.table_schema,
tc.constraint_name,
tc.table_name,
kcu.column_name,
ccu.table_schema AS foreign_table_schema,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name
FROM information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
AND tc.table_schema = kcu.table_schema
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
AND ccu.table_schema = tc.table_schema
WHERE tc.constraint_type = 'FOREIGN KEY'
AND ccu.table_name = 'tablename';

最新文章

  1. 【多线程】JAVA多线程和并发基础面试问答(转载)
  2. sql 更新重复数据只取一条记录
  3. 总结源码编译安装mysql
  4. 自定义 select 下拉菜单
  5. Linux设置日期
  6. 【转】 Ubuntu下配置USB转串口及串口工具配置--不错
  7. [Android学习笔记]Android调试
  8. C语言编码风格_集锦_1
  9. Eclipse导入项目常见问题----jdk版本问题(有个红色感叹号)01
  10. css伪类的说明以及使用(css事件)
  11. SLAM入门之视觉里程计(2):两视图对极约束 基础矩阵
  12. 手把手教你 LabVIEW 串口仪器控制——VISA 驱动下载安装篇
  13. Mybatis框架四:输入参数、输出参数
  14. 使用CSS选择器定位页面元素
  15. 漏洞利用查询工具sandi
  16. Spring系列(四):Spring AOP详解和实现方式(xml配置和注解配置)
  17. Python模块Pygame安装
  18. GreenPlum学习笔记:基础知识
  19. 关于 webpack 跨域
  20. B+树全面解析

热门文章

  1. Modeling Conversation Structure and Temporal Dynamics for Jointly Predicting Rumor Stance and Veracity(ACL-19)
  2. 项目git commit时卡主不良代码:husky让Git检查代码规范化工作
  3. APISpace 未来7天生活指数API接口 免费好用
  4. 4-7 CS后台项目练习-1
  5. 【中国象棋人机对战】引入了AI算法,学习低代码和高代码如何混编并互相调用
  6. 第k小 来源:牛客网
  7. Vue中computed用法
  8. Vue 基本列表 && 数据过滤与排序
  9. 【Java面试】生产环境服务器变慢,如何诊断处理?
  10. vue中vuex实现持久化的几种方法