在日常开发中
推荐浮点数和定点数,优先使用定点数
原因:定点数比浮点数精确
定点数关键字 DECIMAL
有关日期与时间类型
推荐使用 4位数字
drop TABLE test_year show TABLES CREATE TABLE if not exists test_year( y1 YEAR, y2 YEAR(4) ); insert into test_year (y1,y2) values (1999,2050) SELECT * FROM test_year -- 不需要指定(数字),默认为4 CREATE TABLE test_year2( y1 year ) insert into test_year2 values (2099) SELECT * FROM test_year2
DATE类型 格式为 YYYY-MM-DD
使用 CURRENT_DATE() 或者 NOW() 函数,会插入当前系统的日期。
INSERT INTO test_date1 VALUES (CURRENT_DATE()), (NOW());
开发时,时间类型选择
推荐使用 DATETIME
此外,一般存注册时间、商品发布时间等,不建议使用DATETIME存储,而是使用 时间戳 ,因为
DATETIME虽然直观,但不便于计算。
DATETIME 插入数据格式 YYYY-MM-DD HH:MM:SS
或者使用函数 CURRENT_TIMESTAMP() 和 NOW() ,可以向DATETIME类型的字段插入系统的当前日期和时间。
文本字符串
CHAR(M) 类型一般需要预先定义字符串长度。如果不指定(M),则表示长度默认是1个字符。
varchar必须指明指定长度,即varchar()括号中必须添加数字,不然会报错。
枚举类型
关键字 ENUM , SET
ENUM 只能插入一个在创建表时,存在的文本内容
SET 可以多个
二进制类型
关键字 BINARY、VARBINARY、BLOB(二进制大对象,可以容纳可变数量的数据。如图片 、 音频 和 视频)
BLOB 可以存图片等,但是在开发时,一般不选择在数据库中存取,通常会将图片、音频和视频文件存储到 服务器的磁盘上 ,并将图片、音频和视频的访问路径存储到MySQL中。
JSON字符串类型
INSERT INTO test_json (js) VALUES ('{"name":"songhk", "age":18, "address":{"province":"beijing", "city":"beijing"}}'); -- 通过“->”和“->>”符号,从JSON字段中正确查询出了指定的JSON数据的值。 SELECT js -> '$.name' AS NAME,js -> '$.age' AS age ,js -> '$.address.province' AS province, js -> '$.address.city' AS city -> FROM test_json;
开发时,每个数据类型选择规范
在定义数据类型时,如果确定是 整数 ,就用 INT ; 如果是 小数 ,一定用定点数类型 DECIMAL(M,D) ; 如果是日期与时间,就用 DATETIME 。
(M,D)分别代表含义,M: 为规定数据长度,D: 为规定数据长度,小数部分所占规定长度的长度
● 任何字段如果为非负数,必须是 UNSIGNED
●【 强制 】小数类型为 DECIMAL,禁止使用 FLOAT 和 DOUBLE。
说明:在存储的时候,FLOAT 和 DOUBLE 都存在精度损失的问题,很可能在比较值的时候,得 到不正确的结果。如果存储的数据范围超过 DECIMAL 的范围,建议将数据拆成整数和小数并 分开存储。
●【 强制 】如果存储的字符串长度几乎相等,使用 CHAR 定长字符串类型。
●【 强制 】VARCHAR 是可变长字符串,不预先分配存储空间,长度不要超过 5000。如果存储长度大 于此值,定义字段类型为 TEXT,独立出来一张表,用主键来对应,避免影响其它字段索引效率。
如何使用unsigned
/* "Unsigned" 是英文中的一个词汇,表示“无符号”的意思。 在MySQL中,`UNSIGNED` 是一个关键字,用于定义无符号整数数据类型。 在MySQL中,`UNSIGNED` 可以翻译为 "无符号" 或 "非负",表示这个数据类型只能存储非负整数, 不包括负数。这个关键字的主要作用是限制某个整数列的取值范围,使其只能存储正整数或零,而不包含负数。 */ --由于unsigned 的意思为无符号的意思,所以在数据库中,用于整数类型 、浮点类型以及定点数类型decimal CREATE TABLE products ( product_id INT UNSIGNED NOT NULL, product_name VARCHAR(50) NOT NULL, price DECIMAL(10, 2) UNSIGNED NOT NULL, stock_quantity INT UNSIGNED NOT NULL );
"Decimal" 是英文中的一个词汇,表示“十进制”的意思。在计算机科学和数据库中,"Decimal" 通常用来指代十进制数值或数据类型。十进制是我们日常生活中最常用的数字系统,它包含数字 0 到 9,使用十个不同的数字来表示数值。在数据库中,"Decimal" 数据类型通常用于存储精确的小数值,以便在计算或金融领域中保持精确度。
"Decimal" 数据类型在数据库中通常指的是定点数(fixed-point numbers)或精确数值,与浮点数(floating-point numbers)不同,浮点数具有固定的小数点位置,通常用于需要精确度的情况,如货币计算。Decimal 数据类型的存储方式不会引入精度误差,因此在财务、税务、科学等领域经常使用。
在数据库系统如MySQL、SQL Server、Oracle等中,"Decimal" 数据类型通常用不同的名称,如 "DECIMAL"、"NUMERIC" 等,用于声明和存储精确小数值。DECIMAL 数据类型通常需要指定两个参数,一个是精度(precision),表示总的有效位数,另一个是标度(scale),表示小数点后的位数。例如,DECIMAL(10, 2) 表示一个精度为 10 位,小数点后有 2 位的 Decimal 数值。