MySQL 常用语句


MySQL 常用语句

sql-join
mysql常用sql语句总结

修改替换字段中的某一个值

update dictionary set content=REPLACE(content, '谭', '谈');
update recipes set item_image=REPLACE(item_image,'http://app-file.botu.com:9000','http://app-file.botu.com:9000/BOTU')
where id in (select rec.id from (select id from recipes r where  binary r.item_image not like '%BOTU%') rec);

清空表数据

truncate table dictionary; -- 清空自增主键
delete from dictionary;    -- 不清空自增主键

NULL查询

select * from tmp where name is not null;
select * from tmp where name is null;

根据表结构生成实体对应字段

SELECT
    CONCAT_WS(
        '',
        '/**
         *',
         COLUMN_COMMENT,
         '
         */
         @TableField("',column_name,'")
         @JSONField(name = "',column_name,'")
         private ',
        CASE DATA_TYPE
    WHEN 'varchar' THEN
        'String '
    WHEN 'bigint' THEN
        'Long '
    WHEN 'longtext' THEN
        'String '
    WHEN 'datetime' THEN
        'Date '
    WHEN 'int' THEN
        'Integer '
    WHEN 'decimal' THEN
        'BigDecimal '
    WHEN 'double' THEN
        'Double '
    WHEN 'timestamp' THEN
        'Timestamp '
    WHEN 'longblob' THEN
        'Byte[] '
    WHEN 'tinyint' THEN
        'Integer '
    WHEN 'text' THEN
        'String '
    WHEN 'char' THEN
        'Char '
    WHEN 'date' THEN
        'Date '
    WHEN 'float' THEN
        'Float '
    WHEN 'varbinary' THEN
        'Byte[] '
    WHEN 'mediumtext' THEN
        'String '
    WHEN 'enum' THEN
        'String '
    WHEN 'blob' THEN
        'Byte[] '
    WHEN 'set' THEN
        'String '
    WHEN 'time' THEN
        'Time '
    WHEN 'smallint' THEN
        'Integer '
    WHEN 'tinytext' THEN
        'String '
    WHEN 'binary' THEN
        'Byte[] '
    WHEN 'bit' THEN
        'Boolean '
    END,
    column_name,
    ';'
    )
FROM
    information_schema.`COLUMNS`
WHERE
    TABLE_SCHEMA = 'life_health'
AND TABLE_NAME = 'health_exp'; 

表操作

增加与修改列

Alter table 表名 add 列名称 列类型 列参数; [加的列在表的最后]
例: alter table m1 add birth date not null default '0000-00-00';

Alter table 表名 add 列名称 列类型 列参数 after 某列; [把新列加在某列后]
例: alter table m1 add gender char(1) not null default '' after username;

Alter table 表名 add 列名称 列类型 列参数 first; [把新列加在最前面]
例: alter table m1 add pid int not null default 0 first;

删除列

Alter table 表名 drop 列名;

修改列类型

Alter table 表名 modify 列名 新类型 新参数; (不能修改列名);
例:alter table m1 modify gender char(4) not null default '';

修改列名及列类型

Alter table 表名 change 旧列名 新列名 新类型 新参数;
例:alter table m1 change id uid int unsigned;

改表名

rename table regist3 to reg3;

删除表

DROP TABLE IF EXISTS `dictionary`;

常用查询

SELECT * FROM sensitive_word_condition a WHERE a.count < 11 ORDER BY a.count DESC LIMIT 1;

MySQL 5.7查询一段时间内最后一条数据

mysql 升级到5.7之后,存储引擎做了一些优化,之前我们使用的 先order by 再 group by 的方式取最后一条数据的查询,会出现取的不是最后一条记录的问题

为了实现原有查询逻辑,请在子查询后面,加上limit 9223372036854775807
其中,9223372036854775807为bigint的最大值

SELECT
    *
FROM
    (
        SELECT
            e.*,
            DATE_FORMAT(`update_date`, '%Y-%m-%d') AS edt
        FROM
            health_exp e
        WHERE
            update_date BETWEEN '2018-02-01'
        AND '2018-02-06 23:23:59'
        AND user_id = '2baef230bad144e89296c2c51fa2b680'
        ORDER BY
            update_date DESC
        LIMIT 9223372036854775807
    ) t
GROUP BY
    t.edt;

文章作者: 阿牛
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 阿牛 !
评论
  目录