mysql-limit关键字、offset关键字、存储日期类型、查看事务命令

301 阅读2分钟

「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

limit关键字

1.指定初始位置

语法: 初始位置、纪录数必须为正整数

LIMIT 初始位置, 记录数

【实例】

select * from user limit 0, 1;

image.png

2.不指定初始位置

LIMIT 记录数

【实例】

select * from user limit 2;

3.OFFSET组合使用使用效果与LIMIT 初始位置, 纪录数一致

LIMIT 记录数 OFFSET 初始位置

【记录】

select * from user limit 3 OFFSET 0;

DISTINCT关键字

作用:过滤一个或多个字段重复对数据,只返回一条数据给用户

注意事项:如果DISTINCT后面跟多个字段,只有多个字段组合起来完全一样才会过滤重复数据

select distinct [name] from [user]; select DISTINCT name from user; select DISTINCT name, age from user;

mysql存储时间

tips:

1.千万不要用字符串格式存储时间

缺点:占用空间大、比较效率低,无法用日期相关的API进行计算和比较。

2.DateTime和Timestamp抉择DateTime没有时区信息,一旦时区更换,时间就会发生错误。

Timestamp和时区有关。会随服务器时区的变化而变化。一些常用的sql命令

查看当前会话时区
SELECT @@session.time_zone;
# 设置当前会话时区
SET time_zone = 'Europe/Helsinki';
SET time_zone = "+00:00";
# 数据库全局时区设置
SELECT @@global.time_zone
# 设置全局时区
SET GLOBAL time_zone = '+8:00';
SET GLOBAL time_zone = 'Europe/Helsinki';

DateTime耗费空间更大。

DateTime耗费8个字节

TimeStamp耗费4个字节,但是表示时间范围更小。3.数值型的时间戳会不会更好?

缺点:数据可读性比较差。

优点:跨系统更方便;排序、比较等操作的效率更高。《高性能MySQL》一文中推荐使用Timestamp

事务相关指令

MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读)

命令SELECT @@transaction_isolation;查看数据库隔离级别。

image.png

InnoDB可以通过应用加锁读(例如 select * from table for update 语句)来保证不会产生幻读,而这个加锁度使用到的机制就是 Next-Key Lock 锁算法。从而达到了 SQL 标准的 SERIALIZABLE(可串行化) 隔离级别。

如何显示的开启事务: START TARNSACTION |BEGIN 显示开启一个事务 COMMIT 提交事务 ROLLBACK 回滚,撤销为提交的操作

READ-UNCOMMITTED(读取未提交): 设置数据库事务的隔离级别为read uncommited

image.png image.png

READ-COMMITTED(读取已提交): 设置数据库隔离级别:

image.png

image.png 这样就会发生不可重复的问题,即在同一个事务里读取到的数据不一样

REPEATABLE-READ(可重复读): 设置数据库隔离级别

image.png

image.png