KingbaseES 如何修改已有数据的列为非空
针对已有的列,如何修改为非空,并且指定默认值?
熟悉Oracle的DBA都知道,如果在将列从可空修改为非空时,必须确保已有的列不含有空值,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | SQL> create table tab01(id integer , name varchar (100),city varchar (100)); Table created. SQL> insert into tab01(id) values (1); 1 row created. SQL> commit ; Commit complete. SQL> alter table tab01 modify city default 'FUZHOU' not null ; alter table tab01 modify city default 'FUZHOU' not null * ERROR at line 1: ORA-02296: cannot enable (SYS.) - null values found |
KingbaseES 同样也不允许将含有空值的列改为非空,如:
1 2 | test=# ALTER TABLE tab01 alter column city set default 'Fuzhou' , alter column city set not null ; 错误: 字段 "city" 包含空值 |
那如何修改已有的列为非空?只能手动将已有为空的数据先进行update,再进行alter table操作。
KingbaseES 还提供 using 选项,用于将列已有的数据修改为指定的值。
注意:不管已有数据的列是否为空,所有数据都会被修改。如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | test=# update tab01 set city= 'ABC' WHERE id=123; UPDATE 1 <br>test=# ALTER TABLE tab01 test-# alter column city set default 'Fuzhou' , test-# alter column city set not null , test-# alter column city set data type varchar (100) using ( 'Fuzhou' ); ALTER TABLE <br>test=# \d tab01 数据表 "public.tab01" 栏位 | 类型 | 校对规则 | 可空的 | 预设 ------+-----------------------------+----------+----------+------------------- id | integer | | | name | character varying (100 char ) | | | city | character varying (100 char ) | | not null | 'Fuzhou' :: varchar 索引: "idx_tab01_city" btree (city) test=# select * from tab01 where city= 'ABC' ; id | name | city ----+------+------ (0 行记录) |
在使用该命令时,务必注意,避免修改了已有记录,导致数据丢失。
KINGBASE研究院
分类:
SQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!