达梦自增列有两种使用形式,identity与auto_increment
使用说明:
1、一个表只能有一个自增字段,且自增字段类型只能是int或者bigint
2、自增列必须是主键,其他限制请查看sql语言手册详细了解
一、创建自增列(两种方式)
1、默认起点1,步长1
create table t_test1(id int primary key auto_increment) auto_increment=2;
create table t_test2(id int primary key identity);
2、查看那些列使用了自增
select b.owner, b.table_name, a.name COL_NAME, a.type$
from SYS.SYSCOLUMNS a, dba_tables b, sys.sysobjects c
where a.INFO2=1 --自增列
and a.id =c.id
and c.name = b.table_name
3、删除自增定义
alter table t_test1 drop identity ;
alter table t_test2 drop auto_increment;
二、auto_increment说明
实际与identity一样,只是为了兼容mysql语法,与mysql的自增有所区别,例如不能像mysql创建非主键自增列,也不能像mysql一样删除自增建使用alter table t_test modify column id int(11)方式删除自增定义,以下是一个自增列删除迁移到达梦的存储过程例子
CREATE OR REPLACE PROCEDURE ctg_sysmgr."DROPAUTOINCREMENT"() AS
_database_name VARCHAR(1024) DEFAULT '';
_table_name VARCHAR(1024) DEFAULT '';
_column_name VARCHAR(1024) DEFAULT '';
_column_type VARCHAR(1024) DEFAULT '';
--_end int DEFAULT 0;
sql VARCHAR(500);
/* _cursor CURSOR FOR SELECT table_schema, table_name, column_name, column_type FROM "information_schema"."COLUMNS" WHERE EXTRA = 'auto_increment'
AND table_schema IN ('ctg_sysmgr', 'ecs', 'monitor');*/
_cursor cursor for select b.owner, b.table_name, a.name COL_NAME, a.type$
from SYS.SYSCOLUMNS a, dba_tables b, sys.sysobjects c
where a.INFO2=1 --自增列
and a.id =c.id
and c.name = b.table_name; --and b.owner in ('ctg_sysmgr', 'ecs', 'monitor');
BEGIN
OPEN _cursor;
LOOP
FETCH _cursor INTO _database_name, _table_name, _column_name, _column_type;
--WHILE _end = 0
exit when _cursor%NOTFOUND;
/* mysql删除自增列 SET sql = CONCAT("ALTER TABLE "", _database_name, ""."", _table_name , "" MODIFY COLUMN "", _column_name, "" ", _column_type); SET stmt = sql;
EXECUTE stmt; NULL;*/
--达梦删除自增定义
sql = concat('alter table ',_database_name,'.',_table_name,' drop auto_increment;');
execute immediate sql;
--print sql;
END LOOP;
CLOSE _cursor;
/*EXCEPTION
WHEN NO_DATA_FOUND THEN set _end = 1;*/ --退出游标使用 exit when _cursor%NOTFOUND;
END;