开发中常用的数据库命令,你都会吗?

mysql篇

查看一张表的数据量

下面这条命令中,'\G'能够让查询结果更加优雅美观的显示,所以一般都推荐使用'\G'结尾进行查询。

yaml 复制代码
show table status like 'tablename' \G
*************************** 1. row ***************************
           Name: tablename
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 1738126 //表中的行数
 Avg_row_length: 83264	//一行记录的平均长度 
    Data_length: 144724508672 //数据存储量(字节)
Max_data_length: 0
   Index_length: 1303265280 //索引存储量(字节)
      Data_free: 4194304 //未使用的存储大小,比如碎片之类、删除但未释放的数据
 Auto_increment: 2446319 //自增字段的下一个自增值
    Create_time: 2023-09-05 xx:xx:xx
    Update_time: 2024-03-27 xx:xx:xx
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.01 sec)

平常背数据库八股,总有一题是什么时候用索引比较好,什么时候不用索引比较好,上述查询就给出了索引的一个缺点,即:索引也是需要存储开销的,且这个开销值并不低

这个表只有三个字段添加了索引,其中有一个是unique索引,可以看到,索引的存储开销是数据的10-2级别,但是在数据量大的时候,开销也能达到数十GB甚至更高。


模糊查询表名

sql 复制代码
show tables like '%tablename%'

在连接到某个数据库时,如果数据库中表很多,通常我们会通过关键字来查询我们所需要的表名,比如事件相关,show tables like '%event%','%'是正则里的通配符,可以匹配0-N个字母或数字。

数据库快速连接

css 复制代码
mysql -u username -p -h host -P port -A db_name

// -u 指定用户
// -p 通过密码交互
// -h 指定host
// -P 指定port
// -A 启动自动提交模式,每个语句和操作都会自动提交到数据库

上述命令一般是我们用来快速连接数据库的命令,只要输入一次密码进行确认就可以连接到对应的DB上。

当然如果是通过开发机进行远程开发,而又想要通过本机的一些工具进行数据库连接,比如IDE或者Navicat这种数据库管理工具的话,那么就需要手动进行打洞(因为一般本机、开发机、服务器的网络环境是隔离开的,开发机可以直连服务器,本机可以直连开发机)。这个操作比较红线,不过也是程序员们心照不宣的操作了,有需要的可以具体了解一下,加快开发效率。

去除某个主键

如果可以,则去除全部主键

sql 复制代码
ALTER TABLE tablename DROP PRIMARY KEY;

但是在高版本的MySQL中,会自动对表进行check,上述命令会移除所有的主键,而表必须有一个唯一标识(主键),所以上述命令会失败。

这时候我们可以通过ALTET TABLE tablename ADD UNIQUE (column_name)来对某个列添加唯一索引,从而为表添加一个唯一标识,然后再ALTER TABLE tablename DROP PRIMARY KEY下掉主键。

不行,则删表重建,记得备份数据。

AUTO_INCREMENT的列,一定是主键吗?

MySQL中,AUTO_INCREMENT的列并不一定要是主键,但是它必须被定义为索引。这是因为AUTO_INCREMENT本质上就是一个鉴于表级别和行级别之间的索引,也可以看成是一个计数器,只要插入了一条新的记录,一定会对这个索引进行修改。

通常情况下,AUTO_INCREMENT的列会被设置为主键,因为主键需要是唯一的,而AUTO_INCREMENT可以保证这一点。但是,

但是如果业务中需要用别的字段作为主键,比如user_id之类的字段,你可以将AUTO_INCREMENT的列设置为非主键的索引。一个表只能有一个AUTO_INCREMENT的列,而且这个列的数据类型必须是整数类型。同时,这个字段必须显式的指定unique属性。

pg篇

pg的命令也需要;作为结束符号。

描述表的结构

/d table_name

模糊查询表名

select table_name from information_schema.tables where table_name like '%podname%'

返回大量数据

显示--more--

空格往下翻一页,返回往下翻一行,也可以通过vim的方式进行搜索,比如/xxx?xxx

推荐阅读

当说到云原生时,我们究竟在谈论什么? - 掘金

不太熟悉Git? 不妨看看这篇文章 - 掘金

一文搞定常见分布式事务实现 - 掘金

你真的理解分布式理论吗? - 掘金

深入了解异地多活 - 掘金

02.K8S架构详解 - 掘金

01.你为什么需要学习K8S - 掘金

相关推荐
qixiang201313 分钟前
mysql和mongodb
数据库·mysql·mongodb
uhakadotcom29 分钟前
模型上下文协议(MCP):简化AI与外部工具的集成
后端·面试·github
扫地僧00939 分钟前
【中大厂面试题】腾讯 后端 校招 最新面试题
java·数据结构·后端·算法·面试·排序算法
东方醴歌2 小时前
VMware安装飞牛私有云fnOS并挂载小雅Alist实现异地远程访问
开发语言·后端·golang
她说彩礼65万2 小时前
Asp.NET Core WebApi 创建带鉴权机制的Api
后端·asp.net
bobz9652 小时前
qemu ovs tap down
后端
uhakadotcom2 小时前
简单理解 x402 支付协议
后端·架构·github
shepherd1263 小时前
从零搭建高可用Kafka集群与EFAK监控平台:全流程实战总结
分布式·后端·kafka
未来的资深Java架构师3 小时前
MySQL报Lock wait timeout exceeded; try restarting transaction
数据库·mysql