精华内容
下载资源
问答
  • PostgreSQL修改视图引用的字段
    千次阅读
    2020-01-21 11:20:49

    在pg中,当我们需要修改表的某个字段时,如果该字段刚好被视图引用,必须先将引用的对象删除,才能修改对应的字段。

    例如:

    bill=# create table test_t (id int, info text, crt_time timestamp, c1 varchar(10));  
    CREATE TABLE
    bill=# create index idx_test_t on test_t(c1);  
    CREATE INDEX
    bill=# create view v_test_t as select id,c1 from test_t;
    CREATE VIEW
    bill=# alter table test_t alter column c1 type varchar(32); 
    psql: ERROR:  cannot alter type of a column used by a view or rule
    DETAIL:  rule _RETURN on view v_test_t depends on column "c1"
    

    不过这个情况在oracle中并不存在:

    SQL> create table test_t (id int, info varchar2(100), crt_time timestamp, c1 varchar(10));
    
    Table created.
    
    SQL> create index idx_test_t on test_t(c1);  
    
    Index created.
    
    SQL> create view v_test_t as select id,c1 from test_t;  
    
    View created.
    
    SQL> alter table test_t modify(c1 varchar(32));
    
    Table altered.
    

    那么我们在pg中该如何去修改被视图引用的表的字段呢?
    pg中支持将DDL语句封装在事务中处理,所以从删除依赖,到修改字段,再到重建依赖,都可以封装在一个事务中完成。

    例子:
    不过这种方法需要注意:

    1. DDL是需要对表加排它锁的,排它锁与所有其他锁冲突,因此建议在事务开始时设置锁超时参数,避免问题。
    2. 如果修改字段涉及到rewrite table(例如int改到text),那么表很大时间会很久。如果需要很久,意味着需要长时间持有排它锁(堵塞也是比较严重的)。
    begin;  -- 开始事务  
      
    set local lock_timeout = '1s';  -- 设置锁超时  
      
    drop view v_test_t;  -- 删除依赖视图  
      
    alter table test_t alter column c1 type varchar(32);  -- 修改字段长度  
      
    create view v_test_t as select id,c1 from test_t;  -- 创建视图  
      
    end;  -- 结束事务  
    

    除此之外我们还可以通过修改pg中元数据表的方式去实现。
    因为pg的定义都记录在元数据中,所以某些操作,可以直接修改元数据来实现。比如从numeric低精度修改到高精度,从字符串短长度修改到长长度。
    但是不建议这么做,直接修改元数据存在隐患,甚至可能对数据库造成不可修复的伤害。

    例子:
    1、首先查看将要修改的C1字段的pg_attribute元信息

    bill=# select attrelid::regclass,* from pg_attribute where attname='c1'; 
      attrelid  | attrelid | attname | atttypid | attstattarget | attlen | attnum | attndims | attcacheoff | atttypmod | attbyval | attstorage | attalign | attnotnull | atthasdef | atthasmissing | attiden
    tity | attgenerated | attisdropped | attislocal | attinhcount | attcollation | attacl | attoptions | attfdwoptions | attmissingval 
    ------------+----------+---------+----------+---------------+--------+--------+----------+-------------+-----------+----------+------------+----------+------------+-----------+---------------+--------
    -----+--------------+--------------+------------+-------------+--------------+--------+------------+---------------+---------------
     test_t     |   200125 | c1      |     1043 |            -1 |     -1 |      4 |        0 |          -1 |        36 | f        | x          | i        | f          | f         | f             |        
         |              | f            | t          |           0 |          100 |        |            |               | 
     idx_test_t |   200136 | c1      |     1043 |            -1 |     -1 |      1 |        0 |          -1 |        36 | f        | x          | i        | f          | f         | f             |        
         |              | f            | t          |           0 |          100 |        |            |               | 
     v_test_t   |   200137 | c1      |     1043 |            -1 |     -1 |      2 |        0 |          -1 |        36 | f        | x          | i        | f          | f         | f             |        
         |              | f            | t          |           0 |          100 |        |            |               | 
    (3 rows)
    

    在修改时,需要将这三个atttypmod一起修改掉。
    变长字段的长度为4字节头+实际长度,所以36表示可以存储32个字符。

    2、修改为varchar(64)这样操作

    bill=# update pg_attribute set atttypmod=68 where attname='c1' and attrelid in (200125,200136,200137);  
    UPDATE 3
    

    3、查看更新后的结构

    bill=# \d+ test_t 
                                                  Table "public.test_t"
      Column  |            Type             | Collation | Nullable | Default | Storage  | Stats target | Description 
    ----------+-----------------------------+-----------+----------+---------+----------+--------------+-------------
     id       | integer                     |           |          |         | plain    |              | 
     info     | text                        |           |          |         | extended |              | 
     crt_time | timestamp without time zone |           |          |         | plain    |              | 
     c1       | character varying(64)       |           |          |         | extended |              | 
    Indexes:
        "idx_test_t" btree (c1)
    Access method: heap
    
    bill=# \d+ v_test_t  
                                      View "public.v_test_t"
     Column |         Type          | Collation | Nullable | Default | Storage  | Description 
    --------+-----------------------+-----------+----------+---------+----------+-------------
     id     | integer               |           |          |         | plain    | 
     c1     | character varying(64) |           |          |         | extended | 
    View definition:
     SELECT test_t.id,
        test_t.c1
       FROM test_t;
    
    bill=# \d+ idx_test_t
                              Index "public.idx_test_t"
     Column |         Type          | Key? | Definition | Storage  | Stats target 
    --------+-----------------------+------+------------+----------+--------------
     c1     | character varying(64) | yes  | c1         | extended | 
    btree, for table "public.test_t"
    
    更多相关内容
  • 怎么修改Mysql数据表中视图

    千次阅读 2021-01-21 06:46:38
    本篇文章主要给大家介绍mysql数据表中怎么进行修改视图的操作。关于mysql视图的基础知识,之前的文章也给大家详细介绍过了。这里我们再给大家先简单介绍下mysql视图。通俗的说,视图是由SELECT语句组成的查询...

    本篇文章主要给大家介绍mysql数据表中怎么进行修改视图的操作。

    关于mysql视图的基础知识,在之前的文章中也给大家详细介绍过了。这里我们再给大家先简单介绍下mysql视图。

    通俗的说,视图是由SELECT语句组成的查询定义的虚拟表,也就是由一张或多张表中的数据组成的。

    视图就如同mysql基本表一样,对表能够进行的一般操作都可以应用于视图,比如创建,查询,插入,修改,删除操作等。

    那么关于视图的创建、查询,在这两篇文章也已经给大家介绍过了,需要的朋友可以参考。

    下面我们就结合简单的示例给大家继续介绍mysql视图的修改操作。

    其实视图的修改就相当于SQL语句的修改。

    首先我们可以通过cmd命令行工具连接mysql数据库。

    然后可以先通过图文版的Navicat数据库管理工具,更直观方便的来查看指定数据表my_v1视图的信息。

    8e0400fcd2c3a17f2575b6af9483d55d.png

    如上图中,my_v1视图中包含三个字段id,name,c_id。

    修改视图的语法:alter view +视图名 as + 新的select 语句

    修改视图语法示例如下:alter view my_v1 as select id,name from stu;

    b294b4e1f31ee69c87df648e863b72bd.png

    这里我们通过命令行工具对my_v1这张视图进行了修改,重新从stu表中查询两个字段id,name。

    最后我们再通过Navicat查看my_v1视图是否被修改了数据。

    e4ea7e8e6fca44f024a89973fe3db94d.png

    如图,my_v1视图中已经只能查看到id和name这两个字段了,说明我们已经对视图成功进行修改操作了。

    注意:通常情况下,已创建好的视图,尽量不要再去进行修改,避免数据丢失。

    本篇文章就是关于mysql数据表中视图的修改操作介绍,也是很简单易懂的,希望对需要的朋友有所帮助!

    想要了解更多mysql知识,可以关注PHP中文网mysql视频教程,欢迎大家参考学习!

    展开全文
  • 在数据表视图能进行的操作是修改字段的类型。数据表视图中可以进行字段的编辑、添加、删除,记录的删除和数据查找等操作,但使用“数据表视图建立的结构,只说明了中字段名,却没有说明每个字段的...

    b51a940571e495c911d058635c4b792a.png

    在数据表视图中不能进行的操作是什么?

    在数据表视图中不能进行的操作是修改字段的类型。

    在“数据表”视图中可以进行字段的编辑、添加、删除,记录的删除和数据查找等操作,但使用“数据表”视图建立的表结构,只说明了表中字段名,却没有说明每个字段的数据类型和属性值,也无法修改。

    相关介绍:

    视图是从一个或几个基本表(或视图)中导出的虚拟的表。在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。

    视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。

    视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。

    视图看上去非常像数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些视图可以修改对应的基表,而有些则不能(仅仅能查询)。

    相关推荐:《mysql教程》

    展开全文
  • MySQL数据类型,列选项,视图

    千次阅读 2021-01-18 23:26:58
    列的数据类型整型类型取值范围tinyint-128 - 127smallint-32768 - 32767(几万)mediumint-8388608 - 8388607(几百万)integer-2147484468 - 2147483647(几十亿)bigint-9223372036854775808 - 9223372036854775807(天文...

    列的数据类型

    整型

    类型

    取值范围

    tinyint

    -128 - 127

    smallint

    -32768 - 32767(几万)

    mediumint

    -8388608 - 8388607(几百万)

    integer

    -2147484468 - 2147483647(几十亿)

    bigint

    -9223372036854775808 - 9223372036854775807(天文数字)

    小数类型

    decimal[精度,小数位数]

    小数位数是定数;数值是什么就是什么,不会进行类似于四舍五入,不会存储近似值。

    浮点类型

    float[长度,小数位数]

    double[长度,小数位数]

    float的小数位数不是固定的;超出存储范围,近似值进行存储。

    小结:

    decimal用来存精确值、定数。

    float存储可以四舍五入的。

    位类型

    bit[(长度)]

    场景:

    9ab73d76db98b3ff2bc6680be6692d01.png

    字符串类型

    char 0-255

    varchar 0-65535 (长度指的是字符的长度。最常用varchar)

    long varchar:2^24-1

    longtext:4G个字符

    日期类型

    date 3字节

    datetime 8字节

    time 3字节

    timestamp 4字节

    year[(2) | (4)] 1字节

    二进制大对象类型

    binary: 255个字符

    varbinary :65535个字符

    blob: 65535字符 ,比如存储照片

    long varbinary: 2的24次方减1个字符

    long blob: 2的32次方-1个字符

    数字列上的列选项

    unsigned:无符号的,表示只允许正数。

    zerofill:填充0

    auto_increment:自动增长。只适应于整数类型。一个表中只有一个列可以是自动增长的。

    487df8b62dcc1170df8c1d169cfa4a73.png

    临时表

    临时表是一张表,用来临时保存一些数据。它只对创建它的用户可见。当会话结束时,MySQL自动删除临时表。

    保存这些数据的时候,尽量少的占用资源,删除数据的时候,尽量少的占用资源。

    临时表的核心:建立和删除表以及里面的数据时,消耗资源非常小。

    例:创建临时表sumpenalties,保存所有罚款的总和。

    CREATE TEMPORARY TABLE sumpenalties(

    total DECIMAL(10,2)

    );

    CTAS举例

    if not exit :强制不显示出错消息。

    1fc005ef811de008cafb6cf90f5c961d.png

    根据已有的表创建新表

    结构一样。

    create table copy_teams LIKE teams;(空表,不带数据)

    create table copy_teams_1 AS select * from teams;(带数据)

    --》PS:这个SELECT可以非常非常的复杂

    default

    1230720dbad2dd40069f934ae7c37e38.png

    21316a3c29c8ad9a1616be2a86f308c5.png

    表选项

    例26: 创建表city_names,其主键列从10开始编号。

    CREATE TABLE city_names(

    seqno INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,

    NAME VARCHAR(30) NOT NULL

    ) AUTO_INCREMENT = 10;

    INSERT INTO city_names VALUES(NULL,'北京');

    INSERT INTO city_names VALUES(NULL,'上海');

    INSERT INTO city_names VALUES(NULL,'天津');

    SELECT * FROM city_names;

    cc12a8c69f74cb123dd7cad1384d79ad.png

    可以看到,序号是从10开始的。

    comment:给表添加注释

    CREATE TABLE mycomm(

    column_a INTEGER

    ) COMMENT '测试表';

    约束,非空,主键,唯一键

    约束的类型

    NOT NULL:非空约束,强烈建议使用,这个列上不能有空值。

    UNIQUE:唯一性约束。这个列的值唯一,可以有多个空值。一个表可以有多个unique。

    PRIMARY KEY:主键约束,一个表只有一个,这个列的数值唯一。不能为空。

    FOREIGN KEY:外键约束。

    CHECK:检查约束

    约束定义的时间:

    使用CREATE TABLE语句

    表已经创建完了,使用ALTER TABLE语句

    外键约束

    外键是一个约束

    外键约束什么呢?

    一个表的一个列的数值来自于另外一个表的一个列的数值,成绩表里面的学号这个列里面的所有的数值(学号),来自于学生表里面的学号这个列里面的数值。

    外键引用的一定是另外一个表的主键或者唯一键。

    on delete(update)

    外键约束

    1.从表insert数据,会检查主表,看一下外键列的数据是否来自于主键列。

    2.对主表进行delete时,检查外表,看一下外表中是否引用了主表中要删除的数据。

    只要有引用,主表就受到了限制。

    主表删除数据,子表引用了主表的数据。

    enum枚举、set

    create table t1(id int,name varchar(10),sex enum('男','女')); --》只能取男或者女

    desc t1;

    insert into t1 values(1,'张三','男');

    insert into t1 values(2,'李四','女');

    insert into t1 values(3,'张三','M');

    –》会报错,因为只能是’男’或者’女’!

    8370f1cea79113d4782f98c2d776ab6b.png

    enum和set的异同

    不同:

    set(‘one’,’two’,’three’,’four’); –》可以同时取其中的多个。

    enum(‘男’,’女’)); –》只能取男或者女

    相同点:

    都是对数据库的规范;

    后面都不接数据类型

    check约束

    check(id>100);

    check约束的括号里面可以是巨复杂的表达式。

    alter、drop table的风险

    删除表以前:

    1.确认这个表没有人在使用,确实是一个废除的表。

    2.确认是这个数据库的表,别删错了别的表。

    (建议:status看一下此时的状态!!再删!)

    删除临时表要加temporary:

    19e123f213c939c791d2c87f01cfc535.png

    表的修改操作

    alter修改表的操作

    1.增加一个列

    2.删除一个列

    3.修改一个列的数据类型 varchar-int

    4.修改一个列的数据类型的宽度 varchar(10) varchar(20)

    添加一个新列时,默认是加在最后。

    mysql>alter table t1 add COLUMN b_date date not null after name;

    –》在name列后面添加一个新列b_date

    f681b3edd59b881b56eb8d4ba4f16c5b.png

    删除列的语句

    mysql>alter table t1 drop column b_date;

    --》删除b_date列

    修改列的数据类型

    mysql>alter table t1 modify sex int;

    --》把sex列的数据类型宽度

    修改列的数据类型的宽度

    mysql>alter table t1 modify sex varchar(10);

    --》把sex列的宽度改为varchar(10);

    对表进行约束的添加和删除

    联合主键、几个列合起来形成一个主键。

    风险分析

    1.数据字典级别改一下。速度快。

    2.对100万个数据块进行修改。速度慢。在十分钟的时间里是不能操作的。

    视图

    视图基本定义

    视图是一个逻辑表,它本身并不包含数据。通过它,可以展现基表的部分数据。

    用来创建视图的表叫做基表BASE TABLE。

    视图是作为一个SELECT语句保存在数据字典中的。

    视图语法

    -CREATE [OR REPLACE] VIEW view_name [(column_list)]

    -AS select_statement

    - [WITH [CASCADED | LOCAL] CHECK OPTION]

    -OR REPLACE:如果视图已经存在则替换它

    视图基本功能

    查询接口

    权限控制

    create view v_players as

    select 语句

    视图别名

    create or replace view 视图名(别名,......)

    as select

    字段,......

    from 表名

    通过视图修改表

    此方法不常用。

    例:

    从视图中cplayers中删除联盟会员号码为6524的球员 。

    DELETE FROM cplayers

    WHERE leagueno=‘6524’;

    因为视图本身没有数据,因此对视图进行的dml操作最终都体现在基表中。

    with check option约束

    对于可以执行DML操作的视图,定义时可以带上WITH CHECK OPTION约束。该约束的作用是:对视图所做的DML操作的结果,不能违反视图的WHERE条件的限制 。

    例:创建视图,包含1960年之前出生的所有球员(老兵)。

    CREATE OR REPLACE VIEW veterans

    AS SELECT *

    FROM players

    WHERE birth_date < '1960-01-01'

    WITH CHECK OPTION;

    视图权限

    示例1:以用户newroot执行:

    CREATE USER 'demo'@'%' IDENTIFIED BY 'demo';

    创建视图,视图的定义者是demo

    CREATE OR REPLACE

    DEFINER='demo'@'%'

    SQL SECURITY DEFINER

    VIEW cplayers

    AS SELECT playerno,leagueno

    FROM players

    WHERE leagueno IS NOT NULL;

    把视图的select权限授给demo :

    GRANT SELECT ON tennis.cplayers TO 'demo'@'%' ;

    例:以用户newroot执行:

    CREATE OR REPLACE

    SQL SECURITY DEFINER

    VIEW cplayers

    AS SELECT playerno,leagueno

    FROM players

    WHERE leagueno IS NOT NULL;

    展开全文
  • 怎么更新Mysql数据表视图中数据

    千次阅读 2021-02-03 07:16:30
    相关mysql视频教程推荐:《mysql教程》mysql数据表视图的定义及相关操作,如查询、修改、删除、添加等操作介绍,我们近期发布的文章,已经给大家详细讲解过了,这里就一一为大家介绍了。需要了解的新手朋友们...
  • 其步骤就是:利用update操作触发器产生的2个虚拟【inserted】用来存储修改数据信息和【deleted】,然后将对应的数据更新到对应数据表中字段信息; 1.首先创建3个: a.信息: USE [SQL-LI] BEGIN ...
  • 数据表视图修改数据表

    千次阅读 2021-03-16 10:50:58
    MySQL,ALTER 语句用来修改数据表名称或者数据表字段名称。也可以用来添加或者删除数据表字段。ALTER 语句经常和"ADD", "DROP" and "MODIFY" 命令一起使用。1) 添加列通用语句:ALTERTABLEtable_nameADDnew_...
  • 需要获得一个视图中字段名称、字段类型、字段长度等信息,该如何编写sql语句。通过select*fromuser_views可以获得给定用户下所有的视图名称了,但是没找到如何获取视图结构的解决方法,求路过的大神解惑。已经解决...
  • 关系数据库,数据库通常包含多个数据表,数据库数据信息都是存储在数据表当中的。数据表是对数据进行存储和操作的一种逻辑结构,对于用户而言,一个数据表表示一个数据库对象。 3.1 创建数据表—CREATE ...
  • mysql视图添加字段

    千次阅读 2021-02-10 03:11:23
    但是,视图不在数据库以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的。怎样布局视图中添加字段ALTER 视图名称 AS SELECT ... 添加的字段 FROM ... WHERE ... 说白了也就是相当于...
  • 数据表的定义3. 临时4. 分区5. 视图5.1 普通视图5.2 物化视图 1. 数据库 语法: create database if not exists db_name engine = engine_name on cluster cluster_name drop database if exists db_name on ...
  • 一个视图是从一个特定的角度来查看数据库数据 。...从数据库系统内部来看,视图是由一张或多张表数据组成的,从数据库系统外部来看,视图就如同一张 一样,对表能够进行的一般操作都可以应用于视图
  • MySQL怎么修改字段类型?

    千次阅读 2021-01-31 01:31:10
    在MySQL可以通过alter table语句来修改一个字段数据类型。下面本篇文章就来带大家了解一下alter table...1、添加字段(列)alter table 表名 add 字段数据类型示例:在表 "Persons" 添加一个名为 "Birt...
  • Sql Server 视图数据的增删改查教程

    千次阅读 2021-02-02 12:08:00
    因此数据库只存在视图的定义,而存在视图中相对应的数据数据仍然存放原来的基本表中视图是一种逻辑对象。二、 视图能做什么导出数据导出数据时,常常需要多个联合查询,这个时候就可以使用视图;...
  • SAP MM 物料主数据采购视图中字段'Var. OUn'的作用?   物料主数据采购视图里有一个字段,叫做'Var. OUn'的, 如下图:     这个字段,笔者之前所参与的项目里,从来没有用过。所以,笔者对它也没有去...
  • 怎么向Mysql视图中增加新数据

    千次阅读 2021-01-26 22:47:43
    从前面文章的介绍,大家应该都知道了视图就是由SELECT语句组成的查询定义的虚拟,是由一张或多张表数据组成的,从数据库系统外部来看,视图就如同一张数据表一样,对表能够进行的一般操作都可以应用于视图,...
  • SQLServer改变字段类型(视图

    千次阅读 2019-11-18 11:45:34
    更改视图字段类型 ...仅查询结果改变,使用cast 更改表格字段类型 改变表格字段类型: alter table [table_catalog].[table_schema].[table_name] alter column [column_name] varchar(10) --将...
  • 第3章 视图的创建修改

    千次阅读 2019-07-31 10:54:49
    关系数据库,数据库通常包含多个数据表,数据库数据信息都是存储在数据表当中的。数据表是对数据进行存储和操作的一种逻辑结构,对于用户而言,一个数据表表示一个数据库对象。 3.1 创建数据表—CREATE ...
  • sql server 数据库表中增加列,增加字段,插入列,插入字段,修改列,修改字段,
  • sql server如何修改视图中数据

    千次阅读 2019-03-12 15:26:00
    sql server如何修改视图中数据? 我做个测试,视图数据有标记字段时,如果是这种方式(0 as FlagState),是无法修改的 --创建视图语句 --- create view V_EdsProd_1 as select a.Uid ProdId, a.Code ...
  • vue之table初始化后修改单条数据视图不更新的问题总结 问题场景: 当ajax请求请求到后台数据后,我们仍然有需求修改该数据某条数据,而使用如下星号包围代码的方法实时更新了视图。 vue: data(){ list...
  • sqlsever 刷新(更新)数据库的所有的视图,用于添加字段,但是视图还是没有字段
  • 模板: UPDATE t2 SET t2.C_date = (select EventTime from t1 where t1.id = t2.id) where exists (select 1 from t1 where t1.id = t2.id) 实际使用: UPDATE hc_fee_order_item it SET it.fee_charge = ...
  • 创建并添加字段

    千次阅读 2021-08-03 01:15:10
    创建 Access 数据库时,将数据存储在表(基于主题的列表,其中包含行和列)。 例如,可创建“联系人”表来存储一系列姓名、地址和电话号码,或创建“产品”表存储有关产品的信息。 本文介绍如何创建表、如何向表...
  • 新的数据库创建一个和视图结构相同的 采用ezdw,反向导入视图,但是数据结构和新创建的描述不同,生成会报错,手动修改字符类型的数据库字段 配置streamSets 源数据控件 ry视图 简单清洗 是否...
  • Oracle数据库 修改视图影响

    千次阅读 2019-05-19 16:56:47
    1、视图是实际的虚拟或子集,当修改实体表数据时,视图数据会被修改,这个我想大家都能想明白。 2、那么视图表数据修改了,实际数据会不会被修改呢?实测代码如下: –修改表数据,查看视图表数据是否变化?...
  • 由于 JavaScript 的限制,Vue 能检测对象属性的添加或删除: var vm = new Vue({ data: { ...使用 vm.$set 实例方法 一个数组的对象增加一个children数组 this.$set(this.data[i], 'childr...
  • 我简单地测试了下,对视图的更改,基表里的数据也会随之更改。希望哪位大牛能帮我解释下。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 168,705
精华内容 67,482
关键字:

在数据表视图中不可以修改字段的