字段类型注意事项
MySQL 的整型类型所占用的存储空间及取值范围:
类型 | 所占空间 | 范围(signed) | 范围(unsigned) |
---|---|---|---|
tinyint | 1 | -128~127 | 0~255 |
smallint | 2 | -32768~32767 | 0~65535 |
mediumint | 3 | -8388608~8388607 | 0~16777215 |
int | 4 | -2147483648~2147483647 | 0~4294967295 |
bigint | 8 | -9223372036854775808~-9223372036854775807 | 0~18446744073709551615 |
BIGINT UNSIGNED value is out of range in...
)SET sql_mode='NO_UNSIGNED_SUBTRACTION';
ALTER TABLE ... CONVERT TO CHARSET ...
才能将已经存在的列的字符集进行修改。
排序规则(Collation)是比较和排序字符串的一种规则,每个字符集都会有默认的排序规则,可以使用命令 SHOW CHARSET 来查看:
mysql> SHOW CHARSET LIKE 'utf8%';
+---------+---------------+--------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+---------------+--------------------+--------+
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_0900_ai_ci | 4 |
+---------+---------------+--------------------+--------+
mysql> SHOW COLLATION LIKE 'utf8mb4%';
+----------------------------+---------+-----+---------+----------+---------+---------------+
| Collation | Charset | Id | Default | Compiled | Sortlen | Pad_attribute |
+----------------------------+---------+-----+---------+----------+---------+---------------+
| utf8mb4_0900_ai_ci | utf8mb4 | 255 | Yes | Yes | 0 | NO PAD |
| utf8mb4_0900_as_ci | utf8mb4 | 305 | | Yes | 0 | NO PAD |
| utf8mb4_0900_as_cs | utf8mb4 | 278 | | Yes | 0 | NO PAD |
| utf8mb4_0900_bin | utf8mb4 | 309 | | Yes | 1 | NO PAD |
| utf8mb4_bin | utf8mb4 | 46 | | Yes | 1 | PAD SPACE |
......
对于 性别 或 表示状态的字段,推荐使用 CHECK 约束功能。
Check constraint 'user_chk_1' is violated.
)。CREATE TABLE User (
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
sex CHAR(1) NOT NULL,
password VARCHAR(1024) NOT NULL,
CHECK (sex = 'M' OR sex = 'F'),
PRIMARY KEY(id)
);
从 MySQL 5.7 版本开始支持JSON
类型,无须预定义字段,很方便的对产品进行描述。
从 MySQL 5.6 版本开始,DATETIME 类型支持毫秒,DATETIME(N) 中的 N 表示毫秒的精度。
推荐日期类型使用 DATETIME,而不是 TIMESTAMP 和 INT 类型;
time_zone = '+08:00'
。__tz_convert()
,这个函数需要额外的加锁操作,以确保这时操作系统时区没有修改。所以,当大规模并发访问时,由于热点资源竞争。导致性能不如 DATETIME。概念:数据表的每一列都要保持它的原子特性,也就是列不能再被分割。
概念:属性必须完全依赖于主键。
在第一范式的基础上更进一步,解决部分依赖,目标是确保表中的每列都和主键相关。
概念:所有的非主属性不依赖于其他的非主属性。
在第二范式的基础上更进一步,解决传递依赖,目标是确保表中的列都和主键直接相关,而不是间接相关。
我们应从业务角度出发,设计出符合范式准则要求的表结构。
图片及部分相关技术知识点来源于网络搜索,侵权删!
参考资料:
https://kaiwu.lagou.com/course/courseInfo.htm?courseId=869#/detail/pc?id=7321
https://blog.csdn.net/weixin_29044713/article/details/113558059
https://blog.csdn.net/weixin_43524620/article/details/86482149