• mysql


    1、创建表(需要 ``)

    create table if not exists `tb_topic_examine`(
        `id` nvarchar(50) not null,
        `topic_id` nvarchar(50),
        `person_id` nvarchar(50),
        `person_name` nvarchar(50),
        `sender_id` nvarchar(50),
        `sender_name` nvarchar(50),
        `topic_status` int,
        `content` nvarchar(500),
        `is_through` int COMMENT '0 待审批,1 通过,2  退回,3秘书变更,4 秘书通过,5 撤回,6提交',
        `add_time` nvarchar(50),
        `modify_time` nvarchar(50)    
    ) COMMENT '议题审核表';

     2、新增字段(在userId字段之后)

    #新增参会人员姓名
    alter table tb_conference_user add userName nvarchar(50) COMMENT '人员名称' after userId ;
    //不为空
    alter table tb_topic_file add pngNumberSum int not null default 0 

    3、修改某字段类型

    ALTER TABLE tb_permission MODIFY COLUMN sorts int

    4、修改字段长度

    alter table tb_topic_stat modify column case_type varchar(150);

    5、插入数据(在某字段最大值基础上加上一个值)

    INSERT INTO tb_permission (id, name, nameCode,status, sorts)   
    VALUES('qqq2','1111','1112','1',(SELECT max(p.sorts) FROM tb_permission as p)+1)  

    错误:You can't specify target table 'tb_permission' for update in FROM clause

    原因:不能先select出同一表中的某些值,再update这个表(在同一语句中)。select出的结果再通过中间表select一遍,这样就规避了错误。

    UPDATE tb_topic_file 
    SET pngNumberSum = (select a.sum from (select SUM(pngNumberSum) as sum from tb_topic_file where topic_id = (select topic_id from tb_topic_file where id = 'cdbdf33f-1b0f-11e9-ad45-54ee75476cc0')) as a )WHERE id = 'cdbdf33f-1b0f-11e9-ad45-54ee75476cc0';

     6、查询一定范围时间内数据

    今天  
    select * from 表名 where to_days(时间字段名) = to_days(now());  
    昨天  
    SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1  
    7天  
    SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)  
    近30天  
    SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名)  
    本月  
    SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )  
    上一月  
    SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1  
    #查询本季度数据  
    select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(now());  
    #查询上季度数据  
    select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));  
    #查询本年数据  
    select * from `ht_invoice_information` where YEAR(create_date)=YEAR(NOW());

     sql判断语句

      select 
       tvr.topicId,
       tvr.voter,
       tu.name,
       if(tvi.id is null,0,tvi.id) as voteItemId,
       if(tvi.`name` is null,'',tvi.`name`) as voteItemName,
       if(tvr.vote_desc is null,'',tvr.vote_desc) as voteDesc
       from tb_vote_result tvr 
       left join tb_user tu on tvr.voter = tu.id
       left join tb_vote_item tvi on tvr.vote_item_id = tvi.id
       where tvr.topicId = #{_parameter}

    索引:

    有四种方式来添加数据表的索引:

    • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
    • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
    • ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
    • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。

    创建单个索引:

    create index loginName_index on tb_user(loginName);
    #或
    alter table tb_user add index loginName_index (loginName);

    创建联合索引:(多列索引)

    create index loginName_name_userLoginNameHY on tb_user (loginName,`name`,userLoginNameHY);
     #或
    alter table tb_user add index loginName_name_userLoginNameHY(loginName,`name`,userLoginNameHY);

    创建唯一索引:

    CREATE UNIQUE INDEX indexName ON mytable(username(length)) 
    #或
    ALTER table mytable ADD UNIQUE [indexName] (username(length))

    显示索引:

    Explain SELECT id,name,loginName FROM `tb_user` where loginName = 'XXX'
    show index from tb_user;

    删除索引:

    drop index loginName_name_userLoginNameHY on tb_user;

    索引使用总结

    索引的三星原则:

    • 索引将查询相关的记录按顺序放在一起则得一星

    • 索引中的数据顺序和查询结果的排序一致则得一星

    • 索引中包含了查询所需要的全部列则得一星

    第一个条原则的意思是where条件中查询的顺序和索引是一致的,就是前面说的从左到右使用索引。

    索引不是万能的,当数据量巨大时,维护索引本身也是耗费性能的,应该考虑分区分表存储。

    limit:

    select * from table limit m,n   其中m是指记录开始的index,从0开始,表示第一条记录,n是指从第m+1条开始,取n条。

    union:如无必要,一定要用关键字 union all,这样MySQL把数据放到临时表时不会再做唯一性验证

    UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

    从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL,格式如下:

    select * from A union all select * from B  //A B数据结构一定要一样
  • 相关阅读:
    如何把数字字符'1'转换为整数(java 实现)
    栈之括号匹配问题(java实现)
    Python之匿名函数(filter,map,reduce)
    python之选择排序
    python之插入排序
    python之数组元素去重
    Java中如何获取多维数组的长度
    ASP.NET 页生命周期概述
    项目中Ajax调用ashx页面中的Function的实战
    Jquery Ajax处理,服务端三种页面aspx,ashx,asmx的比较
  • 原文地址:https://www.cnblogs.com/lijianda/p/8763395.html
Copyright © 2020-2023  润新知