首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

小白学习MySQL - “投机取巧”统计记录

同事提了个统计需求,MySQL某个库60%的都有个isdel字段(char(1)),值是0或1,现在要检索该数据库所有存在isdel字段且isdel=‘0’的记录,举个例子,执行如下的count...穿插一句,Oracle,我们知道,dba/all/user_tables视图的num_rows字段表示这张记录,和上述含义相同,但是这个信息,只有当统计信息更新的时候,才会更新,而统计信息的更新除了手动调用...(2) 依次执行count(*),统计每张记录。 (3) 将(2)得到的名和记录,存储到另外一张,作为检索用途。 我们按照倒序,依次操作下, 1....(2) 如果(1)的num>0,则将名、记录、插入时间,存入table_count。...检索table_count,此时记录,就是所有isdel='0',且count(*)>0的名和对应的记录数了, select * from table_count; 其实整个过程,就是我们惯性思维能考虑到的

4.2K40
您找到你想要的搜索结果了吗?
是的
没有找到

Mysql如何随机获取呢rand()

div 10)), char(97+(i % 10)))); set i=i+1; end while; end;; delimiter ; call idata(); 上面是我们插入了10000行记录...上图我们发现sort_buffer的位置信息,是个什么概念呢,而Mysql是如何定位一行数据的呢, 首先我们知道mysql中有以下规则 对于有主键的innodb来说,rowid就是我们的主键 对于没有主键的...select * from t where id >= @X limit 1; 虽然上面可以获取一个,但是他并不是一个随机,因为如何的id可能存在空洞,导致每一行的获取概率并不一样,如id=1,2,4,5...floor函数在这里的作用,就是整数部分 获取 limit Y ,1,得到一行数据 对应的sql如下 mysql> select count(*) into @C from t; set @Y =...现在如果要获取三个随机,根据随机算法2的思路 获取整张的总行数C 根据同样的共识获取Y1,Y2,Y3 再执行limit Y,1.获取三个随机 对应的sql语句如下 mysql> select

4.5K20

SQL:删除重复的记录

# --查看结果 select from test 查找多余的重复记录,重复记录是根据单个字段(peopleId)来判断  select  from people ...peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)  2、删除多余的重复记录...rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)  3、查找多余的重复记录...and rowid not in (select min(rowid) from vitae group by peopleId,seq having count()>1)  5、查找多余的重复记录...“name”,而且不同记录之间的“name”值有可能会相同,  现在就是需要查询出在该的各记录之间,“name”值存在重复的项;  Select Name,Count() From A Group

4.7K10

mysql查询数据记录行数及每行空间占用情况

可查询数据库每个占用的空间、表记录的行数。...ENGINE:所使用的存储引擎 TABLE_ROWS:记录 DATA_LENGTH:数据大小 INDEX_LENGTH:索引大小         计算出数据每行记录占用空间的目的是什么呢?...目的是知道该在保证查询性能的前提下,单能存储的行记录的上限。参考博客3提到一个假设:假设一行记录的数据大小为1k,实际上现在很多互联网业务数据记录大小通常就是1K左右。...在这个假设下得出结论为单B+树索引层级为3层时,能存储的行记录上限为21,902,400。         由此可知,一张在保证查询性能的前提下,能存储的记录行数与每行记录的大小有关。...4.https://www.cnblogs.com/guohu/p/10984278.html  MySQL查询数据的auto_increment(自增id)

2.1K30

mysql -- 清空数据

mysql – 清空数据 删除信息的方式有两种 : truncate table table_name; delete * from table_name; 注 : truncate操作的table...可以省略,delete操作的*可以省略 truncate、delete 清空数据的区别 : 1> truncate 是整体删除 (速度较快),delete是逐条删除 (速度较慢) 2> truncate...truncate 效率比 delete高的原因 3> truncate 不激活trigger (触发器),但是会重置Identity (标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录...,而不是接着原来的 ID。...而 delete 删除以后,identity 依旧是接着被删除的最近的那一条记录ID加1后进行记录。如果只需删除的部分记录,只能使用 DELETE语句配合 where条件

5K10

MYSQL学习:GROUP BY分组最新的一条记录

日常开发当中,经常会遇到查询分组数据中最新的一条记录,比如统计当前系统每个人的最新登录记录、外卖系统统计所有买家最新的一次订单记录、图书管理系统借阅者最新借阅书籍的记录等等。...1、初始化数据 -- 借阅者 CREATE TABLE `userinfo` ( `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `uname...20); INSERT INTO `userinfo` VALUES (2, '小张', 30); INSERT INTO `userinfo` VALUES (3, '小李', 28); -- 书籍...INTO `bookinfo` VALUES (5, 'ISBN005', '物理'); INSERT INTO `bookinfo` VALUES (13, 'ISBN006', '读者'); -- 借阅记录...写法2 采用子查询的方式,获取借阅记录最近的浏览时间作为查询条件 select a.user_id ,c.uname,a.borrowtime ,b.book_name book_namefrom

18.5K20

mysql分组最大(最小、最新、前N条)条记录

在数据库开发过程,我们要为每种类型的数据取出前几条记录,或者是最新、最小、最大等等,这个该如何实现呢,本文章向大家介绍如何实现mysql分组最大(最小、最新、前N条)条记录。...先看一下本示例需要使用到的数据 创建并插入数据: CREATE TABLE `tb` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar...2, 'b2'); insert into tb values('b', 4, 'b4'); insert into tb values('b', 5, 'b5'); 数据如下...: name val memo a 2 a2 a 1 a1 a 3 a3 b 1 b1 b 3 b3 b 2 b2 b 4 b4 b 5 b5 按name分组val最大的值所在行的数据 方法一: select...tb a where val = (select top 1 val from tb where name = a.name) order by a.name //这个是sql server的 //mysql

8.6K30
领券