Doris数据表

这篇具有很好参考价值的文章主要介绍了Doris数据表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第 3 章 数据表设计
3.1字段类型

TINYINT 1 字节 范围:-2^7 + 1 ~ 2^7 - 1
SMALLINT 2 字节 范围:-2^15 + 1 ~ 2^15 - 1
INT 4 字节 范围:-2^31 + 1 ~ 2^31 - 1
BIGINT 8 字节 范围:-2^63 + 1 ~ 2^63 - 1
LARGEINT 16 字节 范围:-2^127 + 1 ~ 2^127 - 1
FLOAT 4 字节 支持科学计数法
DOUBLE 12 字节 支持科学计数法
DECIMAL[(precision, scale)] 16 字节 保证精度的小数类型。默认是DECIMAL(10, 0) ,precision: 1 ~ 27 ,scale: 0 ~ 9,其中整数部分为 1 ~ 18,不支持科学计数法
DATE 3 字节 范围:0000-01-01 ~ 9999-12-31
DATETIME 8 字节 范围:0000-01-01 00:00:00 ~ 9999-12-31 23:59:59
CHAR[(length)] 定长字符串。长度范围:1 ~ 255。默认为 1
VARCHAR[(length)] 变长字符串。长度范围:1 ~ 65533
BOOLEAN 与 TINYINT 一样,0 代表 false,1 代表 true
HLL
1~16385 个字节 hll 列类型,不需要指定长度和默认值,长度根据数据的聚合程度系统内控制,并且 HLL 列只能通过 配套的hll_union_agg、Hll_cardinality、hll_hash 进行查询或使用
BITMAP bitmap 列类型,不需要指定长度和默认值。表示整型的集合,元素最大支持到 2^64 - 1
STRING
变长字符串,0.15 版本支持,最大支持 2147483643 字节(2GB-4),长度还受 be 配置string_type_soft_limit, 实际能存储的最大长度取两者最小值。只能用在 value 列,不能用在 key列和分区、分桶列

3.2 表的基本概念
3.2.1 Row & Column
一张表包括行(Row)和列(Column);
Row 即用户的一行数据。Column 用于描述一行数据中不同的字段。
doris中的列分为两类:key列和value列
key列在doris中有两种作用:
聚合表模型中,key是聚合和排序的依据
其他表模型中,key是排序依据
3.2.2 分区与分桶
• partition(分区):是在逻辑上将一张表按行(横向)划分
• tablet(又叫bucket,分桶):在物理上对一个分区再按行(横向)划分

3.2.2.1 Partition
• Partition 列可以指定一列或多列,在聚合模型中,分区列必须为 KEY 列。
• 不论分区列是什么类型,在写分区值时,都需要加双引号。
• 分区数量理论上没有上限。
• 当不使用 Partition 建表时,系统会自动生成一个和表名同名的,全值范围的 Partition。该 Partition 对用户不可见,并且不可删改。
• 创建分区时不可添加范围重叠的分区。
1)Range 分区

range分区创建语法
SQL
-- Range Partition
drop table if exists test.expamle_range_tbl;
CREATE TABLE IF NOT EXISTS test.expamle_range_tbl
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `date` DATE NOT NULL COMMENT "数据灌入日期时间",
    `timestamp` DATETIME NOT NULL COMMENT "数据灌入的时间戳",
    `city` VARCHAR(20) COMMENT "用户所在城市",
    `age` SMALLINT COMMENT "用户年龄",
    `sex` TINYINT COMMENT "用户性别"
)
ENGINE=OLAP
DUPLICATE KEY(`user_id`, `date`) -- 表模型
-- 分区的语法
PARTITION BY RANGE(`date`) -- 指定分区类型和分区列
(
    -- 指定分区名称,分区的上界   前闭后开
    PARTITION `p201701` VALUES LESS THAN ("2017-02-01"), 
    PARTITION `p201702` VALUES LESS THAN ("2017-03-01"),
    PARTITION `p201703` VALUES LESS THAN ("2017-04-01")
)
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1;

• 分区列通常为时间列,以方便的管理新旧数据。
• Partition 支持通过 VALUES LESS THAN (…) 仅指定上界,系统会将前一个分区的上界作为该分区的下界,生成一个左闭右开的区间。同时,也支持通过 VALUES […) 指定上下界,生成一个左闭右开的区间。
• 通过 VALUES […) 同时指定上下界比较容易理解。这里举例说明,当使用 VALUES LESS THAN (…) 语句进行分区的增删操作时,分区范围的变化情况:
如上 expamle_range_tbl 得建表语句中可以看到,当建表完成后,会自动生成如下3个分区:

SQL
-- 查看表中分区得情况
SHOW PARTITIONS FROM test.expamle_range_tbl \G;

mysql> SHOW PARTITIONS FROM test.expamle_range_tbl \G;
*************************** 1. row ***************************
             PartitionId: 12020
           PartitionName: p201701
          VisibleVersion: 1
      VisibleVersionTime: 2022-08-30 21:57:36
                   State: NORMAL
            PartitionKey: date
                   Range: [types: [DATE]; keys: [0000-01-01]; ..types: [DATE]; keys: [2017-02-01]; )
         DistributionKey: user_id
                 Buckets: 1
          ReplicationNum: 3
           StorageMedium: HDD
            CooldownTime: 9999-12-31 23:59:59
LastConsistencyCheckTime: NULL
                DataSize: 0.000 
              IsInMemory: false
       ReplicaAllocation: tag.location.default: 3
*************************** 2. row ***************************
             PartitionId: 12021
           PartitionName: p201702
          VisibleVersion: 1
      VisibleVersionTime: 2022-08-30 21:57:36
                   State: NORMAL
            PartitionKey: date
                   Range: [types: [DATE]; keys: [2017-02-01]; ..types: [DATE]; keys: [2017-03-01]; )
         DistributionKey: user_id
                 Buckets: 1
          ReplicationNum: 3
           StorageMedium: HDD
            CooldownTime: 9999-12-31 23:59:59
LastConsistencyCheckTime: NULL
                DataSize: 0.000 
              IsInMemory: false
       ReplicaAllocation: tag.location.default: 3
*************************** 3. row ***************************
             PartitionId: 12022
           PartitionName: p201703
          VisibleVersion: 1
      VisibleVersionTime: 2022-08-30 21:57:35
                   State: NORMAL
            PartitionKey: date
                   Range: [types: [DATE]; keys: [2017-03-01]; ..types: [DATE]; keys: [2017-04-01]; )
         DistributionKey: user_id
                 Buckets: 1
          ReplicationNum: 3
           StorageMedium: HDD
            CooldownTime: 9999-12-31 23:59:59
LastConsistencyCheckTime: NULL
                DataSize: 0.000 
              IsInMemory: false
       ReplicaAllocation: tag.location.default: 3
3 rows in set (0.00 sec)

这是他生成得三个分区:

SQL
p201701: [MIN_VALUE,  2017-02-01)
p201702: [2017-02-01, 2017-03-01)
p201703: [2017-03-01, 2017-04-01)

当我们增加一个分区 p201705 VALUES LESS THAN (“2017-06-01”),分区结果如下:


```sql
ALTER TABLE test.expamle_range_tbl ADD PARTITION p201705 VALUES LESS THAN ("2017-06-01");
p201701: [MIN_VALUE,  2017-02-01)
p201702: [2017-02-01, 2017-03-01)
p201703: [2017-03-01, 2017-04-01)
p201705: [2017-04-01, 2017-06-01)

此时我们删除分区 p201703,则分区结果如下:

```sql
ALTER TABLE test.expamle_range_tbl DROP PARTITION p201703;
p201701: [MIN_VALUE,  2017-02-01)
p201702: [2017-02-01, 2017-03-01)
p201705: [2017-04-01, 2017-06-01)

注意到 p201702 和 p201705 的分区范围并没有发生变化,而这两个分区之间,出现了一个空洞:[2017-03-01, 2017-04-01)。即如果导入的数据范围在这个空洞范围内,是无法导入的。
继续删除分区 p201702,分区结果如下:
SQL
p201701: [MIN_VALUE, 2017-02-01)
p201705: [2017-04-01, 2017-06-01)

空洞范围变为:[2017-02-01, 2017-04-01)
现在增加一个分区 p201702new VALUES LESS THAN (“2017-03-01”),分区结果如下:
SQL
p201701: [MIN_VALUE, 2017-02-01)
p201702new: [2017-02-01, 2017-03-01)
p201705: [2017-04-01, 2017-06-01)

可以看到空洞范围缩小为:[2017-03-01, 2017-04-01)
现在删除分区 p201701,并添加分区 p201612 VALUES LESS THAN (“2017-01-01”),分区结果如下:
SQL
p201612: [MIN_VALUE, 2017-01-01)
p201702new: [2017-02-01, 2017-03-01)
p201705: [2017-04-01, 2017-06-01)

即出现了一个新的空洞:[2017-01-01, 2017-02-01)

综上,分区的删除不会改变已存在分区的范围。删除分区可能出现空洞。通过 VALUES LESS THAN 语句增加分区时,分区的下界紧接上一个分区的上界。
Range分区除了上述我们看到的单列分区,也支持多列分区,示例如下:
SQL
PARTITION BY RANGE(date, id) 前闭后开
(
PARTITION p201701_1000 VALUES LESS THAN (“2017-02-01”, “1000”),
PARTITION p201702_2000 VALUES LESS THAN (“2017-03-01”, “2000”),
PARTITION p201703_all VALUES LESS THAN (“2017-04-01”)-- 默认采用id类型的最小值
)
在以上示例中,我们指定 date(DATE 类型) 和 id(INT 类型) 作为分区列。以上示例最终得到的分区如下:
SQL

  • p201701_1000: [(MIN_VALUE, MIN_VALUE), (“2017-02-01”, “1000”) )
  • p201702_2000: [(“2017-02-01”, “1000”), (“2017-03-01”, “2000”) )
  • p201703_all: [(“2017-03-01”, “2000”), (“2017-04-01”, MIN_VALUE))

注意,最后一个分区用户缺失,只指定了 date 列的分区值,所以 id 列的分区值会默认填充 MIN_VALUE。当用户插入数据时,分区列值会按照顺序依次比较,最终得到对应的分区。举例如下:

2)List 分区
• 分区列支持 BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, DATE, DATETIME, CHAR, VARCHAR 数据类型,分区值为枚举值。只有当数据为目标分区枚举值其中之一时,才可以命中分区。
• Partition 支持通过 VALUES IN (…) 来指定每个分区包含的枚举值。
• 下面通过示例说明,进行分区的增删操作时,分区的变化。

List分区创建语法
-- List Partition

CREATE TABLE IF NOT EXISTS test.expamle_list_tbl
(
    `user_id` LARGEINT NOT NULL COMMENT "用户id",
    `date` DATE NOT NULL COMMENT "数据灌入日期时间",
    `timestamp` DATETIME NOT NULL COMMENT "数据灌入的时间戳",
    `city` VARCHAR(20) NOT NULL COMMENT "用户所在城市",
    `age` SMALLINT NOT NULL COMMENT "用户年龄",
    `sex` TINYINT NOT NULL COMMENT "用户性别",
    `last_visit_date` DATETIME REPLACE DEFAULT "1970-01-01 00:00:00" COMMENT "用户最后一次访问时间",
    `cost` BIGINT SUM DEFAULT "0" COMMENT "用户总消费",
    `max_dwell_time` INT MAX DEFAULT "0" COMMENT "用户最大停留时间",
    `min_dwell_time` INT MIN DEFAULT "99999" COMMENT "用户最小停留时间"
)
ENGINE=olap
AGGREGATE KEY(`user_id`, `date`, `timestamp`, `city`, `age`, `sex`)
PARTITION BY LIST(`city`)
(
    PARTITION `p_cn` VALUES IN ("Beijing", "Shanghai", "Hong Kong"),
    PARTITION `p_usa` VALUES IN ("New York", "San Francisco"),
    PARTITION `p_jp` VALUES IN ("Tokyo")
)
-- 指定分桶的语法
DISTRIBUTED BY HASH(`user_id`) BUCKETS 1
PROPERTIES
(
    "replication_num" = "3"
);

如上 example_list_tbl 示例,当建表完成后,会自动生成如下3个分区:
SAS
p_cn: (“Beijing”, “Shanghai”, “Hong Kong”)
p_usa: (“New York”, “San Francisco”)
p_jp: (“Tokyo”)
当我们增加一个分区 p_uk VALUES IN (“London”),分区结果如下:
SAS
p_cn: (“Beijing”, “Shanghai”, “Hong Kong”)
p_usa: (“New York”, “San Francisco”)
p_jp: (“Tokyo”)
p_uk: (“London”)
当我们删除分区 p_jp,分区结果如下:
SAS
p_cn: (“Beijing”, “Shanghai”, “Hong Kong”)
p_usa: (“New York”, “San Francisco”)
p_uk: (“London”)
List分区也支持多列分区,示例如下
SQL
PARTITION BY LIST(id, city)
(
PARTITION p1_city VALUES IN ((“1”, “Beijing”,), (“2”, “Shanghai”)),
PARTITION p2_city VALUES IN ((“2”, “Beijing”), (“1”, “Shanghai”)),
PARTITION p3_city VALUES IN ((“3”, “Beijing”), (“4”, “Shanghai”))

)
在以上示例中,我们指定 id(INT 类型) 和 city(VARCHAR 类型) 作为分区列。以上示例最终得到的分区如下:
SQL

  • p1_city: [(“1”, “Beijing”), (“1”, “Shanghai”)]
  • p2_city: [(“2”, “Beijing”), (“2”, “Shanghai”)]
  • p3_city: [(“3”, “Beijing”), (“3”, “Shanghai”)]
    当用户插入数据时,分区列值会按照顺序依次比较,最终得到对应的分区。举例如下:
    SQL
  • 数据 —> 分区
  • 1, Beijing —> p1_city
  • 1, Shanghai —> p1_city
  • 2, Shanghai —> p2_city
  • 3, Beijing —> p3_city
  • 1, Tianjin —> 无法导入
  • 4, Beijing —> 无法导入
    3.2.2.2 Bucket
    • 如果使用了 Partition,则 DISTRIBUTED … 语句描述的是数据在各个分区内的划分规则。如果不使用 Partition,则描述的是对整个表的数据的划分规则。
    • 分桶列可以是多列,但必须为 Key 列。分桶列可以和 Partition 列相同或不同。
    • 分桶列的选择,是在 查询吞吐 和 查询并发 之间的一种权衡:
    a. 如果选择多个分桶列,则数据分布更均匀。如果一个查询条件不包含所有分桶列的等值条件,那么该查询会触发所有分桶同时扫描,这样查询的吞吐会增加,单个查询的延迟随之降低。这个方式适合大吞吐低并发的查询场景。
    b. 如果仅选择一个或少数分桶列,则对应的点查询可以仅触发一个分桶扫描。此时,当多个点查询并发时,这些查询有较大的概率分别触发不同的分桶扫描,各个查询之间的IO影响较小(尤其当不同桶分布在不同磁盘上时),所以这种方式适合高并发的点查询场景。
    • 分桶的数量理论上没有上限

关于 Partition 和 Bucket的数量和数据量的建议。

  1. 一个表的 Tablet 总数量等于 (Partition num * Bucket num)。
  2. 一个表的 Tablet 数量,在不考虑扩容的情况下,推荐略多于整个集群的磁盘数量。
  3. 单个 Tablet 的数据量理论上没有上下界,但建议在 1G - 10G 的范围内。如果单个 Tablet 数据量过小,则数据的聚合效果不佳,且元数据管理压力大。如果数据量过大,则不利于副本的迁移、补齐,且会增加 Schema Change 或者 Rollup 操作失败重试的代价(这些操作失败重试的粒度是 Tablet)。分桶应该控制桶内数据量 ,不易过大或者过小
  4. 当 Tablet 的数据量原则和数量原则冲突时,建议优先考虑数据量原则。
  5. 在建表时,每个分区的 Bucket 数量统一指定。但是在动态增加分区时(ADD PARTITION),可以单独指定新分区的 Bucket 数量。可以利用这个功能方便的应对数据缩小或膨胀。
  6. 一个 Partition 的 Bucket 数量一旦指定,不可更改。所以在确定 Bucket 数量时,需要预先考虑集群扩容的情况。比如当前只有 3 台 host,每台 host 有 1 块盘。如果 Bucket 的数量只设置为 3 或更小,那么后期即使再增加机器,也不能提高并发度。
    小例子:
    假设在有10台BE,每台BE一块磁盘的情况下。 ==> 总共有多少个磁盘数量 按照数量原则 10 15
    如果一个表总大小为 500MB,则可以考虑4-8个分片。
    5GB:8-16个分片。
    50GB:32个分片。 10
    500GB:建议分区,每个分区大小在 50GB 左右,每个分区16-32个分片。
    5TB:建议分区,每个分区大小在 500GB 左右,每个分区16-32个分片。
    注:表的数据量可以通过 SHOW DATA命令查看,结果除以副本数,即表的数据量。
    进阶:复合分区与单分区的选择
    复合分区
    • 第一级称为 Partition,即分区。用户可以指定某一维度列作为分区列(当前只支持整型和时间类型的列),并指定每个分区的取值范围。
    • 第二级称为 Distribution,即分桶。用户可以指定一个或多个维度列以及桶数对数据进行 HASH 分布。
    以下场景推荐使用复合分区
    • 有时间维度或类似带有有序值的维度,可以以这类维度列作为分区列。分区粒度可以根据导入频次、分区数据量等进行评估。地域、时间
    • 历史数据删除需求:如有删除历史数据的需求(比如仅保留最近N 天的数据)。使用复合分区,可以通过删除历史分区来达到目的。也可以通过在指定分区内发送 DELETE 语句进行数据删除。
    • 改善数据倾斜问题:每个分区可以单独指定分桶数量。如按天分区,当每天的数据量差异很大时,可以通过指定分区的分桶数,合理划分不同分区的数据,分桶列建议选择区分度大的列。
    用户也可以不使用复合分区,即使用单分区。则数据只做 HASH 分布。
    小练习:建表指定分区和分桶数
    SQL
    需求:现在有如下数据需要插入到表中,请创建一个表,要求按照月份分区,2个分桶
    – 数据
    uid name age gender province birthday
    1 zss 18 male jiangsu 2022-11-01
    2 lss 18 male zhejiang 2022-11-10
    3 ww 18 male jiangsu 2022-12-01
    4 zll 18 female zhejiang 2022-09-11
    5 tqq 18 female jiangsu 2022-09-02
    6 aa 18 female jiangsu 2022-10-11
    7 bb 18 male zhejiang 2022-11-08

CREATE TABLE IF NOT EXISTS test.user_info
(
uid int,
name varchar(50),
age int,
gender varchar(20),
province varchar(100),
birthday date
)
ENGINE=olap
duplicate KEY(uid,name)
–分区逻辑

–分桶逻辑

3.2.3 PROPERTIES
在建表语句的最后,可以用 PROPERTIES 关键字来设置一些表的属性参数(参数有很多)
SQL
PROPERTIES(
“参数名” = “参数值”
)
下文挑选了3个比较重要的参数进行示例;
3.2.3.1 分片副本数
• replication_num
每个 Tablet 的副本数量。默认为 3,建议保持默认即可。在建表语句中,所有 Partition中的 Tablet 副本数量统一指定。而在增加新分区时,可以单独指定新分区中 Tablet 的副本数量。
副本数量可以在运行时修改。强烈建议保持奇数。
最大副本数量取决于集群中独立 IP 的数量(注意不是 BE 数量)。Doris 中副本分布的原则是,不允许同一个 Tablet 的副本分布在同一台物理机上,而识别物理机即通过 IP。所以,即使在同一台物理机上部署了 3 个或更多 BE 实例,如果这些 BE 的 IP 相同,则依然只能设置副本数为 1。对于一些小,并且更新不频繁的维度表,可以考虑设置更多的副本数。这样在 Join 查询时,可以有更大的概率进行本地数据 Join。
3.2.3.2 存储介质 和 热数据冷却时间
• storage_medium
• storage_cooldown_time datetime
建表时,可以统一指定所有 Partition 初始存储的介质及热数据的冷却时间,如:
SQL
“storage_medium” = “SSD”
“storage_cooldown_time” = “2023-04-20 00:00:00” 要在当前时间之后,并且是一个datetime类型
默认初始存储介质可通过 fe 的配置文件 fe.conf 中指定 default_storage_medium=xxx,如果没有指定,则默认为 HDD。如果指定为 SSD,则数据初始存放在 SSD 上。没设storage_cooldown_time,则默认 30 天后,数据会从 SSD 自动迁移到 HDD上。如果指定了 storage_cooldown_time,则在到达 storage_cooldown_time 时间后,数据才会迁移。
注意,当指定 storage_medium 时,如果 FE 参数 enable_strict_storage_medium_check 为False 该参数只是一个“尽力而为”的设置。即使集群内没有设置 SSD 存储介质,也不会报错,而是自动存储在可用的数据目录中。 同样,如果 SSD 介质不可访问、空间不足,都可能导致数据初始直接存储在其他可用介质上。而数据到期迁移到 HDD 时,如果 HDD 介质不 可 访 问 、 空 间 不 足 , 也 可 能 迁 移 失 败 ( 但 是 会 不 断 尝 试 ) 。 如 果 FE 参 数enable_strict_storage_medium_check 为 True 则当集群内没有设置 SSD 存储介质时,会报错Failed to find enough host in all backends with storage medium is SSD。
小练习:建表时加上属性
需求:创建一个表,并为该表添加如下属性
• 指定分区中的副本个数为2
• 指定数据初始存储位置是ssd
• 指定冷却时间到2022-12-20 00:00:00
SQL
CREATE TABLE IF NOT EXISTS test.user_info
(
uid LARGEINT ,
name varchar(50),
age SMALLINT,
gender VARCHAR(20),
province varchar(50),
birthday date
)
ENGINE=OLAP
duplicate KEY(uid,name)
PARTITION BY RANGE(birthday)
(
PARTITION p202209 VALUES LESS THAN (“2022-10-01”),
PARTITION p202210 VALUES LESS THAN (“2022-11-01”),
PARTITION p202211 VALUES LESS THAN (“2022-12-01”),
PARTITION p202212 VALUES LESS THAN (“2023-01-01”)
)
DISTRIBUTED BY HASH(uid) BUCKETS 2
PROPERTIES
(
“replication_num” = “2”,
“storage_medium” = “SSD”,
“storage_cooldown_time” = “2022-11-30 00:00:00” – 时间要大于当前时间
)文章来源地址https://www.toymoban.com/news/detail-468740.html

到了这里,关于Doris数据表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Doris(一)-简介、架构、编译、安装和数据表的基本使用

    Doris是由百度大数据研发,是一个现代化的MPP(Massively Parallel Processing)大规模并行处理的分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。 Apache Doris 的分布式架构非常简洁,易于运维,并且可以支持 10PB 以上的超大数据集。 Apache Dori

    2023年04月17日
    浏览(57)
  • MySQL数据库——MySQL数据表添加字段(三种方式)

    MySQL 数据表是由行和列构成的,通常把表的“列”称为字段(Field),把表的“行”称为记录(Record)。随着业务的变化,可能需要在已有的表中添加新的字段。 MySQL 允许在开头、中间和结尾处添加字段。 一个完整的字段包括字段名、数据类型和约束条件。MySQL 添加字段的语

    2024年02月08日
    浏览(69)
  • 【MySQL】MySQL 数据类型,数值、日期和时间、字符串类型,创建数据表,删除数据表

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL 支持多种类型,大致可以分为三类:数值、日

    2024年02月15日
    浏览(52)
  • SQL Server创建数据表,新增字段的SQL语句

    1、创建数据库 语法:CREATE DATABASE 数据库名称 2、创建数据表  语法: USE suntest   create table 仓库   (   仓库编号 int ,    仓库号 varchar(50) ,    城市 varchar(50) ,    面积 int   )   create table 仓库1   (   仓库编号 int not null ,    仓库号 varchar(50) not null,    城市 varchar(50) not null

    2024年02月10日
    浏览(48)
  • Python Flask Web开发三:数据表的字段增加和删除

    在实际的开发中,数据表中的字段的增加和删除是很正常的操作,在运营的不断提需求下,这个修改的频率是很高的,那么在flask中如何进行字段的增加和删除呢?下面我来给大家讲讲 使用数据库迁移工具(如 Flask-Migrate等)创建一个新的迁移脚本。这个脚本将包含对数据库

    2024年02月09日
    浏览(33)
  • php开发实战分析(1):mysql操作字段(添加、删除、修改,多数据表中新增多个字段)

    要删除MySQL数据库中的字段,您需要执行以下步骤: 连接到MySQL数据库。您可以使用MySQL的PHP扩展或PDO(PHP数据对象)来实现连接。 使用MySQL扩展连接示例: 使用PDO连接示例: 构造SQL语句删除字段。使用 ALTER TABLE 语句来删除字段。在语句中使用 DROP COLUMN 指定要删除的

    2024年02月16日
    浏览(34)
  • SQL SERVER 中将数据表中的字段按分隔符分成多行多列

     SQL SERVER 中将数据表中的字段按分隔符分成多行多列_sql按逗号拆分列为多行_帅气的苹果果的博客-CSDN博客      

    2024年02月07日
    浏览(47)
  • 从"他急匆匆地跑来了“来谈一下数据表字段命名

    表名、字段名、类名、方法名、属性名、变量名、文件名、配置项...,关于命名,命名规范其中之一是见名知意。在理解需求时,试着抓重点、看本质,据此来命名。切不能强行缩减或随意缩减。许多时候,较长的名称,也比随意简拼的名称易读。如果需要对名称缩减,开发

    2024年02月03日
    浏览(36)
  • MySQL的约束类型、数据库操作、数据表操作大全(简述)

    目录 一.数据库的操作语法 二.MySQL数据库约束 三.数据类型 四.数据表操作 作者简介:  tq02,一个想成为编程高手的梦中人 作者主页:  tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 学习专栏:  🎥  MySQL基础          🎥  JavaSE                🎥   C语言 本

    2024年02月12日
    浏览(61)
  • PHP分析二维数据表(长度|数字字段|空值|纯姓名|英文用户名|科学计数|是否等长|是否唯一)

    先看图,后有完整代码    仅供娱乐!

    2024年02月22日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包