背景介绍

在开发过程中突然发现数据库查询不出来结果,猜想是数据表被锁住了,网上查询后,执行命令解决。记录下来,方便备查。

1、查看进程

执行命令,查询数据库的所有连接信息。

// 显示连接的进程
show processlist

在这里插入图片描述

关注几个指标参数 id : 表示进程的id user : 表示连接的用户 info : 表示执行的语句,这里显示的是查询命令

2、杀死进程

查找所有进程,手动杀死执行时间较长的进程即可。

// 杀死进程
kill id

执行前两个命令就可以实现表的解锁,以下命令积累下来,方便日产工作。

3、查看是否锁表

// 查看是否锁表
show OPEN TABLES;
// 解锁表
UNLOCK TABLES;

在这里插入图片描述

关注的参数 In_use : 正在使用的的数量 Name_locked :被锁住的数量

4、查看事务
// 查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
// 查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

5、添加索引

索引分为主键索引、唯一索引,普通索引和联合索引等。以 user 用户表为例,记录下各种操作,方便加深印象。 建库脚本

// 创建数据库脚本
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(12) NOT NULL COMMENT '姓名',
  `sex` varchar(2) NOT NULL COMMENT '性别',
  `idCard` varchar(18) NOT NULL COMMENT '身份证号',
  `phone` varchar(18) NOT NULL COMMENT '手机号',
  `minority` varchar(20) NOT NULL COMMENT '民族',
  `birth_date` datetime NOT NULL COMMENT '出生日期',
  `interests` varchar(512) NOT NULL COMMENT '爱好'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';

执行以下命令,感觉索引的魅力,能提高检索的速度。

// 查看建库脚本
show create table user;
// 1) 添加PRIMARY KEY(主键索引) 
ALTER TABLE `user` ADD PRIMARY KEY (`id`) ;
// 2) 添加UNIQUE(唯一索引) 
ALTER TABLE `user` ADD UNIQUE (`idCard`);
// 3) 添加INDEX(普通索引) 
ALTER TABLE `user` ADD INDEX index_phone (`phone`);
// 4) 添加FULLTEXT(全文索引) 
ALTER TABLE `user` ADD FULLTEXT (`name`);
// 5) 添加多列索引 
ALTER TABLE `user` ADD INDEX index_id_name (`id`, `name`, `phone`);

6、删除索引

// 格式
drop index index_name on table_name
// 删除普通索引 
drop index index_phone on user

7、添加字段

// 添加性别字段
alter table user add COLUMN sex varchar(2) DEFAULT null COMMENT '性别';

这样添加的字段会在表的最后一列,如何让它排列到指定位置,可以使用 after 关键字。

// 添加性别字段
alter table user add COLUMN sex varchar(2) DEFAULT null COMMENT '性别' after name;

8、修改字段

如果想更改日期,注释,或者将不为空修改为允许为空,使用 modify 关键字。

// 添加性别字段
alter table user modify sex varchar(2) DEFAULT null COMMENT '性别';

9、递增主键如何重新开始

// 重新设置主键为指定的值,起始值
alter table table_name AUTO_INCREMENT=n

10、设置更新字段

表中添加个字段,数据变化(新增、修改)都要更新它为当前的日期。

// 添加自动更新字段update_time_auto 
alter table user add column update_time_auto datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间';

知识学习 1) default current_timestamp 表示当插入数据的时候,该字段默认值为当前时间 2) on update current_timestamp 表示每次更新这条数据的时候,该字段都会更新成当前时间

11、oracle锁库的处理方法

可以参照之前的博客 地址:https://editor.csdn.net/md/?articleId=107723390

参考博客

【1】https://blog.csdn.net/qq_41573234/article/details/80328281