ADB中没有主键自增列 有没有排序的字段,隐藏的排序字段也可以?[阿里云云原生数据仓库]

问题1:ADB中没有主键自增列 有没有排序的字段,隐藏的排序字段也可以? 问题2:CREATE TABLE user_101 ( id BIGINT(20) NOT NULL, name VARCHAR(255) NULL DEFAULT NULL, gender VARCHAR(2) NULL DEFAULT NULL, email VARCHAR(255) NULL DEFAULT NULL, phone VARCHAR(255) NULL DEFAULT NULL, tel VARCHAR(32) DEFAULT NULL, postcode VARCHAR(255) NULL DEFAULT NULL, address VARCHAR(255) NULL DEFAULT NULL, idcard VARCHAR(255) NULL DEFAULT NULL, bankcard VARCHAR(64) DEFAULT NULL, birth DATETIME NULL DEFAULT NULL, nid BIGINT(20) ) DISTRIBUTE BY HASH(id) INDEX_ALL=’N’; — ———————————————但是像这样创建的表就没有主键和自增列,怎么处理

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 问题1:在阿里云云原生数据仓库AnalyticDB中,虽然没有主键自增列,但是可以通过其他方式实现相同的功能,比如使用序列(Sequence)实现自增ID,序列可以在创建表之前独立创建,然后在插入数据时从序列中获取一个唯一的ID值。至于排序,ADB提倡使用分布式SQL的方式(即使用ORDER BY关键字),这样会自动将排序负载分散到多个节点上,加速排序操作。

    问题2:如果在创建表时没有定义主键和自增列,可以在已经存在的表中添加主键和自增列。具体的做法是在已存在的表中添加一个新的ID列,然后通过UPDATE语句将该列设置为自增列,最后将该列设为主键。例如:

    ALTER TABLE user_101 ADD COLUMN new_id BIGINT(20) NOT NULL AUTO_INCREMENT FIRST;UPDATE user_101 SET new_id = id;ALTER TABLE user_101 DROP COLUMN id;ALTER TABLE user_101 CHANGE COLUMN new_id id BIGINT(20) NOT NULL AUTO_INCREMENT FIRST;ALTER TABLE user_101 ADD PRIMARY KEY(id);

    这段代码会在原有的user_101表上添加一个新列new_id用来存放自增ID,然后将该列通过UPDATE语句的形式赋值为旧的ID列的值(注意,此处要求旧的ID列不能包含重复值)。接着,删除原有的ID列,将new_id列重命名为id,并定义为自增列和主键。这样,就可以在已经存在的表中实现主键和自增列的功能。

    这种方式虽然可以添加主键和自增列,但是可能会对表的性能产生一定影响,特别是在数据量较大或者频繁执行写操作时。因此,建议在创建表时就设置好主键和自增列,以提高表的设计和数据操作效率。

  2. 回答1:如果在创建表时没有定义主键,那么AnalyticDB MySQL将添加一个__adb_auto_id__字段作为主键、DISTRIBUTED BY COLUMN,还有AUTO_INCREMENT自增列 回答2:show create table 表名;,可以看到会增加一个__adb_auto_id__字段并且设置为了主键和自增列,可以通过order by __adb_auto_id__进行排序https://help.aliyun.com/document_detail/123333.html?spm=a2c4g.184258.0.i26 ,此回答整理自钉群“云数据仓库ADB-开发者群”