精华内容
下载资源
问答
  • MySQL存储过程次性添加条数据

    千次阅读 2019-09-07 21:56:33
    MySQL存储过程次性添加条数据 代码块 DELIMITER $$ CREATE PROCEDURE add_in_Student(in i INT) BEGIN DECLARE init_data INTEGER DEFAULT 1; WHILE init_data <= i DO ...

    MySQL存储过程一次性添加多条数据

    1. 代码块
    DELIMITER $$
    CREATE PROCEDURE add_in_Student(in i INT)
    BEGIN
            
            DECLARE init_data INTEGER DEFAULT 1;
           
            WHILE init_data <= i DO 
            
            INsert into Student values (null,'',1);
            
            SET init_data = init_data + 1;
            
            END WHILE; 
    END$$
    DELIMITER ;
    
    展开全文
  • 需求:现地图只显示有事件摄像头的最新一条事件信息,故,需要ID倒序后,以摄像头分组,以此获得摄像头最新的一条事件信息。(这里以ID倒序而不以创建时间倒序,是有一定优势的)。 思路:先ID(时间)倒序,后分组...

    场景:由于一个摄像头管理一个范围,且管理的某个人可以多次犯规。故,一个摄像头可以上报有多个事件,多个事件可能同时上报,可能有先后顺序。

    需求:现地图只显示有事件摄像头的最新一条事件信息,故,需要ID倒序后,以摄像头分组,以此获得摄像头最新的一条事件信息。(这里以ID倒序而不以创建时间倒序,是有一定优势的)。

    思路:先ID(时间)倒序,后分组。

    说明:  如果是单表查询,默认分组后是ID最大的一条数据,若是连表查询,需要以下方法处理。

    SELECT t.id,t.camera_id,t.create_time FROM 
        (SELECT e.* FROM sys_enforce_event e LEFT JOIN sys_dict_node n ON e.node_id = n.id 
        WHERE e.is_deleted = 0 AND e.source_id = 2 AND n.`code` IN (200,301,302,400,500) AND e.camera_id IS NOT NULL ORDER BY e.id DESC ) t	
    GROUP BY t.camera_id 

    以下方式就不对了,查找的不是最新一条记录(连表查询,看清区别)

    SELECT e.* (SELECT * FROM sys_enforce_event ORDER BY id DESC ) e LEFT JOIN sys_dict_node n ON e.node_id = n.id
    	WHERE e.is_deleted = 0 AND e.source_id = 2 AND n.`code` IN (200,301,302,400,500 ) AND e.camera_id IS NOT NULL	 
    GROUP BY e.camera_id 
    

    注意事项:此方式仅支持低于5.7版本的MySql(SELECT VERSION();

    关于高于5.7版本的,可在排序后添加l imit 999999,即可为最新一条。

    具体可参考: https://blog.csdn.net/lglaljj123/article/details/79864188

    展开全文
  • mysql数据库删除重复的数据保留一条

    万次阅读 多人点赞 2019-07-09 22:15:13
    现在身份证号identity_id和姓名name有很多重复的数据,需要删除只保留一条有效数据。 2.模拟环境 1.等入mysql数据库,创建一个单独的测试数据库mysql_exercise create database mysql_exercise charset utf8; 2....

    1.问题引入

    假设一个场景,一张用户表,包含3个字段。id,identity_id,name。现在身份证号identity_id和姓名name有很多重复的数据,需要删除只保留一条有效数据。

    2.模拟环境

    • 1.登入mysql数据库,创建一个单独的测试数据库mysql_exercise
    create database mysql_exercise charset utf8;
    
    • 2.创建用户表users
    create table users(
    					id int auto_increment primary key,
    					identity_id varchar(20),
    					name varchar(20) not null
                       );
    

    在这里插入图片描述

    • 3.插入测试数据
    insert into users values(0,'620616199409206512','张三'),
    						(0,'620616199409206512','张三'),
    						(0,'62062619930920651X','李四'),
    						(0,'62062619930920651X','李四'),
    						(0,'620622199101206211','王五'),
    						(0,'620622199101206211','王五'),
    						(0,'322235199909116233','赵六');
    

    可以多执行几次,生成较多重复数据。
    在这里插入图片描述

    • 4.解决思路
      (1)根据身份证号和name进行分组;
      (2)取出分组后的最大id(或最小id);
      (3)删除除最大(或最小)id以外的其他字段;

    • 5.第一次尝试(失败!!!)

    delete from users where id not in (select max(id) from users group by identity_id,name);
    

    报错:

    1093 (HY000): You can't specify target table 'users' for update in FROM clause
    

    在这里插入图片描述
    因为在MYSQL里,不能先select一个表的记录,再按此条件进行更新和删除同一个表的记录。
    解决办法是,将select得到的结果,再通过中间表select一遍,这样就规避了错误,
    这个问题只出现于mysql,mssql和oracle不会出现此问题。

    所以我们可以先将括号里面的sql语句先拿出来,先查到最大(或最小)id。

    select max_id from (select max(id) as max_id from users group by identity_id,name);
    

    接着,又报错了!!!

    ERROR 1248 (42000): Every derived table must have its own alias
    

    意思是说:提示说每一个衍生出来的表,必须要有自己的别名!

    执行子查询的时候,外层查询会将内层的查询当做一张表来处理,所以我们需要给内层的查询加上别名
    在这里插入图片描述
    继续更正:
    给查询到的最大(或最小id)结果当做一张新的表,起别名t,并查询t.mix_id

    select t.max_id from (select max(id) as max_id from users group by identity_id,name) as t;
    

    可以成功查到最大(或最小)id了,如下图:
    在这里插入图片描述

    • 6.第二次尝试(成功!!!)
    delete from users where id not in (
    		select t.max_id from 
    		(select max(id) as max_id from users group by identity_id,name) as t
    		);
    

    执行结果:
    在这里插入图片描述
    成功将重复的数据删除,只保留了最后一次增加的记录。同理也可以保留第一次添加的记录(即删除每个分组里面除最小id以外的其他条记录)

    3.知识拓展一:更新数据

    其他场景应用:要将用户表user_info里名字(name)为空字符串("")的用户的状态(status)改成"0"

    update user_info set status='0' where user_id in (select user_id from user_info where name='')
    

    同样报了如下错误:

    You can’t specify target table ‘user_info’ for update in FROM clause

    因为在MYSQL里,不能先select一个表的记录,再按此条件进行更新和删除同一个表的记录,解决办法是,将select得到的结果,再通过中间表select一遍,这样就规避了错误。
    以下两种均可!!!

    update user_info set status='0' where user_id in 
    	 (select user_id from (select user_id from user_info where name = '') t1);
    

    下面这种也可,细微差别,别名可带as可不带,t1.user_id 直接和内层的user_id对应也可以。

    update user_info set status='0' where user_id in 
    	(select t1.user_id from (select user_id from user_info where name='') as t1);
    

    3.1 分步骤解析

    (1)将以下查询结果作为中间表:

    select user_id from user_info where name='';
    

    (2)再查询一遍中间表作为结果集:

    select user_id from (select user_id from user_info where name='') as t;
    

    (3)更新数据

    update user_info set status='0' where user_id in 
    	(select user_id from (select user_id from user_info where name='') as t1);
    

    4.拓展练习:删除重复数据

    编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

    +----+------------------+
    | Id | Email            |
    +----+------------------+
    | 1  | john@example.com |
    | 2  | bob@example.com  |
    | 3  | john@example.com |
    +----+------------------+
    

    Id 是这个表的主键。
    例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行:

    +----+------------------+
    | Id | Email            |
    +----+------------------+
    | 1  | john@example.com |
    | 2  | bob@example.com  |
    +----+------------------+
    
    
    • 解答一:
    delete from Person where Id not in (
    	select t.min_id from (
    		select min(Id) as min_id from Person group by Email
    		) as t
    	);
    
    • 解答二:
    delete p1 from 
    	Person as p1,Person as p2 
    		where p1.Email=p2.Email and p1.Id > p2.Id;
    
    展开全文
  • mysql group by 分组获取最新一条数据

    万次阅读 2018-10-08 17:36:53
    查了很多博客,查询或者是分组无法达到要求,或者是只获取到最开始添加数据mysql 先orderby 再 groupby 没有办法解决groupby 之后无法排序得问题 最后参照了博客 修改成自己的需要sql 语句,搞定  ...

    由于业务场景需要用到,所以进行了尝试

    查了很多博客,查询或者是分组无法达到要求,或者是只获取到最开始添加的数据,mysql 先orderby 再 groupby 没有办法解决groupby 之后无法排序得问题

    最后参照了博客  修改成自己的需要sql 语句,搞定 

    https://segmentfault.com/q/1010000009067103?_ea=1814514

    select max(id) id from ot_app_offer  where  is_delete = 0 AND activity_type > 0 group by activity_type order by id desc limit 3

    因为要查询的就是三条 所以就限制三条了 其实本人也不是很理解这个分组含义 在前面加一个max的含义 大概就是分类筛选拿到最大的id 吧! 

    获取最新一条数据

    $sql = "select id from table where add_time = (select max(add_time) from table where id = $this->id)";
    展开全文
  • 在实际业务中,我们经常会遇到如何从同一个字段相同值中获取最新一条数据的问题。经自身积累以及百度之后,将常用的方法记录下来。 具体事例 由于使用的表的数据较多,所以只展示了部分数据 group by的方式 第一种 ...
  • 原创 : 我们在做项目中有时候会遇到这种需求需要将name 为张三的hobby合并为如下: 当然你也可以通过mysql的 group_comcat将hobby合并成一列,那个很简单,这里不做介绍先建表,插入数据SET NAMES utf8mb4; SET FOREIGN...
  • mysql数据库插入一条新数据,返回插入数据的主键Id mapping映射文件的sql语句 <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType=...
  • 场景:产品列表显示产品的多个标签 mysql 查询。 以往的解决办法都是查出先查出产品列表,在循环查询标签,多个标签用","隔开。 这样查询列表查次数据库,循环列表又要查询数据库多次。性能太差。 表结构: ...
  • 往数据库添加一条数据。然后表中有一个字段是creat_time。添加数据的同时,这个字段默认为当前时间。 其实很简单。 设置字段类型为timestamp。然后下面默认值填写CURRENT_TIMESTAMP 下面那个根据当前时间戳更新 勾...
  • MYSQL插入一条数据并返回自增id

    千次阅读 2019-09-09 14:04:10
    方法: < insert id = "insertBug" parameterType = "com.soft.mybatis.model.User" > INSERT INTO sys_bug ( bug_title , bug_type_id , civd_number , audit_time ) VALUES ( #{...
  • insertintopersons (id_p,lastname,firstName,city) values (200,'haha','deng','shenzhen'), (201,'haha2','deng','GD'), (202,'haha3','deng','Beijing'); from.该博客 ...
  • Java+MySQL:插入一条数据并删除上一条

    千次阅读 2018-05-03 16:44:22
    向数据库中插入一条数据,并获取新增数据的id-currentId2.找到id为 (currentId-1) 的数据,如果存在则将它删除,如果不存在继续将id减一,知道能够删除一条数据package jdbc; import java.sql.Connection; import java....
  • 简单的总结一下如何在mysql中插入一条数据后,返回该条数据的id ,假如之后代码需要这个id,这样做起来就变得非常方便,内容如下: <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" ...
  • 更新个字段,在它的后面加个字符串,不查询数据库得到这个字段值 怎么添加?? 例如: 我的test表,有个user字段,我现在想在它后面加了另个用户的名字 我在mysql数据库这样写 UPDATE test SET user= user+...
  • 在使用mysql过程中发现使用函数后比如avg(),如下图 显示有一条记录 如果想要它返回空集的话既0条数据可以在sql最后面加GROUP BY NULL 效果 可以发现返回的是0条数据
  • Mysql创建一张表并且添加一条数据

    千次阅读 2019-03-18 15:45:07
    创建一张表并且给表添加一条数据,就是为了测试慢查询,可以作为测试数据 1.创建一张表 CREATE TABLE user100w( id INT NOT NULL AUTO_INCREMENT, first_name VARCHAR(10) NOT NULL, last_name VARCHAR(10...
  • mysql一条sql实现没有数据就插入数据数据则更新数据, 比如uid为用户id,设为主键,cnt为访问次数 insert into cnt(uid,cnt) values(1,1) on duplicate key update cnt=cnt+1 如果uid不存在则插入,存在...
  • .在mybatis中的加入useGeneratedKeys和keyProperty 例如: <insert id="insert" parameterType="com.hy.common.entity.User" useGeneratedKeys="true" keyProperty="id"> insert into user (name, ...
  • MySQL 快速添加百万条数据

    千次阅读 2019-05-19 17:34:00
    需要向数据库添加100W测试数据,直接在普通表中添加速度太慢,可以使用内存表添加,然后将内存表数据复制到普通表 创建表 # 内存表 DROP TABLE IF EXISTS `test_memory`; CREATE TABLE `test_page_memory` ( `id...
  • 往数据库添加一条数据。然后表中有一个字段是creat_time。添加数据的同时,这个字段默认为当前时间。其实很简单。设置字段类型为timestamp。然后下面默认值填写CURRENT_TIMESTAMP 下面那个根据当前时间戳更新 勾上。...
  • 偶尔遇到一张表里重复插入了了相同的数据,为了防止重复的数据,我们需要对历史数据进行清理(保留最新的一条),并且为字段加入唯一键。下面以pt_logistics_check(包裹验收表)为例,packageNo为包裹号,checkId为...
  • mysql通过命令添加1条数据

    千次阅读 2018-11-21 14:26:05
    mysql通过命令添加1条数据1.语法: INSERT INTO 表名 (字段1,字段2,...字段n) VALUES (值1,值2,...值n);2.语法解析: INSERT INTO ... VALUES ...:向表插入数据命令3.示例: INSERT INTO student (name,sex) VALUES...
  • MySQL数据库面试题(2020最新版)

    万次阅读 多人点赞 2020-03-10 17:20:40
    数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...
  • mysql中一insert语句批量插入多记录

    万次阅读 多人点赞 2017-07-20 15:39:23
    这种方式只能够一次插入一条数据,要想插入多条数据,就得多次调用此sql语句,意味着多次与数据库建立连接。但是这样一来,就会增加服务器的负荷,因为,执行每一次SQL服务器都要同样对SQL进行分析、优化等操作。...
  • MySQL 排序分组获取最新一条记录

    千次阅读 2019-06-14 13:38:03
    获取 MySQL 表中修改最新的一条记录,在没有修改时间的时候获取添加时间最新的一条记录,将需求简化后如下图: 通过SQL得到红框的id为3、4的记录! 实践过程 SELECT t.* FROM ( SELECT * FROM t_user ORDER BY ...
  • Mysql一条sql语句实现数据去重操作

    千次阅读 2016-04-05 22:43:10
    原因:Mysql在执行修改或删除的时候,子查询不能是同一张表DELETE FROM users WHERE user_id NOT IN (SELECT temp.user_id FROM (SELECT MAX(user_id) user_id FROM users GROUP BY qzkh_mc, mphone, dhhm, add_prov...
  • 假设种情况,数据库的数据重复了,但是又不想随便去除个。 比如,书库中《三体》录入了多次,想根据时间戳,只保留第次入库的记录,也就是张三录入的记录。 分析 想要删除重复数据,需要找出不合适的数据,...
  • 删除一条记录,数据原有的被废弃,记录头发生变化,主要是打上了删除标记。也就是原有的数据 deleted_flag 变成 1,代表数据被删除。但是数据没有被清空,在一行数据大小小于这一行的时候,可能会占用这一行。这样...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 303,432
精华内容 121,372
关键字:

新增加一条数据mysql

mysql 订阅