小编700*_*are的帖子

是否有自定义数据类型之类的东西?

MySQL 是否支持自定义数据类型?例如,邮政编码可能存储在一个varchar(10)字段中,但它们可以被压缩到一个int,带有空白选项和一个关于它是 5 位还是 5+4 位邮政编码的标志。

有没有办法为这些东西安装无缝数据类型?就应用程序而言,它将是一个字符串类型,如果应用程序传递了无效数据,则只会发生数据截断(有或没有警告)。

可以使用自定义函数(例如,有一个INET_ATON用于 IPv4 地址的内置函数。但这不允许zip LIKE '12345%'应该正确索引的事情。对自定义数据类型的良好编写支持将允许标记数据类型作为可排序的。所以紧凑型zip int在排序时,会像排序一样排序zip varchar(10)

这将允许列具有固定宽度,它将允许 6 或 10 字节的变量存储减少到 4 字节的固定宽度。

有几种适用的用途

  • 邮政编码
  • IPv6 地址
  • 具有分钟级精度和容量的自定义时间戳字段,2038存储使用量少于datetime,但不需要支持实施年份之前的日期(如果这些是系统中最早的日期,则最小值可能是 2007 年)
  • 实现 DST 的时间戳(似乎不存在
  • 两个字母的美国州可以存储在一个字节中
  • long ENUMs 可以被分成一个自定义的数据类型,这样DESCRIBE's 的输出在所有的包装中看起来都不会那么凌乱。

我希望数据类型处理程序的存储方式类似于函数的存储方式。

在任何数据库引擎上都有这样的远程吗?我主要使用 MySQL,但我很好奇是否曾经实现过,没有让应用程序调用类似函数的INET_ATON函数。

MS SQL 似乎确实具有这种性质,但我想知道它是否不仅仅是同义词。(例如boolean可能是一个同义词tinyint(1),或postal_code为一个charvarchar (5910) …

mysql datatypes type-conversion

15
推荐指数
1
解决办法
2万
查看次数

InnoDB 死锁是 INSERT/UPDATE/DELETE 独有的吗?

我正在解决 MySQL 错误“尝试获取锁定时发现死锁;尝试重新启动事务”

我将不得不更新程序以允许死锁。该SELECT语句是否可能会产生死锁错误?我知道它只是一个读锁,所以多重选择不会有问题,但是如果有一个INSERT, UPDATEorDELETE语句(可能有连接的子查询)和一个SELECT语句(可能有连接或子查询)怎么办?

是否有可能在SELECT而不是INSERT,UPDATE或上抛出错误DELETE

如果你好奇,故事就在这里。

mysql innodb deadlock

8
推荐指数
1
解决办法
7343
查看次数

MySQL:表中字段的顺序对性能有影响吗?

具体来说,我想知道是否应该将所有固定长度字段(如 int、timestamp、char)放在 CREATE TABLE 的开头,并将所有可变长度varchar放在末尾。

另外,我想知道TEXT字段是否有不同的处理方式。

performance

7
推荐指数
1
解决办法
1478
查看次数

MySQL 中的数据库是 Oracle 中的模式:我不明白这个说法

请帮助我理解这个声明:

MySQL 中的数据库是 Oracle 中的模式。

我刚刚开始使用 Oracle,我发现它与我使用过的其他 RDBMS 软件(如 MSSQL、MySQL 和 Derby)不同。

例如创建一个数据库,当我使用时create database ghazals,它会抛出一个错误:

ERROR at line 1:
ORA-01501: CREATE DATABASE failed 
ORA-01100: database already mounted
Run Code Online (Sandbox Code Playgroud)

此外,像show databases这样的命令在这里不起作用。

mysql rdbms oracle

6
推荐指数
2
解决办法
6512
查看次数

Oracle DB 是否不受 MySQL 中发现的 InnoDB 死锁的影响?

对我来说,MySQL 不会在内部处理这个问题似乎很奇怪:“尝试获取锁时发现死锁;尝试重新启动事务”

Oracle DB 是否可以解决此问题?毕竟,Oracle 拥有 InnoDB。

mysql innodb oracle deadlock

5
推荐指数
3
解决办法
1186
查看次数

MySQL InnoDB 数据文件直接位于磁盘片上(固定大小)?

看来ibdata1就像一个磁盘切片。在 Solaris (UNIX) UFS 文件系统(ZFS 之前的常见文件系统)中,人们会将其磁盘 c0t0d0 分成多个片,例如将 10GB 驱动器切成三个部分,4GB、1GB 和 5GB。这些将是固定大小的文件系统。例如,操作系统的 4GB。1GB 用于交换,5GB 用于软件和数据。

swap 可以存储在文件系统上的文件中,但为了性能,它通常存储在磁盘的自己部分。

ibdata1 可以链接到它自己的切片以提高性能吗?当然,在决定理想的固定大小之前必须仔细考虑,他们还必须知道如何检查使用水平。

符号链接可以放置在.../mysql/data/ibdata1/dev/rdsk/c0t0d0s3。然后 MySQL 会将其视为文件,但可能会执行得更好,因为它不必通过文件系统层,它会直接写入磁盘的指定部分。

  • 有没有人试过这个?
  • 有没有人认为这是一个坏主意?(请记住,这个想法仅适用于 InnoDB-only 数据库服务器。不是多用途服务器。)
  • 它会起作用吗(innodb 是否需要检查文件长度?如果没有,它应该起作用。)
  • 可以检查使用情况吗?

mysql innodb disk-structures

3
推荐指数
1
解决办法
1780
查看次数