clickhouse中Nullable與非空字段的建表與類型互轉(zhuǎn)方式
背景
有些表隨著業(yè)務(wù)發(fā)展會(huì)涉及字段的約束修改
1、歷史數(shù)據(jù)字段容許為空 ,但現(xiàn)在要求不能為空了;
2、原類型不允許為空,但現(xiàn)在允許可以為空了。
drop table default.tttt CREATE TABLE default.tttt( id String, name String ) ENGINE = MergeTree PARTITION BY id ORDER BY id SETTINGS index_granularity = 8192
嘗試插入數(shù)據(jù)
insert into `default`.tttt values ('0',null)-- 失敗
DB::Exception: Expression returns value NULL, that is out of range of type String, at: null)
insert into `default`.tttt values ('1','name1'),('2','name2') --成功
select * from `default`.tttt
id|name |
--|-----|
2 |name2|
1 |name1|
嘗試由Nullable轉(zhuǎn)換成非空類型
alter table `default`.tttt MODIFY COLUMN name Nullable(String) --成功
插入一個(gè)空值,用于后面的測(cè)試:
insert into `default`.tttt values ('3',null) --成功
select * from `default`.tttt
id|name |
--|-----|
2 |name2|
1 |name1|
3 | |
再嘗試由Nullable轉(zhuǎn)換成非空類型
alter table `default`.tttt MODIFY COLUMN name String --失敗,因?yàn)橛涗浿写嬖趎ull值
DB::Exception: Cannot convert NULL value to non-Nullable type (version 19.9.2.4 (official build))
CREATE TABLE default.tttt2( id Nullable(String), name Nullable(String) ) ENGINE = MergeTree PARTITION BY id ORDER BY id SETTINGS index_granularity = 8192
創(chuàng)建失敗,允許為空值不能用于排序 DB::Exception: Sorting key cannot contain nullable columns (version 19.9.2.4 (official build))
CREATE TABLE default.tttt2( id String, name Nullable(String) ) ENGINE = MergeTree PARTITION BY id ORDER BY id SETTINGS index_granularity = 8192 --成功 --直接用空表轉(zhuǎn)換類型 alter table `default`.tttt2 MODIFY COLUMN name String --成功。
結(jié)論
1、空表,Nullable與非空類型可以互轉(zhuǎn);
2、Nullable字段,如果記錄不帶有Null值,可以從Nullable轉(zhuǎn)成非空類型;
3、含有null值的字段不允許轉(zhuǎn)成非空類型;
4、Nullable字段不允許用于order by;
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql建表常用sql語(yǔ)句個(gè)人經(jīng)驗(yàn)分享
熟悉一些常用的建表語(yǔ)句可以提升你建表的速度效率,本文整理了一些,個(gè)人感覺(jué)還不錯(cuò),希望對(duì)大家有所幫助2014-01-01MYSQL設(shè)置觸發(fā)器權(quán)限問(wèn)題的解決方法
這篇文章主要介紹了MYSQL設(shè)置觸發(fā)器權(quán)限問(wèn)題的解決方法,需要的朋友可以參考下2014-09-09MySQL 中處理 BLOB 和 CLOB 數(shù)據(jù)類型小結(jié)
在MySQL中,BLOB和CLOB 數(shù)據(jù)類型用于存儲(chǔ)大量的二進(jìn)制數(shù)據(jù)和字符數(shù)據(jù),可以使用SQL 語(yǔ)句或編程語(yǔ)言將二進(jìn)制數(shù)據(jù)和字符數(shù)據(jù)插入到BLOB 和CLOB列中,這篇文章主要介紹了MySQL 中處理 BLOB 和 CLOB 數(shù)據(jù)類型,需要的朋友可以參考下2025-03-03MySQL數(shù)據(jù)庫(kù)的一次死鎖實(shí)例分析
本文主要給大家通過(guò)一個(gè)實(shí)例來(lái)具體介紹MySQL死鎖問(wèn)題的相關(guān)知識(shí),接下來(lái)我們就來(lái)一一介紹這部分內(nèi)容,希望能夠?qū)δ兴鶐椭?/div> 2016-11-11mysql8.0使用PXC實(shí)現(xiàn)高可用的示例(Rocky8.0環(huán)境)
本文主要介紹了在Rocky8.0環(huán)境下搭建MySQL8.0的Percona XtraDB Cluster(PXC)集群,,可以實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)同步、讀寫分離和高可用性,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02最新評(píng)論