数值类型#
在 SQL 2011 中,
单 BIT 类型
仅存储一位,1/0
整数类型
可以按照字节长度 1、2、4、8 分为不同的子类型。
定点类型
DECIMAL/NUMERIC,按照精度和小数位数决定存储格式。
如 DECIMAL (10,2),意味着,整个数占据 10 进制 10 位,其中小数部分占据 10 进制 2 位,12312122.12
。适合使用金钱相关存储
浮点类型
遵循 IEEE 754 标准的存储方式,而精度部分可选。
默认 8bit 存储整数部分,剩余精度部分存储小数部分。
精度不同,存储大小不同。
当 X<=24 时,存储 4 字节。精度大于 24 时存储 8 字节。最大精度 53 bit。
按照常用类型 有 FLOAT 和 DOUBLE,分别为 4 字节 和 8 字节
FLOAT (24) 等效于 REAL
FLOAT (53) 等效于 DOUBLE
MYSQL | |
---|---|
整数类型 | TINYINT (1B), SMALLINT (2B), MEDIUMINT (3B), INT (4B), INTEGER (4B), BIGINT (8B) |
定点类型 | DECIMAL,NUMERIC |
浮点类型 | FLOAT,DOUBLE 遵守 IEEE754 |
单 BIT | BIT |
POSTGRES | |
整数类型 | SMALLINT(2B), INTEGER(4B), BIGINT(8B), SMALLSERIAL(2B), SERIAL(4B), BIGSERIAL(8B) |
定点类型 | DECIMAL, NUMERIC |
浮点类型 | REAL, DOUBLE PRECISION |
单 BIT |
SQLite 是动态类型的,SQLite 的实际存储类型只有五种,
NULL,INTEGER(0-8B),REAL(8B IEEE754), TEXT, BLOB。
但是可声明为更为具体的类型。
SQLite | |
---|---|
整数类型 | INT, INTEGER, TINYINT, SMALLINT, MEDIUMINT, BIGINT,UNSIGNED BIG INT, INT2, INT8 |
字符类型 | CHARACTER(20), VARCHAR(255), VARYING CHARACTER(255), NCHAR(55), NATIVE CHARACTER(70), NVARCHAR(100), TEXT, CLOB |
浮点类型 | REAL, DOUBLE, DOUBLE PRECISION, FLOAT |
定点类型 | NUMERIC, DECIMAL(10,5), BOOLEAN, DATE, DATETIME |
字符串类型#
CHAR 定长字符串
VARCHAR 变长字符串
TEXT 长字符串
MYSQL 中给出的字符串类型
CHAR
, VARCHAR
, BINARY
, VARBINARY
, BLOB
, TEXT
, ENUM
, and SET
.
POSTGRES 中给出的字符串类型,与标准 SQL 一致
CHAR 定长字符串
VARCHAR 变长字符串
TEXT 长字符串
日期类型#
MYSQL:
DateTime ,Date,Timestamp 存储为 UTC 时区,返回结果时会自动从 UTC 转换为当前时区,默认情况下,每个连接的时区采用服务器指定的时区。也可以为每个连接采用不同的时区。
POSTGRES:
名称 | 存储大小 | 描述 | 精度 | |
---|---|---|---|---|
timestamp [ (p ) ] [ without time zone ] | 8B | 不带时区的日期和时间,也就是标准 UTC | 1ms | |
timestamp [ (p ) ] [ with time zone ] | 8B | 带时区的日期和时间 | 1ms | |
date | 4B | 日期 | 1day | |
time [ (p ) ] [ without time zone ] | 8B | 不带时区的时间(UTC) | 1ms | |
time [ (p ) ] [ with time zone ] | 12B | 带时区的时间 | 1ms | |
interval [ fields ] [ (p ) ] | 16B | 时间间隔 | 1ms |
SQLite 中并未提供用于存储的日期 / 时间类型。
可以直接用 Text,REAL,INTEGER 存储日期和时间,对于声明为 DATE,DATETIME 类型的 Column,会转为 Numeric 存储。
SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values:
- TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM.SSS").
- REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
- INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.
Applications can choose to store dates and times in any of these formats and freely convert between formats using the built-in date and time functions.
标准查询
聚合函数,多行被聚合为单行
窗口函数,多行仍是多行
SELECT salary, sum(salary) OVER (ORDER BY salary) FROM empsalary;
视图
外键
reference
引用完整性
事务
BEGIN;
-- do something
COMMIT;
事务保存点,可以有选择的回滚到事务保存点。
继承机制 ONLY