当前位置:   article > 正文

达梦自增列identity_达梦数据库自增列

达梦数据库自增列

达梦自增列有两种使用形式,identity与auto_increment

使用说明:

1、一个表只能有一个自增字段,且自增字段类型只能是int或者bigint

2、自增列必须是主键,其他限制请查看sql语言手册详细了解

一、创建自增列(两种方式)

1、默认起点1,步长1

  1. create table t_test1(id int primary key auto_increment) auto_increment=2;
  2. create table t_test2(id int primary key identity);

2、查看那些列使用了自增

  1. select b.owner, b.table_name, a.name COL_NAME, a.type$
  2. from SYS.SYSCOLUMNS a, dba_tables b, sys.sysobjects c
  3. where a.INFO2=1 --自增列
  4. and a.id =c.id
  5. and c.name = b.table_name

3、删除自增定义

  1. alter table t_test1 drop identity ;
  2. alter table t_test2 drop auto_increment;

二、auto_increment说明

实际与identity一样,只是为了兼容mysql语法,与mysql的自增有所区别,例如不能像mysql创建非主键自增列,也不能像mysql一样删除自增建使用alter  table t_test modify column id int(11)方式删除自增定义,以下是一个自增列删除迁移到达梦的存储过程例子

  1. CREATE OR REPLACE PROCEDURE ctg_sysmgr."DROPAUTOINCREMENT"() AS
  2. _database_name VARCHAR(1024) DEFAULT '';
  3. _table_name VARCHAR(1024) DEFAULT '';
  4. _column_name VARCHAR(1024) DEFAULT '';
  5. _column_type VARCHAR(1024) DEFAULT '';
  6. --_end int DEFAULT 0;
  7. sql VARCHAR(500);
  8. /* _cursor CURSOR FOR SELECT table_schema, table_name, column_name, column_type FROM "information_schema"."COLUMNS" WHERE EXTRA = 'auto_increment'
  9. AND table_schema IN ('ctg_sysmgr', 'ecs', 'monitor');*/
  10. _cursor cursor for select b.owner, b.table_name, a.name COL_NAME, a.type$
  11. from SYS.SYSCOLUMNS a, dba_tables b, sys.sysobjects c
  12. where a.INFO2=1 --自增列
  13. and a.id =c.id
  14. and c.name = b.table_name; --and b.owner in ('ctg_sysmgr', 'ecs', 'monitor');
  15. BEGIN
  16. OPEN _cursor;
  17. LOOP
  18. FETCH _cursor INTO _database_name, _table_name, _column_name, _column_type;
  19. --WHILE _end = 0
  20. exit when _cursor%NOTFOUND;
  21. /* mysql删除自增列 SET sql = CONCAT("ALTER TABLE "", _database_name, ""."", _table_name , "" MODIFY COLUMN "", _column_name, "" ", _column_type); SET stmt = sql;
  22. EXECUTE stmt; NULL;*/
  23. --达梦删除自增定义
  24. sql = concat('alter table ',_database_name,'.',_table_name,' drop auto_increment;');
  25. execute immediate sql;
  26. --print sql;
  27. END LOOP;
  28. CLOSE _cursor;
  29. /*EXCEPTION
  30. WHEN NO_DATA_FOUND THEN set _end = 1;*/ --退出游标使用 exit when _cursor%NOTFOUND;
  31. END;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/638748
推荐阅读
相关标签
  

闽ICP备14008679号