精华内容
下载资源
问答
  • mysql行格式
    千次阅读
    2013-08-09 12:47:47

    最近用phpmyadmin,突然发现有个参数ROW_FORMAT,以下是手册中的解答部分,看了之后水平又提升了,做个记录。另外看了这部分之后发现原来mysql存储变长数据的方法和文件系统原来一样啊,都是数据和索引分离,然后一堆碎片和链接,哈哈。

    红色标出的部分比较重要,很少有人会去关注,提醒大家看下。

     

    15.1.3. MyISAM表的存储格式

    15.1.3.1. 静态(固定长度)表特征

    15.1.3.2. 动态表特征

    15.1.3.3. 已压缩表特征

    MyISAM支持三种不同存储格式。其中两个(固定格式和动态格式)根据正使用的列的类型来自动选择。第三个,即已压缩格式,只能使用myisampack工具来创建。

    当你CREATE或ALTER一个没有BLOB或TEXT列的表,你可以用ROW_FORMAT表选项强制表的格式为FIXED或DYNAMIC。这会导致CHAR和VARCHAR列因FIXED格式变成CHAR,或因DYNAMIC格式变成VARCHAR。

    通过用ALTER TABLE指定ROW_FORMAT={COMPRESSED | DEFAULT},你可以压缩或解压缩表,请参阅13.1.5节,“CREATE TABLE语法”

    15.1.3.1. 静态(固定长度)表特征

    静态格式是MyISAM表的默认存储格式。当表不包含变量长度列(VARCHAR, BLOB, 或TEXT)时,使用这个格式。每一行用固定字节数存储。

    MyISAM的三种存储格式中,静态格式就最简单也是最安全的(至少对于崩溃而言)。静态格式也是最快的on-disk格式。快速来自于数据文件中的行在磁盘上被找到的容易方式:当按照索引中的行号查找一个行时,用行长度乘以行号。同样,当扫描一个表的时候,很容易用每个磁盘读操作读一定数量的记录。

    当MySQL服务器正往一个固定格式MyISAM文件写的时候,如果计算机崩溃了,安全是显然的。在这种情况下,myisamchk可以容易地决定每行从哪里开始到哪里结束,所以它通常可以收回所有记录,除了写了一部分的记录。注意,基于数据行,MyISAM表索引可以一直被重新构建。

    静态格式表的一般特征:

    ·         CHAR列对列宽度是空间填补的。

    ·         非常快。

    ·         容易缓存。

    ·         崩溃后容易重建,因为记录位于固定位置。

    ·         重新组织是不必要的,除非你删除巨量的记录并且希望为操作系统腾出磁盘空间。为此,可使用OPTIMIZE TABLE或者myisamchk -r。

    ·         通常比动态格式表需要更多的磁盘空间。

    15.1.3.2. 动态表特征

    如果一个MyISAM表包含任何可变长度列(VARCHAR, BLOB或TEXTDynamic),或者如果一个表被用ROW_FORMAT=DYNAMIC选项来创建,动态存储格式被使用。

    这个格式更为复杂一点,因为每行有一个表明行有多长的头。当一个记录因为更新的结果被变得更长,该记录也可以在超过一个位置处结束。

    你可以使用OPTIMIZE TABLE或myisamchk来对一个表整理碎片。如果在一个表中有你频繁访问或改变的固定长度列,表中也有一些可变长度列,仅为避免碎片而把这些可变长度列移到其它表可能是一个好主意。

    动态格式表的一般特征:

    ·         除了长度少于4的列外,所有的字符串列是动态的。

    ·         在每个记录前面是一个位图,该位图表明哪一列包含空字符串(对于字符串列)或者0(对于数字列)。注意,这并不包括包含NULL值的列。如果一个字符列在拖曳空间移除后长度为零,或者一个数字列为零值,这都在位图中标注了且列不被保存到磁盘。 非空字符串被存为一个长度字节加字符串的内容。

    ·         通常比固定长度表需要更少的磁盘空间。

    ·         每个记录仅使用必需大小的空间。尽管如此,如果一个记录变大,它就按需要被分开成多片,造成记录碎片的后果。比如,你用扩展行长度的信息更新一行,该行就变得有碎片。在这种情况下,你可以时不时运行OPTIMIZE TABLE或myisamchk -r来改善性能。可使用myisamchk -ei来获取表的统计数据。

    ·         动态格式表在崩溃后要比静态格式表更难重建,因为一个记录可能被分为多个碎片且链接(碎片)可能被丢失。

    ·         动态尺寸记录期望的行长度用下列表达式来计算:

    ·                3

    ·                + (number of columns + 7) / 8

    ·                + (number of char columns)

    ·                + (packed size of numeric columns)

    ·                + (length of strings)

    ·                + (number of NULL columns + 7) / 8

    对每个链接需要额外的6字节。在一个更新导致一个记录的扩大之时,一个动态记录被链接了。每个新链接至少是20字节,所以下一个扩大可能在同样的链接里进行。如果不是,则另一个链接将被建立。你可以使用myisamchk -ed来找出链接的数目。所有的链接可以用myisamchk -r来移除。

    15.1.3.3. 已压缩表特征

    已压缩存储格式是由myisampack工具创建的只读格式。

    所有MySQL分发版里都默认包括myisampack。已压缩表可以用myisamchk来解压缩。

    已压缩表有下列特征:

    ·         已压缩表占据非常小的磁盘空间。这最小化了磁盘用量,当使用缓慢的磁盘(如CD-ROM)之时,这是很有用的。

    ·         每个记录是被单独压缩的,所以只有非常小的访问开支。依据表中最大的记录,一个记录的头在每个表中占据1到3个字节。每个列被不同地压缩。通常每个列有一个不同的Huffman树。一些压缩类型如下:

    o        后缀空间压缩。

    -        前缀空间压缩。

    -        零值的数用一个位来存储。

    -        如果在一个整型列中的值有一个小的范围,列被用最小可能的类型来存储。比如,一个BIGINT列(8字节),如果所有它的值在-128到127范围内,它可以被存储为TINYINT列(1字节)

    -        如果一个列仅有一小组可能的值,列的类型被转化成ENUM。

    -        一个列可以使用先前压缩类型的任意合并。

    ·         可以处理固定长度或动态长度记录。

    更多相关内容
  • MySQL 行格式(Row Format)

    千次阅读 2020-10-10 14:38:17
    MySQL版本5.7默认使用DYNAMIC行格式。 InnoDB行格式概述 行格式 紧凑的存储 特性 增强的可变长度色谱柱存储 大索引键前缀支持 压缩支持 支持的表空间类型 所需文件格式 REDUNDANT No ...

    行格式简介

    表的行格式决定了其行的物理存储方式,进而会影响查询和DML操作的性能。

    InnoDB存储引擎支持四种行格式:REDUNDANT、 COMPACT、DYNAMICCOMPRESSED。

    MySQL版本5.7默认使用DYNAMIC行格式。

    InnoDB行格式概述
    行格式紧凑的存储
    特性
    增强的可变长度色谱柱存储大索引键前缀支持压缩支持支持的表空间类型所需文件格式
    REDUNDANTNoNoNoNosystem, file-per-table, generalAntelope or Barracuda
    COMPACTYesNoNoNosystem, file-per-table, generalAntelope or Barracuda
    DYNAMICYesYesYesNosystem, file-per-table, generalBarracuda
    COMPRESSEDYesYesYesYesfile-per-table, generalBarracuda

    DYNAMIC行格式介绍

    DYNAMIC行格式由变长字段列表  +  NULL值列表  + 记录头信息  + 列值组成。

    1.变长字段长度列表

    比如VARCHAR(M)类型的列称为变长字段,其真实数据存在列值,而占用的字节长度(十六进制表示)逆序存在变长字段长度列表。

    2.NULL值列表

    将每个允许存储NULL的列对应一个二进制位,二进制位按照列的顺序逆序排列,如果列值NULL则记录1到NULL值列表。不为NULL则记录0。

    3.记录头信息

    它是由固定的5个字节组成。5个字节也就是40个二进制位。

    记录头信息
    名称大小(B)描述
    预留位2未使用
    delete_mask1标记该记录是否被删除
    min_rec_mask1B+树的每层非叶子节点中的最小记录都会添加该标记
    n_owned4表示当前记录拥有的记录数
    heap_no13表示当前记录在记录堆的位置信息
    record_type3表示当前记录的类型。
    0普通记录,1:B+树非叶子节点记录,2:最小记录,3最大记录
    next_record16表示下一条记录的相对位置

     4.列值

    列值分为隐藏列和真实数据列。

    隐藏列为ROW_ID(行ID)、TRX_ID(事务ID)、ROLL_PTR(回滚指针)。

    真实数据列为用户表中的值。

     

    其他行格式和DYNAMIC差不多,只是对行溢出处理方式不同,DYNAMIC行溢出是把所有的字节都存储到其他页面中,只在记录的真实数据处存储其他页面的地址,COMPACT是记录的真实数据处存储字符串的前768个字节,COMPRESSED会采用压缩算法对页面进行压缩,以节省空间。

     

    那么对于一个表

    学生成绩表
    idnamescore
    1穗乃果12
    260
    3海未 

    真实存储形式是这样的

    学生成绩表
    变长字段列表NULL值列表记录头信息行ID事务ID回滚指针idnamescore
    2 30忽略 1021穗乃果12
    2 10忽略 3256260
    22忽略 33803海未 

    实际值都是十六进制表示,这里只是为了方便阅读。行ID(row_id)当表中没有唯一主键索引和非空的唯一索引才会存在。

    展开全文
  • MySQL——行格式介绍

    千次阅读 2020-04-19 18:39:31
    行格式介绍: 报错: db01 [pavthistory]>create table alert_record1 ( id bigint(25) not null, belong_device varchar(255) default null, update_time datetime not null, serial bigint(25) default null, ...

    一、行格式介绍及特点

    1、行格式的应用都是针对于表的,只有在创建表的时候才能使用row_format,在创建库的时候无法指定行格式。

    2、表的行格式也是决定了这张表下面的物理存储方式,会影响查询和DML操作的性能。

    3、常见的表格式有以下4种:
    (1)REDUNDANT
    (2)COMPACT
    (3)DYNAMIC
    (4)COMPRESSED
    各种表格式的特点及缺点:
    在这里插入图片描述
    4、随着更多的行适合单个的磁盘页面,查询和索引查找可以更快的工作,因为更多的行在同一个页面上,所需要写或者读的IO会需要的更少,所以能更大程度的提升性能。

    5、每个表的数据一般的话会被分成几个页,每个表里面的页都会组成相应的B树索引,根据索引去排列数据的顺序。

    6、可变长度的列值,因为其变长的特性,可能会无法容纳在B树页面上,而是会单独分配到磁盘页面上,这些磁盘页面的话称为溢出页面。这些列的话是称为页外列。这些列的话会存储在溢出页面的单链表中,然而这样的列如果过多的话,是会有一个或者多个这种溢出页面的列表。

    7、根据列的长度,所有的列值或可变长度的列值的前缀都会存储在B树中,用来避免浪费存储空间而去读取单独的页面。这样的话会降低磁盘使用率,还增加了IO的负载。

    8、一般的变长字段列类型有:varchar、varbinary、blob、text类型

    二、4种行格式的介绍

    1、REDUNDANT行格式(冗余行格式)

    (1)redundant行格式的表会把前768字节的变长列值存在在B树节点的索引记录中,多余的一些字节会被存在在溢出页。而大于这个768字节的固定长度列会被编码为可变长度列,可以放在页面外进行存储。
    (2)例1:char(10)当char的字符集最大长度为3,其实是可以超过30个字节,与utf8mb4字符集相同。
    (3)如果列值小于768字节,则不会使用溢出页,该列的值会全部存在在B树节点中,这样也可以节省IO去页溢出页
    (4)对于一些列类型为blob的较短值比较友好,但是如果B树节点存储了数据,而没有存储键值的话,效率也会变低。

    REDUNDANT行格式的特点

    1、该行格式索引记录标头为6字节,标头会将连续的数据存在在一起,用于行锁定。

    2、聚集索引会把所有用户定义的列字段记录进去,会有一个6字节的txid字段和一个7字节的roll pointer field。

    3、如果没定义主键,聚集索引会包含一个6字节的行ID字段。

    4、每个二级索引中包含的是聚集索引定义的主键值,而并非每一行的数据。

    5、每条记录都会有一个指向这条记录每个字段的指针。字段总长小于128字节,指针为1字节,否则指针为2字节。

    6、定长字段列char(10)以定长格式存储,后面的空格不会从varchar字段中截断。

    7、大于768的固定长度会被编码为可变长度列,可以存储在页面外。在例1中提到了

    8、一条SQL中,NULL值在这行的数据页中会保留一个或者两个字节。NULL如果存储在可变长度列中,在数据部分则是0字节。如果在固定长度列,该列的固定长度会保留在数据部分,因为万一有数据插入进来,这个保留的NULL值空间可以从原来的NULL值位置更新为非NULL值,这样的话就不会造成索引页碎片。

    2、COMPACT行格式

    1、与REDUNDANT相比,COMPACT的行格式将存储空间减少了20%,如果有调整缓存命中率和磁盘速度的限制,那COMPACT会更快。
    但是也会增加一些CPU的使用率,如果是在有大量运算的一些环境下,这种格式可能会比REDUNDANT较慢一些。

    2、使用这种格式的页,前768字节的变长列值存储在B树索引记录中,其余的一些字段被存储在溢出页上,大于或等于768字节的固定长度也会被编码为可变长度列,可以存储在页面外。参考例1

    3、列值小于或等于768字节,不使用溢出页,这样的话就完全存储在B树索引中,节省IO。参考REDUNDANT行格式第5条。

    COMPACT行格式的特点

    1、该行格式索引记录标头为5字节,这个标头的前面可以有一个可变长度的标头,按列的顺序逆序放置。标头也是用来链接记录,用于行锁定。

    2、提到的可变长度的标头实际是用来存储NULL列的,索引中可为NULL的列为Y的话,这个可变长度的标头长度就为Y字节。

    3、标头的可变长度部分还包含可变长度列的长度。每个长度占用一个或两个字节,具体取决于列的最大长度。如果列中都是固定长度,,记录头的话就没有可变长度的部分。

    4、记录头后面跟的是非NULL的列值。

    5、聚集索引还是包含6字节的TXID和7字段的roll pointer field。

    6、如果表中没有主键,还会有一个6字节的ROWID

    7、如果主键列是可变长度,即使二级索引定义了固定长度列,每个二级索引记录头在他们的记录长度中都会有一个可变长度部分。

    8、引用REDUNDANT第6条

    9、对于可变长度字符集utf8mb3和utf8mb4,如果数据的字节长度超过了列类型的字节长度,列的类型为char(n)列的最大长度将变成“最大字节长度*N”。

    3、DYNAMIC行格式(动态行格式)

    这种行格式有和COMPACT行格式相同的行存储方式,只是在其基础上增加了long variable-length columns 和large index key prefixes。
    特点:
    1、长可变列(long variable-length)
    2、更大的索引键前缀的存储能力(maximum byte length)
    3、支持索引键前缀3072字节

    4、COMPRESSED行格式(压缩行格式)

    该行格式与DYNAMIC行格式有相同的存储特性和功能,在这个基础上还添加了对表和索引数据压缩的支持。
    1、如果要使用该行格式的话需要启用innodb_file_per_table。

    三、故障处理

    因为传统的两种行格式是支持utf8的3字节最大长度,所以在255的情况下,varchar超出了最大列的长度,超过了755字节,所以报错了,需要设置成dynamic行格式或者compressed格式。
    报错:

    db01 [pavthistory]>create table alert_record1 ( id bigint(25) not null, belong_device varchar(255) default null,  update_time datetime not null, serial bigint(25) default null, event_name varchar(255) default null, detail varchar(255) default null, primary key (`id`,`update_time`)using btree, key `alert_device_time` (`belong_device`,`update_time`)using btree ) engine=innodb charset=utf8mb4 row_format=compact;
    ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes.
    

    解决办法:

    create table alert_record1 (.....) engine=innodb charset=utf8mb4 row_format=dynamic;
    Query OK, 0 rows affected (0.01 sec)
    

    改变相应行格式即可解决!
    部分内容借鉴官方文档!
    提供官方链接感兴趣的小伙伴也可以去官方文档查看相关内容。

    展开全文
  • Mysql 存储的文件格式

    千次阅读 2019-04-16 15:10:00
    一、Mysql行存储的文件格式概述 InnoDB存储引擎有两种文件格式 Antelope:compact与redundant两种行记录格式 Barracuda:compress与dynamic两种行记录格式 查看表的行记录格式: show table status like '%sys_...

    一、Mysql行存储的文件格式概述

    InnoDB存储引擎有两种文件格式

    Antelope:compact与redundant两种行记录格式

    Barracuda:compress与dynamic两种行记录格式

    查看表的行记录格式:

    show table status like '%sys_appinfo%'\G;

    查看数据库默认的行记录格式:

    show variables like '%row_format%';

    文件格式查看方式:

    show variables like 'innodb_file%';('innodb_file)

    二、四种行记录格式的不同

    MySQL5.7默认使用Barracuda文件格式与dynamic行记录格式。

    compact是目前使用最多的一种,而dynamic时新版本默认的行记录格式。

    在生产中,我们应该选择哪种行记录格式?

    这要说明行溢出:行溢出简单来讲就是需要存储的数据在当前页面之外,拆分到多个页进行存储。

    针对大数据类型text或者blob存储在其字段中的数据,dynamic实际采用的数据都存放在溢出的

    页中(off-page),而数据页只存储前20个字节指针。在compact行格式下,溢出的列只存放768个

    前缀字节。dynamic这种行格式模式,针对溢出列所在的新页利用率更高。所以,目前生产环境

    中建议尽量使用dynamic这种行格式模式,针对溢出列所在的新页利用率更高。

    redundant是最早的行记录格式,相比compact要消耗更多的存储空间,不建议使用。

    compressed是压缩格式,是对数据和索引进行压缩。但只是针对物理存储层面上的压缩,而在

    内存中是不压缩的。当数据调用到内存中就涉及到转换,会很消耗CPU资源,而且效率很低。

    压缩比不高,大概直接进1/2的比例。压缩带来负面影响大,数据库TPS会下降,影响现有的线上业务,

    不建议使用。

     

    转载于:https://www.cnblogs.com/xibuhaohao/p/10717256.html

    展开全文
  • Mysql记录被删除,页中记录存储结构如何变化?当删除的记录再次被插入,页中记录存储结构如何变化?本篇讲解记录头信息的底层原理和计算,让你从原理理解它!
  • MySQL 5.7的 行格式

    千次阅读 2016-11-28 14:32:25
    MySQL InnoDB支持四种行格式: Compact: fixed:固定格式,当表不包含变长字段时使用,如varchar,blob,text。因为该行是固定的,所以存取速度相对来说比较快,但是比较占存储空间. compress: ...
  • InnoDB记录格式 MySQL中存储有3种: 1)server层格式:与存储引擎无关,Binlog存储常用的一种 2) 索引元组格式:InnoDB存取过程记录的中间状态,是InnoDB在内存中存储的格式 3 物理存储格式:记录在物理页面中...
  • 你可以像下面这样看一下你的MySQL行格式设置。 其实MySQL的数据行有两种格式,一种就是图中的 Compact格式,还有一种是Redundant格式。 Compact是一种紧凑的行格式,设计的初衷就是为了让一个数据页中可以存放更多...
  • MySQL数据库—InnoDB存储格式

    千次阅读 2019-12-01 21:30:59
    目录一、InnoDB支持的存储格式二、Compact记录格式1、变长字段长度列表(1)对varchar类型字段长度的存储(2)对char类型字段长度的存储2、NULL标志位3、记录头信息4、RowID5、Transaction ID和Roll Point6、列数据7、...
  • MySql格式化输出

    千次阅读 2021-01-18 18:13:17
    MySQL的客户端命令行工具,有很多方便使用者的特性,某些方面甚至可以说比Oracle的sqlplus更加人性化。当然从整体来说,还是sqlplus更加方便些,这么说或许是我对sqlplus更加熟悉吧。这里记录下MySQL命令行几个比较...
  • MySQL中行格式之Compact记录格式

    万次阅读 2017-05-17 09:10:20
    目前的MySQL,行格式都必然是Compact,本质就是一个页中存放的行数据越多,其性能就越高,那么,怎么查看表中对应的是什么的行格式,可以使用以下SQL来查询
  • 需求将表记录格式row_format改为DYNAMIC 简单记录一下比较笨的方法 首先通过SQL查询出数据库row_format的格式 SELECT table_schema, table_name, row_format FROM information_schema.TABLES WHERE table_...
  • mysql数据存储格式

    千次阅读 2020-12-22 15:51:11
    mysql数据存储格式---避免行溢出 InnoDB是将数据存在磁盘上的存储引擎。 查询需要将磁盘数据读到内存来处理,修改...如:CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称; row_format有四种格式:Compact、.
  • 该联号标包括了联号以及省,市,分行(支行)描述,还有部分电话号码和地址,格式mysql数据,直接可以用到程序上
  • MySQL终端显示格式

    万次阅读 2017-09-19 11:53:41
    默认的mysql cli客户端非常方面,但是有时候表字段太多就会显示交错,看起来很费劲。 测试环境 macos 10 mysql 5.6 + mysql 自带客户端 mysql 命令 来看一个例子mysql> select *from radacct limit 2; +----------...
  • MySQL长度的一些限制

    千次阅读 2021-01-25 11:46:28
    两者区别在于: 文件格式 Antelope(Innodb-base) 支持行格式 ROW_FORMAT=COMPACT ROW_FORMAT=REDUNDANT 特性 Compact和redumdant的区别在就是在于首部的存存内容区别。 compact的存储格式为首部为一个非NULL的变长...
  • mysql数据库删除一数据

    千次阅读 2021-01-19 10:09:55
    [MySQL]命令行工具和基本操作原文:[MySQL]命令行工具和基本操作一 MySQL命令行工具...当交互使用时,查询结果采用ASCII表格式。当采用非交互式(例如,用...文章杰克.陈2014-02-24608浏览量mysql 数据导入导出数据的m...
  • MySQL 表列数和大小有哪些限制?

    千次阅读 2021-04-20 16:39:42
    MySQL对每个表有4096列的硬限制,但是对于给定的表,有效最大值可能会更少。确切的列限制取决于几个因素: 表的最大大小限制了列的数量(可能还有大小),因为所有列的总长度不能超过该大小 个列的存储要求限制...
  • 数据库存储格式

    千次阅读 2021-01-28 02:52:59
    调研的几种数据库的行格式,代码没看,查的文档,可能具体实现并不一致。 几种格式的优缺点,还有待分析。 在oceanbase0.5中,实现的格式太简单,在一些场景下性能差,或是不太方便。 在oceanbase1.0中,现在我打算...
  • mysql怎么修改数据表里一数据?

    千次阅读 2021-01-18 19:10:59
    mysql中修改数据表里一数据的方法:使用UPDATE语句,语法格式“UPDATE SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ] [ORDER BY 子句] [LIMIT 子句]”。在 MySQL 中,可以使用 UPDATE 语句来修改、更新一个或...
  • MySQL binlog日志格式 binlog_format

    千次阅读 2019-01-27 22:42:09
    MySQL binlog日志格式 binlog_format MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement。总结一下这三种格式日志的优缺点。 MySQL Replication 复制可以是...
  • Mysql格式化输出

    千次阅读 2017-03-18 10:03:21
    Mysql格式化输出
  • MYSQL行与列限制

    千次阅读 2019-10-08 17:55:32
    1、列数量限制 从mysql官网可知每个数据表限制列数量为4096,官网也说了一般比这个更小,取决于以下几个因素: 最大大小会影响表的列数,因为总的列长度不...mysql内部机制允许每一个表有一个最大的大小为6553...
  • linux修改mysql编码格式

    千次阅读 2019-02-12 02:41:05
    部署环境:Ubuntu16.04 腾讯云           ...Mysql 5.7.25 ...文章目录修改Mysql编码格式为UTF81. 查看当
  • 转列 业务场景,按照上图看的话很难只看同学们的数学成绩或者语文成绩,所以要按照以下格式展示: s_name 数学 语文 英语 张三 90 85 92 李四 88 91 99 李四 100 82 88 思路: 第一步可以将每一根据学科s_sub分成...
  • MySQL 服务器上负责对表中数据的读取和写入工作的部分是存储引擎,比如 InnoDB、MyISAM、Memory 等等,不同的存储引擎一般是由不同的人为实现不同的特性而开发的,目前OLTP业务的表如果是使用 MySQL 一般都会使用 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 259,476
精华内容 103,790
关键字:

mysql行格式

mysql 订阅