mysql 最佳实践_mysql最佳实践

最佳实践:

• 给表加一个id字段(int),作为单一主键,(自增、无符号)

• 字符串做主键,效率肯定没有整数高。

• 表里面有记录的情况下,不能随便乱加字段,尤其是表在线上正在使用时

• 所以,设计表时多添加两个字段reserved1、reserved2,作为冗余,空间换实践,避免上述情况发生

• 表设计时,是否需要冗余字段,需要看将来对表的改动有多大

f3dba6e34bb78c400795cc4670feca6a.png

15ddb5a539943b905bf62364a3a1ff15.png

ef8e76e9fbff24934d6648397fdf1152.png

关系操作

选择 :横向(行)

投影 :纵向(字段)

连接 :多个表连接

DML

插入

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

b317049759b650e61c66d57bdb232d92.png

批量插入(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;

77da238c67b8891d8c47da4f076eeb7e.png

查询

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返回不同值求和

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值