MySQL 是否支持自定义数据类型?例如,邮政编码可能存储在一个varchar(10)
字段中,但它们可以被压缩到一个int
,带有空白选项和一个关于它是 5 位还是 5+4 位邮政编码的标志。
有没有办法为这些东西安装无缝数据类型?就应用程序而言,它将是一个字符串类型,如果应用程序传递了无效数据,则只会发生数据截断(有或没有警告)。
可以使用自定义函数(例如,有一个INET_ATON
用于 IPv4 地址的内置函数。但这不允许zip LIKE '12345%'
应该正确索引的事情。对自定义数据类型的良好编写支持将允许标记数据类型作为可排序的。所以紧凑型zip int
在排序时,会像排序一样排序zip varchar(10)
。
这将允许列具有固定宽度,它将允许 6 或 10 字节的变量存储减少到 4 字节的固定宽度。
有几种适用的用途
2038
存储使用量少于datetime
,但不需要支持实施年份之前的日期(如果这些是系统中最早的日期,则最小值可能是 2007 年)ENUM
s 可以被分成一个自定义的数据类型,这样DESCRIBE
's 的输出在所有的包装中看起来都不会那么凌乱。我希望数据类型处理程序的存储方式类似于函数的存储方式。
在任何数据库引擎上都有这样的远程吗?我主要使用 MySQL,但我很好奇是否曾经实现过,没有让应用程序调用类似函数的INET_ATON
函数。
MS SQL 似乎确实具有这种性质,但我想知道它是否不仅仅是同义词。(例如boolean
可能是一个同义词tinyint(1)
,或postal_code
为一个char
或varchar
(5
或9
或10) …
我正在解决 MySQL 错误“尝试获取锁定时发现死锁;尝试重新启动事务”。
我将不得不更新程序以允许死锁。该SELECT
语句是否可能会产生死锁错误?我知道它只是一个读锁,所以多重选择不会有问题,但是如果有一个INSERT
, UPDATE
orDELETE
语句(可能有连接的子查询)和一个SELECT
语句(可能有连接或子查询)怎么办?
是否有可能在SELECT
而不是INSERT
,UPDATE
或上抛出错误DELETE
。
具体来说,我想知道是否应该将所有固定长度字段(如 int、timestamp、char)放在 CREATE TABLE 的开头,并将所有可变长度varchar
放在末尾。
另外,我想知道TEXT
字段是否有不同的处理方式。
请帮助我理解这个声明:
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 不会在内部处理这个问题似乎很奇怪:“尝试获取锁时发现死锁;尝试重新启动事务”
Oracle DB 是否可以解决此问题?毕竟,Oracle 拥有 InnoDB。
看来ibdata1就像一个磁盘切片。在 Solaris (UNIX) UFS 文件系统(ZFS 之前的常见文件系统)中,人们会将其磁盘 c0t0d0 分成多个片,例如将 10GB 驱动器切成三个部分,4GB、1GB 和 5GB。这些将是固定大小的文件系统。例如,操作系统的 4GB。1GB 用于交换,5GB 用于软件和数据。
swap 可以存储在文件系统上的文件中,但为了性能,它通常存储在磁盘的自己部分。
ibdata1 可以链接到它自己的切片以提高性能吗?当然,在决定理想的固定大小之前必须仔细考虑,他们还必须知道如何检查使用水平。
符号链接可以放置在.../mysql/data/ibdata1
到/dev/rdsk/c0t0d0s3
。然后 MySQL 会将其视为文件,但可能会执行得更好,因为它不必通过文件系统层,它会直接写入磁盘的指定部分。