-
2021-02-17 21:41:47
大家好,我是只谈技术不剪发的 Tony 老师。
MySQL 8.0.23 版本增加了一个新的功能:隐藏字段(Invisible Column),也称为不可见字段。本文给大家介绍一下 MySQL 隐藏字段的相关概念和具体实现。
如果你觉得文章有用,欢迎评论📝、点赞👍、推荐🎁
基本概念
隐藏字段需要在查询中进行显式引用,否则对查询而言是不可见的。MySQL 8.0.23 开始支持隐藏字段,在此之前所有的字段都是可见字段。
考虑以下应用场景,假如一个应用程序使用
SELECT *
语句访问某个表,并且必需持续不断地进行查询,即使我们为该表增加了一个该应用不需要的新字段时也要求能够正常工作。对于SELECT *
查询,星号(*)代表了表中除隐藏字段之外的所有字段,因此我们可以将新加的字段定义为隐藏字段。该隐藏字段对于SELECT *
查询是不可见的,因此应用能够继续运行。如果新版本的应用程序需要使用该字段,可以在查询中显式指定。PS:不推荐使用
SELECT *
语句查询数据,应该明确指定需要返回的字段。隐藏字段与 DDL 语句
默认情况下创建的字段属于可见字段。如果想要显式指定字段的可见性,可以在
CREATE TABLE
或者ALTER TABLE
语句中为字段的定义指定VISIBLE 或者 INVISIBLE 关键字。例如:CREATE TABLE t1 ( i INT, j DATE INVISIBLE ) ENGINE = InnoDB; ALTER TABLE t1 ADD COLUMN k INT INVISIBLE;
如果想要修改某个字段的可见性,同样可以使用 VISIBLE 或者 INVISIBLE 关键字。例如:
ALTER TABLE t1 CHANGE COLUMN j j DATE VISIBLE; ALTER TABLE t1 MODIFY COLUMN j DATE INVISIBLE; ALTER TABLE t1 ALTER COLUMN j SET VISIBLE;
使用隐藏字段时,需要注意以下事项:
- 一个表至少需要一个可见字段。如果将所有字段都设置为隐藏字段,将会返回错误。
- 隐藏字段支持常见的字段属性:NULL、NOT NULL 以及 AUTO_INCREMENT 等等。
- 计算列(Generated column)可以是隐藏字段。
- 索引可以使用隐藏字段,包括 PRIMARY KEY 和 UNIQUE 索引。虽然一个表至少需要一个可见字段,但是索引定义中可以不包含任何可见字段。
- 删除某个表中的隐藏字段时,同时会从相关索引中删除该字段。
- 外键约束可以基于隐藏字段进行定义,同时外键约束也可以引用隐藏字段。
- CHECK 约束可以基于隐藏字段进行定义。插入或者更新数据时,如果违反了隐藏字段上的 CHECK 约束将会返回错误。
如果使用
CREATE TABLE ... LIKE
语句复制表结构,将会复制原表中的隐藏字段,而且它们在新表中仍然是隐藏字段。如果使用CREATE TABLE ... SELECT
语句复制表,不会包含隐藏字段,除非显式指定了隐藏字段。尽管如此,即使包含了原表中的隐藏字段,新表中的这些字段将会变成可见字段。例如:mysql> CREATE TABLE t1 (col1 INT, col2 INT INVISIBLE); mysql> CREATE TABLE t2 AS SELECT col1, col2 FROM t1; mysql> SHOW CREATE TABLE t2\G *************************** 1. row *************************** Table: t2 Create Table: CREATE TABLE `t2` ( `col1` int DEFAULT NULL, `col2` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
如果想要保留这些字段的隐藏属性,可以在 CREATE TABLE 之后为它们指定隐藏属性。例如:
mysql> CREATE TABLE t1 (col1 INT, col2 INT INVISIBLE); mysql> CREATE TABLE t2 (col2 INT INVISIBLE) AS SELECT col1, col2 FROM t1; mysql> SHOW CREATE TABLE t2\G *************************** 1. row *************************** Table: t2 Create Table: CREATE TABLE `t2` ( `col1` int DEFAULT NULL, `col2` int DEFAULT NULL /*!80023 INVISIBLE */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
视图可以引用隐藏字段,需要在定义中显式指定这些字段。在视图定义之后修改字段的可见性不会影响视图。
隐藏字段与 DML 语句
对于 SELECT 语句,除非在查询列表中显式指定了隐藏字段,否则查询结构中不会包含隐藏字段。查询列表中的 * 和 tbl_name.* 不会包含隐藏字段。自然连接不会包含隐藏字段。
对于以下语句:
mysql> CREATE TABLE t1 (col1 INT, col2 INT INVISIBLE); mysql> INSERT INTO t1 (col1, col2) VALUES(1, 2), (3, 4); mysql> SELECT * FROM t1; +------+ | col1 | +------+ | 1 | | 3 | +------+ mysql> SELECT col1, col2 FROM t1; +------+------+ | col1 | col2 | +------+------+ | 1 | 2 | | 3 | 4 | +------+------+
第一个 SELECT 语句没有引用隐藏字段 col2(* 不包含隐藏字段),因此查询结果中没有返回 col2 字段。第二个 SELECT 语句显式指定了 col2 字段,因此查询结果返回了该字段。
对于查询语句,如果没有为隐藏字段指定数据,使用隐式默认值规则进行赋值。
对于 INSERT 语句(包括 REPLACE 语句的数据插入),如果没有指定字段列表、指定空白列表或者没有在字段列表中指定隐藏字段时,使用隐式默认值赋值。例如:
CREATE TABLE t1 (col1 INT, col2 INT INVISIBLE); INSERT INTO t1 VALUES(...); INSERT INTO t1 () VALUES(...); INSERT INTO t1 (col1) VALUES(...);
对于前两个 INSERT 语句,VALUES() 列表必须为每个可见字段和隐藏字段提供一个数值。对于第三个 INSERT 语句,VALUES() 列表必须为每个指定的字段提供一个数值。
对于 LOAD DATA 和 LOAD XML 语句,如果没有指定字段列表或者没有在字段列表中指定隐藏字段时,使用隐式默认值赋值。输入数据中不能包含隐藏字段的值。
如果想要为上面的语句提供一个非默认的数据,可以在字段列表中显式指定隐藏字段并且在 VALUES() 列表中指定一个数值。
INSERT INTO … SELECT * 和 REPLACE INTO … SELECT * 不会包含隐藏字段,因为 * 不会返回隐藏字段。此时同样会使用隐式默认值规则进行赋值。
基于 PRIMARY KEY 或者 UNIQUE 索引执行插入或者忽略插入、替换或者修改数据的语句中,MySQL 对隐藏字段的处理方式和可见字段相同:隐藏字段同样会用于键值的比较。准确来说,如果某个新的数据行和已有数据行的唯一键字段值相同,无论索引字段是否可见,都会使用以下处理方式:
- 如果指定了 IGNORE 修饰符,INSERT、LOAD DATA 以及 LOAD XML 都会忽略新的数据行。
- REPLACE 使用新的数据行替换原有的数据行。如果指定了 REPLACE 修饰符,LOAD DATA 和 LOAD XML 也是如此。
- INSERT … ON DUPLICATE KEY UPDATE 更新原有的数据行。
如果想要使用 UPDATE 语句更新隐藏字段,像可见字段一样显式进行赋值即可。
隐藏字段相关的元数据
我们可以通过 INFORMATION_SCHEMA.COLUMNS 系统表的 EXTRA 字段或者 SHOW COLUMNS 命令查看字段的可见属性。例如:
mysql> SELECT TABLE_NAME, COLUMN_NAME, EXTRA FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 't1'; +------------+-------------+-----------+ | TABLE_NAME | COLUMN_NAME | EXTRA | +------------+-------------+-----------+ | t1 | i | | | t1 | j | | | t1 | k | INVISIBLE | +------------+-------------+-----------+
默认情况下字段是可见的,此时 EXTRA 字段为空。对于隐藏字段,EXTRA 显式为 INVISIBLE。
SHOW CREATE TABLE 命令可以显式表中的隐藏字段,字段定义中包含一个基于版本的注释,其中包含了一个 INVISIBLE 关键字:
mysql> SHOW CREATE TABLE t1\G *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `i` int DEFAULT NULL, `j` int DEFAULT NULL, `k` int DEFAULT NULL /*!80023 INVISIBLE */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
mysqldump 和 mysqlpump 使用 SHOW CREATE TABLE 命令,因此它们导出的表定义中包含可隐藏字段。同时,它们在导出的数据中包含了隐藏字段的值。如果将导出文件加载到不支持的隐藏字段的低版本 MySQL 中,将会忽略基于版本的注释信息,从而将隐藏字段作为可见字段使用。
隐藏字段与二进制日志
对于二进制日志中的事件,MySQL 使用以下方式处理隐藏字段:
- 创建表的事件中包含了隐藏字段的 INVISIBLE 属性。
- 数据行事件中的隐藏字段和可见字段处理方式相同。它们会根据系统变量 binlog_row_image 的设置进行处理。
- 当数据行事件被应用时,隐藏字段和可见字段处理方式相同。其中,使用的算法和索引基于系统变量 slave_rows_search_algorithms 的设置进行选择。
- 计算写入集(writeset)时隐藏字段和可见字段处理方式相同。写入集中包含了基于隐藏字段定义的索引。
- mysqlbinlog 命令中包含了字段元数据中的可见属性。
更多相关内容 -
HIVE 增加修改删除字段
2022-03-19 18:35:24HIVE 增加修改删除字段非分区表增加字段修改字段(修改字段名称、类型、注释、顺序)删除字段分区表新增字段 非分区表 增加字段 增加字段可以使我们在所有字段之后和分区字段之间增加一个字段 使用格式 ALTER TABLE ...非分区表
增加字段
增加字段可以使我们在所有字段之后和分区字段之间增加一个字段
使用格式ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) [CASCADE|RESTRICT] -- (Note: Hive 1.1.0 and later)
使用示例,在
user_info
中增加user_addr
字段,现有的表数据如下:
ALTER TABLE user_info ADD COLUMNS (user_addr string COMMENT '用户地址');
当我增加新的字段user_addr
后,新增字段前的数据该列显示为NULL
,那么如果我们新增一条数据呢?INSERT INTO TABLE user_info SELECT '003' as user_id, 'jack' as user_name, '34' as age, '广东深圳' as user_addr ;
结论:非分区表新增字段后,原有数据的该字段会显示为
NULL
,新增的数据会按新增的数据进行展示
还没结束,我们向user_info
再新增user_appr
字段的时候再加下这两个CASCADE、RESTRICT
属性,看看会发生什么ALTER TABLE user_info ADD COLUMNS (user_appr string COMMENT '用户偏好') CASCADE;
添加CASCADE
后执行失败,说明非分区表再添加字段时不能加CASCADE
ALTER TABLE user_info ADD COLUMNS (user_appr string COMMENT '用户偏好') RESTRICT;
添加RESTRICT
后执行成功,该语法具体含义后面再述修改字段(修改字段名称、类型、注释、顺序)
修改前
修改字段
user_addr
的字段名称为user_address
ALTER TABLE user_info CHANGE user_addr user_address string;
修改user_address
的顺序,将该段放置在user_appr
后# 不支持,执行报错 # 语义:将user_address 更改为 user_address,类型为 string,放置在 user_appr 后面 ALTER TABLE user_info CHANGE is_active is_active string AFTER user_appr;
修改
is_active
字段的类型为string
,修改前为int
ALTER TABLE user_info CHANGE is_active is_active string;
修改
user_address
字段的中文注释ALTER TABLE user_info CHANGE user_address user_address STRING COMMENT '修改字段注释';
注意:以上的修改,仅仅是实现了修改元数据,实际的
HDFS
文件并没有修改,这个很关键删除字段
HIVE 不能直接删除字段,且删除字段的操作有很大的局限性,一般尽量删除后面的字段,但是如果直接从中间删除,可能会出出现错位的情况。而且尽量不要有删除字段的操作
-- 示例:删除 user_age 字段 ALTER TABLE user_info REPLACE COLUMNS (user_id STRING, user_name STRING);
看到结果,我们发现user_age
字段确实已经被移除了,这时我们如果执行添加user_age
会发生什么情况ALTER TABLE user_info ADD COLUMNS (user_age STRING COMMENT '用户年龄');
添加字段后,我们发现,之前该列的数据重新恢复了,并不是我们期望的 NULL 。因此,我们可以得出结论:HIVE 删除字段只是修改了元数据而已,真实的文件数据并没有被删除分区表
新增字段
首先我们创建一张分区表
CREATE TABLE IF NOT EXISTS cust_info ( user_id string COMMENT '用户ID' ,user_name string COMMENT '用户姓名' ,user_age string COMMENT '用户年龄' ) COMMENT '客户信息表' PARTITIONED BY (ds STRING COMMENT'分区') ; INSERT OVERWRITE TABLE cust_info partition(ds = '20220223') SELECT '001' as user_id, 'kyle' as user_name, '23' as user_age UNION ALL SELECT '002' as user_id, 'lisa' as user_name, '25' as user_age ;
我们新增一个字段
user_addr
字段试试ALTER TABLE cust_info ADD COLUMNS (user_addr string COMMENT '用户地址') ;
新增完毕后,我们发现
20220223
分区中的数据user_addr
列已经出现了,而且该列的值全部为NULL
不符合我们的期望,我们来重新对该分区覆盖插入数据,并对该分区插入数据,对该列赋值INSERT OVERWRITE TABLE cust_info partition(ds = '20220223') SELECT '001' as user_id, 'kyle' as user_name, '23' as user_age, '中国深圳' as user_addr UNION ALL SELECT '002' as user_id, 'lisa' as user_name, '25' as user_age, '中国北京' as user_addr ;
插入数据后重新查看,发现该列的值仍然为
NULL
,这是怎么回事
看下官方的文档
大概的意思为:新增字段时,默认为RESTRICT
,这样只会修改元数据,并不会对历史分区生效,因此在刷历史数据的时候不生效。为了对历史分区生效,需要增加CASCADE
。只对历史分区有影响,新建分区则没有影响我们删除表结构,然后重新插入数据并执行新增字段操作试试
ALTER TABLE cust_info ADD COLUMNS (user_addr string COMMENT '用户地址') CASCADE ;
历史分区数据重新刷入成功另外一种方法:先删除分区,然后重新插入数据(我司的解决办法)
修改字段(change column)
HIVE ALTER COLUMN 官方介绍
SPARK ALTER COLUMN 官方介绍注意,博主使用的是 HIVE ON MR - HIVE 2.1
语法介绍
ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];
This command will allow users to change a column’s name, data type, comment, or position, or an arbitrary combination of them. The PARTITION clause is available in Hive 0.14.0 and later; see Upgrading Pre-Hive 0.13.0 Decimal Columns for usage. A patch for Hive 0.13 is also available (see HIVE-7971).
通过该语法用户可以修改字段的名称、类型、注释、分区,可以组合修改注意,CASCADE 和 RESTRICT(默认) 的区别,CASCADE不仅修改元数据,还将作用于历史分区。RESTRICT仅修改元数据,但是会对新建的分区生效
使用示例
-- 先建表插数 CREATE TABLE IF NOT EXISTS customer_info ( user_id string COMMENT '用户ID' ,user_name string COMMENT '用户姓名' ,user_age int COMMENT '用户年龄' ) COMMENT '客户信息表' PARTITIONED BY (ds STRING COMMENT'分区') ; INSERT OVERWRITE TABLE customer_info partition(ds = '20220223') SELECT '001' as user_id, 'kyle' as user_name, 23 as user_age UNION ALL SELECT '002' as user_id, 'lisa' as user_name, 25 as user_age ;
-- 修改 user_id 字段为 id ALTER TABLE customer_info CHANGE user_id id string;
-- 修改 age 字段类型为 string, 并且修改字段顺序到 user_name 之后 ALTER TABLE customer_info CHANGE user_age age int AFTER user_name;
-- 分区表修改的语法 SET hive.exec.dynamic.partition = true; ALTER TABLE customer_info PARTITION (ds) CHANGE COLUMN age user_age DECIMAL(38,18);
替换字段(replace column)
REPLACE COLUMNS 删除所有现有的字段列表并替换为新的字段列表。 这只能用于具有本地的序列化 SerDe(DynamicSerDe、MetadataTypedColumnsetSerDe、LazySimpleSerDe 和 ColumnarSerDe)的表。
使用示例
-- 先建表插数 CREATE TABLE IF NOT EXISTS customer_info ( user_id string COMMENT '用户ID' ,user_name string COMMENT '用户姓名' ,user_age int COMMENT '用户年龄' ) COMMENT '客户信息表' PARTITIONED BY (ds STRING COMMENT'分区') ; INSERT INTO customer_info partition(ds = '20220223') VALUES('001', 'kyle', 23),('002', 'jack', 24); INSERT INTO customer_info partition(ds = '20220224') VALUES('003', 'lisa', 23);
-- 将三个字段全部替换 ALTER TABLE customer_info REPLACE COLUMNS (ecif string, name string COMMENT 'new comment', age_info int);
-- 只替换一个字段看下是什么情况 ALTER TABLE customer_info REPLACE COLUMNS (user_id string);
这个语法使用的场景很少,用通俗易懂的解释就是:用新的字段列表替换旧的字段列表,一定要注意对应的字段类型相同,否则会报错,和 SPARK 的语法使用起来有区别,SPARK 把分区字段也算做可替换的字段了 -
了解字段属性、别名和表显示选项
2021-03-22 08:38:45属性表中的每个字段或列都具有描述其内容以及数据显示方式的属性。您可以查看图层属性 和表属性 对话框的字段选项卡上的字段属性,某些情况下还可对其进行编辑。字段选项卡上的设置可用于确定属性在 ArcMap 中的显示...属性表中的每个字段或列都具有描述其内容以及数据显示方式的属性。您可以查看图层属性 和表属性 对话框的字段选项卡上的字段属性,某些情况下还可对其进行编辑。字段选项卡上的设置可用于确定属性在 ArcMap 中的显示方式,包括在属性表窗口中、识别 窗口中,以及属性 窗口(编辑时)中。
例如,您可以执行以下任意操作:定义要显示的字段(可见字段)。
定义字段名称的别名,从而使字段在表中显示简单易懂的名称。此操作很有帮助意义,因为您无法在创建字段后更改数据中的字段名称。
定义数值数据的格式设置,例如,货币值的格式或用于显示相关小数位数的格式。格式化数据显示在识别 窗口、属性 窗口、图例、内容列表、表窗口等位置中。
确定识别 窗口、属性 窗口以及 ArcMap 中其他功能使用的显示字段。
编写可通过构建更复杂的显示字符串条目来代替显示字段内容的表达式。
设置表的显示选项和使用列。
某些字段属性是在创建表或要素类时定义的,并且无法更改,这些属性包括字段类型、长度、精度以及小数位数。在字段选项卡上导航字段列表
处理属性时,您在字段选项卡上选择的可见性、顺序和别名等设置将应用于整个 ArcMap,例如,在属性表窗口中、在识别 窗口中,以及在属性 窗口(编辑时)中。这些设置还将应用于连接中的追加字段,但仅当从源表访问这些连接字段时才能对其进行编辑。
字段选项卡的左侧是包含要素类或表中所有字段的列表,其中包括与之相连接的任何字段。在 ArcMap 中,您可以通过选中复选框来显示字段,或取消选中复选框来隐藏字段。您还可以切换所有字段的可见性,方法是单击打开所有字段或关闭所有字段按钮,按住 Ctrl 同时单击某个复选框,或在列表中的字段高亮显示时按 Ctrl+空格键。
字段选项卡上的字段排列顺序就是字段在整个 ArcMap 中的默认显示顺序。要重新排序某字段,可在列表中单击该字段,然后将其拖动到理想位置,或单击箭头按钮在列表中对其进行上移或下移。您还可以同时选择多个字段并为其重新排序。单击箭头按钮可在列表中将所选字段上移或下移一个位置。要将字段移至列表顶部或底部,可单击箭头按钮旁边的下拉箭头,然后单击移到顶部或移到底部。
要按字母顺序排序列表,可单击表选项按钮,然后选择升序或降序。要返回到数据源中指定的初始顺序,可单击表选项按钮,然后单击重置字段顺序。此外,可使用表选项菜单切换字段在表中以别名显示还是以实际字段名显示。设置字段属性
在列表左侧单击某个字段时,选项卡右侧将显示此单个字段的属性(选择多个字段时右侧为空)。您可以更改外观部分显示的属性,但无法更改字段详细信息下列出的属性。单击右侧的某行时,选项卡底部的框中将提供相关的属性说明。
外观属性用于指定字段内容在 ArcMap 中的显示方式。字段别名是字段的替代名称,与字段的实际名称相比,它更加简明易懂。如果您要区别某些字段,例如希望这些字段在属性 窗口中接受编辑时更容易被看到,则可将高亮显示属性设置为是。这将更改字体颜色并添加背景阴影,从而将这些字段从其他字段中区分开来。您还可将字段设置为只读,即无论拥有文件权限还是数据库权限,都只能查看而无法编辑该字段。此外,如果您处理的是数值字段,则可通过单击数字格式行中的省略号按钮来设置数字格式。每个类别 - 货币、数值百分比、分数等 - 都具有一组专门的可用格式选项。
在字段详细信息下列出的各项均为 ArcGIS 系统属性,包括字段数据类型、名称、精度、小数位数、长度、任何编码属性域或范围属性域的名称,以及是否允许空值。这些属性会因数据源(地理数据库、shapefile 等)和字段类型(字符串、长整型、日期等)的不同而有所不同。由于您能查看但不能更改这些属性,因此这些属性会以灰色文本(而不是黑色文本)显示。字段别名
字段别名是字段的备用名称 - 它能更加简明易懂地描述字段内容。与真实名称不同,别名不需要遵守数据库的限制,可以包含最多 255 个字符 - 包括空格、数字和特殊字符。通过指定别名,可以为字段提供比其实际字段名更具描述性的名称。
例如,可以为在地理数据库中存储为 DEED_DATE 的字段指定“Date of deed”这样的别名。
字段别名分为两种类型:要素类字段别名(仅限地理数据库)和图层字段别名。可以在 ArcCatalog 的“要素类属性”对话框中处理要素类字段别名。向 ArcMap 添加地理数据库要素类时,其字段别名最初用于图层字段别名。但在此之后,两者之间不存在任何关联。在 ArcMap 中设置的属性将覆盖数据源属性,但这些属性不会返回到数据源。这表示在更改图层字段别名时,将不会更改要素类字段别名,在更改地理数据库字段别名时,将不会更新基于此要素类的任何现有图层的图层字段别名。
您只能通过将地图文档或图层保存为 .lyr 文件这种方法保留字段选项卡上的设置内容。表显示选项
打开某个表后,您可以通过不同的方式自定义该表的外观。例如,如果您不喜欢表的默认字体,则可以更改字体,并设置字体大小。您可以针对所有表进行更改,或只针对某个表进行更改 - 每个表都有其各自的独立设置。
查看单个表的内容时,可以调整列大小以更好地查看其中的值。还可以通过更改位置来对比两个不同字段的值。在浏览表内容时冻结表列可能对您很有帮助。冻结的列会被锁定在表的左侧位置,并通过一条粗黑线与其他列隔开。在水平滚动时,所有其他列都将正常移动,而冻结的列将停留在固定位置。
此外,还可以设置的显示选项包括:更改可见字段的宽度并重新排列这些字段
冻结某个字段以便在滚动表时始终看到该字段
选择是否显示含子类型或属性域的字段的值或描述
更改表中各类属性的显示颜色或字体
设置表标题和单元格高度
设置指示是否已为字段建立索引的字符(索引可提高查询性能。)设置列标题和单元格高度
您可以更改列标题(沿表窗口顶部显示字段名称的行)和单元格的高度。通过增加这些值可以增加行的高度。
如果为列标题或单元格高度指定的值可提供足够的空间来容纳附加行,则列标题中的字段名称或单元格中的内容在超过当前的列宽度时将自动换行。这对包含长字段名称或长文本字段(如描述或注释字段)的表特别有用。增加表中标题或单元格的高度可以使这些字段更容易阅读。
默认的标题高度为字体大小的 125%。默认的单元格高度为字体大小的 115%。如果将单元格高度值设置为小于 115%,则在尝试编辑单元格的内容时,插入栏将无法显示。
通常,您应该保留自定义菜单 > ArcMap 选项 对话框的表选项卡中的默认标题高度值 125% 和默认单元格高度值 115%,以便所有新建表都使用此标准设置。如果希望某特定表具有更高的行,以使长文本字段可以换行(如上图所示),则可在“表”窗口的表选项
> 外观 对话框中指定所需设置。这样,设置将只应用于该特定表。快速设置字段属性和别名
在“表”窗口打开时,可以右键单击字段标题,然后单击“属性”打开一个允许设置和查看该字段的某些属性的对话框。通过此对话框,您可以指定字段别名;打开或关闭字段;更改字段的数字格式(如果它不是字符串字段);以及查看(但不是更改)字段的其他数据属性,例如,字段是否允许空值和字段的精度和小数位数。设置列宽度
在“表”窗口中,字段以列的形式显示。您可以左右拖动字段之间的列分界线来改变其宽度,其中包括拖动分界线使字段完全隐藏。
另外,还可以通过自动重设列宽以撤消所做更改。通过表选项菜单中的恢复默认列宽命令可以将所有列恢复为默认列宽。此命令也可用于显示由于列宽被拖动为零而完全隐藏的所有字段。恢复默认列宽命令并不会重置字段顺序,因此如果在“表”窗口中对字段进行过拖动,当使用此命令时,将保留拖动后的新顺序。
如果字段在表中完全隐藏,您将看到该位置的列分界线变粗。这将方便您找到隐藏了一个或多个字段的位置。如果某位置隐藏了多个字段,您将看到更粗的列分界线。
要对隐藏的字段取消隐藏,请向右拖动变粗的分界线或双击此分界线。要显示所有隐藏的字段,可使用表选项菜单中的恢复默认列宽命令。在“表”窗口 中完全隐藏字段很有用,因为您可以通过此操作选择所需的表显示方式(包括在使用表选项菜单中的打印命令打印表时的显示方式)而无需完全关闭字段,这将防止字段在其他位置随意列出。
-
如何通过SQL按内容拆分字段(将一个字段值拆分两个字段)
2021-12-03 09:08:39SQL按内容拆分字段通过SQL按内容分拆成多字段
需求描述
将表里的一个字段,该字段的某行开始是key,随后对应的是其value,将key和value分别拆分对应的两个字段。如下图示例:
问题分析
该问题不适合用SQL来处理,因为SQL主要处理表格形式的结构化数据,用程序语言如Java、Python等更方便些。
解决方法
-- # SQL不擅长处理这种数据,用程序语言更方便些。 -- Step1 创建表并初始化数据 CREATE TABLE tb_data( data varchar(20) ) INSERT INTO tb_data SELECT 'a.wav' data UNION SELECT 1 data UNION SELECT 2 data UNION SELECT 'b.wav' data UNION SELECT 3 data UNION SELECT 4 data UNION SELECT 'c.wav' data UNION SELECT 5 data UNION SELECT 6 data UNION SELECT 7 data -- SELECT * FROM tb_data -- Step2 创建临时表tmp_data,主要存记录序号、分割开始位置、记录数。 -- DROP TABLE tmp_data; create TEMPORARY table tmp_data( id int, data varchar(20), pos smallint, cnt int ) -- Step3 插入临时表。 INSERT INTO tmp_data SELECT (@i:=@i+1)id,tb_data.*,INSTR(data,'.') dot,cnt FROM tb_data,(select @i:=0)t ,(SELECT COUNT(1) cnt FROM tb_data) t2 SELECT * FROM tmp_data -- Step4 拆分字段 SELECT B.data,A.data seq -- * FROM tmp_data A JOIN ( SELECT * , CASE WHEN LEAD(id)OVER(order by id) IS NULL THEN 999999 ELSE LEAD(id)OVER(order by id) END as next FROM tmp_data WHERE pos>0 ) B ON A.id > B.id AND A.id < B.next -- Step 4 查看结果 /* data seq a.wav 1 a.wav 2 b.wav 3 b.wav 4 c.wav 5 c.wav 6 c.wav 7 */
-
SqlServer 增加字段,修改字段名,删除字段,修改字段默认值
2021-04-26 17:26:46SqlServer 增加字段,修改字段名,删除字段,修改字段默认值 1:增加字段 语法:alter table 表名 add 新增字段名 字段类型 默认值… 2:修改字段名 语法:exec sp_rename ‘表名.字段名’,‘修改字段名’,'COLUMN。... -
SQL Server 添加字段 修改字段 删除字段 语句
2021-10-31 10:14:06-- 语法 alter table 表名 add 字段名 字段类型 alter table member add birthday datetime alter table member add fraction float -- 修改字段的属性 -- 语法 alter table 表名 alter column 字段名 字段类型 ... -
MYSQL 查找单个字段或者多个字段重复数据,清除重复数据
2020-08-18 15:26:58单个字段的重复数据查找 与 去重多个字段的重复数据查找 与 去重 正文 示例 accountinfo 表数据如下: 场景一 单个字段重复数据查找 & 去重 我们要把上面这个表中 单个字段 account字段相同的数据... -
Java——静态字段和实例字段的初始化说明(概念理解+应用举例)
2020-05-29 14:02:31我们都知道,在Java语言中,有静态字段和实例字段,但是,它们两者之间的初始化说明还是有区别的!!! 1. 静态字段 static 静态字段 / 静态变量 的初始化过程,由Java虚拟机JVM加载类后,自动进行静态字段初始... -
网络攻防之http host字段
2022-04-07 10:33:23第一章 host字段用途 第二章 host字段小结 第三章 host攻击 第四章 host攻击防护建议 一、host字段用途 http1.0是没有host字段的,http1.1在http1.0的基础之上增加了TCP长连接之外,还增加了更多的请求头和响应头来... -
mysql 在指定的字段后面追加字段
2022-02-21 15:43:57说明:alter table + 表名 + add + 要添加的字段 字段类型 + after + 要跟随的字段名 alter table t_adviser_info add hold int COMMENT '0持有,1未持有' after stockname alter table t_adviser_info add ... -
ORACLE添加字段、删除字段
2020-11-20 09:48:12添加字段4. 删除指定字段5. 修改指定字段长度 1. 删除表 DROP TABLE SYS_JOB; 2. 创建表 -- CREATE TABLE CREATE TABLE SYS_JOB ( JOB_ID NUMBER(30) NOT NULL, JOB_NAME VARCHAR2(30) NOT NULL ); ALTER TABLE ... -
mysql 新增字段时判断字段是否存在
2021-03-15 14:54:02mysql 新增字段时判断字段是否存在,本来是一个很小的问题,因为以前都是使用 postgreSql、sqlserver ,上来就 if not exist ,结果mysql并不吃这一套,看看这段代码:IFNOTEXISTS(SELECT1FROMINFORMATION_... -
http常见字段
2022-03-01 16:37:48Host字段:客户端发送请求时,用来指定服务器域名,有了Host字段,就可以将请求发往同一台服务器上的不同网站 Content-Length 字段:服务器在返回数据时,会有Content-Length字段,表名本次回应的数据长度 ... -
mysql多字段in用法
2022-02-15 12:38:22经常在写sql语句的时候会用到in的用法,以下内容讲解多个字段如何同时使用in,以下内容基于mysql 8.0进行讲解。 -
mysql 修改表名,修改字段类型,增加字段,删除字段,添加字段备注,添加索引
2021-01-21 12:49:542、修改字段类型:alter table 表名 modify column 字段名 字段类型(长度)3、修改字段名称和类型:alter table 表名 change 现有字段名称 修改后字段名称 数据类型4、增加字段:alter table 表名 add 字段名 字段... -
PGSQL新增字段
2022-05-20 16:55:10ALTER TABLE table_name ADD COLUMN column_name boolean DEFAULT FALSE NOT NULL; ALTER TABLE table_name ADD COLUMN column_name varchar(5) DEFAULT '1'::character varying NOT NULL; -
mysql中利用sql语句修改字段名称,字段长度等操作
2021-01-19 00:17:031.修改字段的长度语法:ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型(修改后的长度)例子:将字段的长度由10改为20ALTER TABLE attence MODIFY COLUMN id INT(20)2.修改字段的名称语法:alter table change 。... -
MySQL修改字段类型、字段名字、字段长度、字段小数点长度。
2020-09-03 10:24:18alter table 表名 modify column 字段名 类型。数据库中address表 city字段是varchar(30),修改类型可以用(谨慎修改类型,可能会导致原有数据出错)。 mysql> alter table address modify column city char(30)... -
Jackson忽略字段不序列化字段的3种方法
2020-10-06 11:58:48在上一篇中,我们学习了如何忽略值为null的字段《Jackson忽略null字段的3种方法》。 相对于忽略null字段,在实际应用中,忽略某些字段的序列化可能更为常见。 Jackson对于如何序列化字段、过滤字段的方法多种多样,... -
MongoDB查询指定字段(field)返回指定字段的方法
2021-03-03 17:29:52使用MongoDB的时候需要只查询指定的字段进行返回,也就是类似mysql里面的 SELECT id,name,age 这样而不是SELECT *。在MongoDB里面映射(projection)声明用来限制所有查询匹配文档的返回字段。projection以文档的形式... -
mysql视图添加字段
2021-02-10 03:11:23mysql视图里面怎么新增一个全新字段,在原来表内没首先,要清楚视图的概念: 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集... -
Java 根据字段名称获取字段值, 根据字段名称设置字段值
2021-01-13 10:43:46定义测试对象 public class User { private int age; private String name; private Date birthday; private boolean adult; public int getAge() { return age; } public void setAge(int age) { ... pub -
sql 查询排除一个字段的其他字段
2021-01-20 20:01:28展开全部1、创建测试表,此处以创建6个字62616964757a686964616fe59b9ee7ad9431333433616139段为例,实际100个字段的话,操作类似,create table test_sel_cols(id number, password varchar2(200), remark1 varchar... -
Mysql添加字段、添加字段到指定位置
2021-12-08 13:54:58ALTER TABLE 表名 ADD 字段名 varchar(255) DEFAULT NULL COMMENT '申请详情'; varchar(255) 字段类型 DEFAULT NULL/not null 默认状态 COMMENT '备注内容' 备注 添加到指定位置 添加在第一个 al... -
sql语句修改字段长度
2021-05-03 06:34:22原始发行者:面包屑修改字段属性的SQL语句如果数据量非常大,达到了数百万条记录,请使用企业管理器更改字段类型,但经常会超时,更改不成功,那么可以使用SQL语句来更改,如下所示:a,更改字段类型的长度,可更改表... -
MYSQL添加字段
2021-10-25 10:49:14mysql添加字段的语句: ALTER TABLE tbl_tpl ADD title bigint(20) DEFAULT '' COMMENT '测试' AFTER id; 但是当mysql表中数据量特别大的时候,mysql5.6之前的执行上述操作就会进行锁表,甚至影响服务不可用,... -
oracle将多个不同的字段合并到一个字段中
2022-05-11 11:35:32oracle将多个不同的字段合并到一个字段中 Concat函数: 两个字段合成一个 Concat(Concat(字段1,‘:’),字段2) 三个个字段合成一个 Concat(Concat(Concat(字段1,‘:’),字段2),字段3) 等等以此类推 -
hive 如何判断字段名是否存在,或者字段总数?
2019-10-29 21:10:59hive中如何判断字段名是否存在,或者字段总数为多少? 如果不能回答,下面的问题场景有好的解决方案也可以采纳 问题场景: 目前问题是这样的:公司hive库需要新增一个字段,但是数据部的同事为了保证hive代码... -
Mybatis plus - 映射字段时排除不必要的字段,忽略字段
2019-06-12 23:25:18文章目录Mybatis plus - 映射字段时排除不必要的字段,忽略字段1、声明该字段是 transient 的2、声明该字段是 static 的3、通过注解声明该字段不是一个数据库表里面的字段 Mybatis plus - 映射字段时排除不必要的... -
MySQL字段的长度
2021-02-05 14:50:20MySQL字段有多种的类型,不同的MySQL字段长度也各不一样,下面就为您介绍各种MySQL字段的长度,供您参考学习之用。 数值类型 列类型 需要的存储量 TINYINT 1 字节 SMALLINT 2 字节 MEDIUMINT 3 字节 INT 4 字节 ...