• mysql最佳实践


    最佳实践:
        • 给表加一个id字段(int),作为单一主键,(自增、无符号)
        • 字符串做主键,效率肯定没有整数高。
        • 表里面有记录的情况下,不能随便乱加字段,尤其是表在线上正在使用时
        • 所以,设计表时多添加两个字段reserved1、reserved2,作为冗余,空间换实践,避免上述情况发生
        • 表设计时,是否需要冗余字段,需要看将来对表的改动有多大


    关系操作

    选择 :横向(行)

    投影 :纵向(字段)

    连接 :多个表连接

    DML

    插入
    INSERT INTO table_name(col_name, …)  VALUES('xx', …);

    批量插入(select查询结果插入,导数据时用)
    INSERT INTO table_name SELECT …;

    主键冲突、唯一件冲突时插入变更新
    INSERT INTO table_name(col_name, …)  VALUES('xx', …) ON DUPLICATE KEY UPDATE col_name=value, ….;

    主键冲突、唯一键冲突时插入被忽略
    INSERT IGNORE INTO table_name(col_name, …)  VALUES('xx', …);


    更新

    UPDATE table_name SET col_name=exp1 WHERE where_definition;

    查询

    select 1;

    select * from employees;

    select emp_no,first_name,last_name form employees;

    select emp_no,CONCAT(first_name,'  ',last_name) as name from employees;

    select emp_no,first_name,last_name form employees limit 5; --拿前5个

    select emp_no,first_name,last_name form employees limit 5 offset 2; --从第3条开始拿5条(分页)

    select * from employees where emp_no < 10015 and last_name like 'p%'; --%多个字符、_单个字符

    select * from employees where emp_no between 10010 and 10015 and last_name like 'p%'; --[10010,10015]

    select * from employees where emp_no in (10001,10002,10003);

    select * from employees where emp_no in (10001,10002,10003) order by emp_no desc; --降序

    select * from employees order by emp_no desc,gender desc; --分别降序,先满足第一个

    select distinct emp_no from salaries; --过滤重复,可以作为in的集合

    select distinct emp_no,salary from salaries;

    select count(*) from salaries; --看行数,coutn星号或主键

    select sum(salary),count(*),avg(salary),min(salary),max(salary) from salaries;

    select sum(distinct emp_no) from salaries; --先排重,在计算

    select * from salaries group by emp_no; --不是我们想要的分组结果

    select emp_no,salary from salaries group by emp_no; --返回第一行或最后一行

    select emp_no,sum(salary),max(salary),avg(salary),count(*) from salaries group by emp_no; --每个人的薪资总和

    select emp_no,sum(salary),max(salary),avg(salary),count(*) from salaries
    group by emp_no
    having emp_no>10002; --分组后的条件

    运算符

    =    等于

    <>  不等于

    >、<、>=、<=  大于、小于、大于等于、小于等于

    between  在某个范围内,between a and b 等价于[a, b]

    like  字符串模式匹配,%表示任意多个字符,_表示一个字符

    in    指定针对某个列的多个可能值

    and   与

    or   或

    distinct 不返回重复记录

    select distinct dept_no from dept_emp;

    select distinct emp_no from dept_emp;

    select distinct dept_no, emp_no from dept_emp;

    聚合函数

    count(expr)  返回记录中记录的数目,如果指定列,则返回非null值的行数

    count(distinct expr, [expr])  返回不重复的非null值的行数

    avg([distinct] expr)  平均值

    min(expr)   最小值

    max(expr)  最大值

    sum([distinct] expr)  求和,distinct返回不同值求和

  • 相关阅读:
    sa-token v1.9.0 版本已发布,带来激动人心新特性:同端互斥登录
    为什么类只能用public修饰?
    Sentinel导航
    Ribbon导航
    Feign导航
    Gateway导航
    Nacos导航
    Nginx导航
    微服务导航
    Springboot之登录模块探索(含Token,验证码,网络安全等知识)
  • 原文地址:https://www.cnblogs.com/lizitest/p/9553200.html
Copyright © 2020-2023  润新知