这篇文章仅记录 MySQL 的一些基础知识,方便自己偶尔查阅,老司机可直接跳过。
数据类型
整数类型
名称 | 类型 | 说明 |
---|---|---|
TINYINT | 很小的整数 | 1 字节,范围:-128〜127 |
SMALLINT | 小的整数 | 2 字节,范围:-32768〜32767 |
MEDIUMINT | 中等大小的整数 | 3 字节,范围:-8388608〜8388607 |
INT (INTEGHR) | 普通大小的整数 | 4字节整数类型,范围约+/-21亿,-2147483648〜2147483647 |
BIGINT | 大整数 | 8字节整数类型,范围约+/-922亿亿,-9223372036854775808〜9223372036854775807 |
小数类型
小数中的
M
称为精度(1 ~ 255),表示总共的位数;D
称为标度(1 ~ 30,且不能大于 M – 2),表示小数的位数 。float 和 double 是四舍六入五成双;decimal 是四舍五入。
名称 | 类型 | 说明 |
---|---|---|
FLOAT(M,D) | 浮点型(单精度,M 和 D 为可选) | 4 字节浮点数,范围约+/-1038,-3.402823466E+38~-1.175494351E-38 |
DOUBLE(M,D) | 浮点型(双精度,M 和 D 为可选) | 8 字节浮点数,范围约+/-10308,-1.7976931348623157E+308~-2.2250738585072014E-308 |
DECIMAL(M,D) | 高精度小数(定点数,M 默认为 10,D 默认为 0,M 范围为 1 ~ 65,D 范围为 0 ~ 30)实际上是以字符串的形式存储的 | 由用户指定精度的小数,例如,DECIMAL(20,10)表示一共20位,其中小数10位,通常用于财务计算 |
日期和时间类型
名称 | 类型 | 说明 |
---|---|---|
YEAR | 年份类型 | 只记录年份时,1 个字节,范围:1901 ~ 2155 格式:YYYY,例如:2020 |
TIME | 时间类型 | 存储时间,3 个字节,范围:-838:59:59 ~ 838:59:59, 格式:HH:MM:SS,例如,12:20:59 |
DATE | 日期类型 | 存储日期,3 个字节,范围:1000-01-01 ~ 9999-12-3, 格式:YYYY-MM-DD,例如,2018-06-22 |
DATETIME | 日期和时间类型 | 存储日期+时间,8 个字节,范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59,格式:YYYY-MM-DD HH:MM:SS,例如,2018-06-22 12:20:59 |
TIMESTAMP | 日期时间类型 | 4 个字节,范围:1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC,格式:YYYY-MM-DD HH:MM:SS |
字符串类型
名称 | 类型 | 说明 |
---|---|---|
CHAR(M) | 固定长度非二进制字符串 | 存储指定长度的字符串,M 字节,1<=M<=255,例如,CHAR(100)总是存储100个字符的字符串 |
VARCHAR(M) | 变长非二进制字符串 | 存储可变长度的字符串,L+1字节,L< = M和 1<=M<=65535,例如,VARCHAR(100)可以存储0~99个字符长度的字符串 |
TINYTEXT | 非常小的非二进制字符串 | L+1字节,L<2^8,长度为:255 |
TEXT | 小的非二进制字符串 | L+2字节,L<2^16,长度为:65535 |
MEDIUMTEXT | 中等大小的非二进制字符串 | L+3字节,L<2^24,长度为:16777215 |
LONGTEXT | 大的非二进制字符串 | L+4字节,L<2^32,长度为:4294967295 或 4 GB |
ENUM | 枚举类型,只能有一个枚举字符串值 | 1或2个字节,取决于枚举值的数目 (最大值为65535) |
SET | 一个设置,字符串对象可以有零个或 多个SET成员 | 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员) |
字段为什么避免允许为 NULL
通常情况下,字段应该避免允许为NULL。不允许为NULL可以简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL。
INT 自增类型上限
如果使用INT自增类型,那么当一张表的记录数超过2147483647(约21亿)时,会达到上限而出错。使用BIGINT自增类型则可以最多约922亿亿条记录。
NOT、AND、OR 优先级
如果不加括号,条件运算按照NOT、AND、OR的优先级进行,即NOT优先级最高,其次是AND,最后是OR。加上括号可以改变优先级。
SELECT * FROM students WHERE NOT class_id = 2 AND gender = 'M' AND (score < 80 OR score > 90);
where 、 group by 、 order by 、 limit (sql优先顺序必须如此)
事务的 4 个特性
-
A:Atomic,原子性,将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行; -
C:Consistent,一致性,事务完成后,所有数据的状态都是一致的,即A账户只要减去了100,B账户则必定加上了100; -
I:Isolation,隔离性,如果有多个事务并发执行,每个事务作出的修改必须与其他事务隔离; -
D:Duration,持久性,即事务完成后,对数据库数据的修改被持久化存储。
隔离级别
对于两个并发执行的事务,如果涉及到操作同一条记录的时候,可能会发生问题。因为并发操作会带来数据的不一致性,包括脏读、不可重复读、幻读等。数据库系统提供了隔离级别来让我们有针对性地选择事务的隔离级别,避免数据不一致的问题。
最后说个事
公号算法变了,为防止看不到我的更新
大家帮忙加个星标
点击上方的公众号卡片
再点右上角三个点
就能看到设为星标
算我跪下来求你们
往期精选:
原文始发于微信公众号(浅墨觅尘往):MySQL 一些不容忽略的基础知识,常看看吧
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/222143.html