一、mysql
1、on DUPLICATE key update
on DUPLICATE key update completed_value=values(completed_value):这是 MySQL 中的 INSERT ... ON DUPLICATE KEY UPDATE 语法,表示如果在插入过程中遇到了唯一键冲突,则执行更新操作。
在这里,如果 a_id 和 m_id 的组合键有重复,则更新 completed_value 字段的值为当前插入的值。
2、insert ignore into table;
INSERT IGNORE语句用于向数据库表中插入数据,同时忽略重复键错误。如果插入的行造成了重复键违规,INSERT IGNORE语句会忽略新的重复行,并继续插入下一行数据。
以下是INSERT IGNORE语句的一般语法:
sql
INSERT IGNORE INTO 表名 (列1, 列2, ...)
VALUES (值1, 值2, ...), (值1, 值2, ...), ...;
将表名替换为你的表的名称,并指定要插入的列名和对应的值。
例如:
sql
INSERT IGNORE INTO my_table (id, name)
VALUES (1, 'John'), (2, 'Alice'), (3, 'Bob');
3、Analyze table 表名;
ANALYZE TABLE语句用于分析数据库表的统计信息,并更新数据库中的数据字典,以帮助优化查询性能。它会收集关于表中数据分布和结构的信息,以便数据库查询优化器更好地选择执行查询的最有效方式。
通常,当数据库中的数据分布或数据量发生变化时,执行ANALYZE TABLE语句是有益的。这可以确保数据库的查询执行计划基于最新的统计信息,从而提高查询的执行效率。
4、truncate table 表名
TRUNCATE TABLE 是一种 SQL 操作,用于删除表中的所有数据,并释放存储空间。与 DELETE 不同,TRUNCATE TABLE 是一种快速且资源消耗较低的操作,因为它不会逐行删除数据,而是直接清空整个表,并重置自增长的计数器(如果有的话)。
这个操作的作用主要包括以下几点:
清空表数据: TRUNCATE TABLE 将删除表中的所有行,使得表不包含任何数据。
释放存储空间: 删除表中的数据后,存储在数据库中的空间会被释放出来,从而可以被其他数据使用。
重置自增长计数器(如果有的话): 如果表中有自增长列(例如 MySQL 中的 AUTO_INCREMENT),TRUNCATE TABLE 操作会将这些列的计数器重置为起始值,通常为 1。
需要注意的是,TRUNCATE TABLE 操作是一个 DDL(数据定义语言)操作,而不是 DML(数据操作语言)操作,因此它不会被数据库的事务管理所影响,并且无法撤销。另外,由于 TRUNCATE TABLE 是直接操作表结构而不是行数据,所以相比于 DELETE,它的执行速度更快,但是无法在删除前执行触发器,也不支持带条件删除。
5、查看事务&锁
# 当前运行的所有事务
select * from information_schema.innodb_trx;
# 查看锁的持有和请求情况 MySQL8.0
select * from performance_schema.data_locks;
# 查看锁的等待情况 MySQL8.0
select * from performance_schema.data_lock_waits;
# 当前线程详情
show full processlist;