MySQL的增删改查

1. not null 

指示某列不能存储NULL值

 2. unique

加上unique约束后,保证某列的每行必须有唯一的值,每次插入/修改都会进行查询,如果发现重复(已经存在)就会插入/修改失败

3. default

设置默认值,设置好了后,后续进行指定列插入时,未被指定的列就会保持默认值

4. primary key 

比较两个东西是否是同一个,此时就可以通过身份标识来区分,要求非空且独一无二

一个表只能有一个主键

一个主键不一定只针对一个列

联合主键 :把多个列的内容联合到一起,共同构成一个主键

5. auto_increment

 自增主键,用于生成唯一标识

 5.1 在分布式系统中,如何生成唯一的id?

基于 时间戳 (ms) + 机器编号 + 随机数  可生成一个唯一的字符串str,通过计算str的哈希值,便可以的得到一个整数,用这个整数作为id,被认为是唯一的。

哈希值的特点:

1.定长  - ->  不论字符串有多长,最终算出来的hash值都是一样的

2.分散,输入的字符串,哪怕只有一点点不同的得到的md5值都会差异很大

3.不可逆,给出原始字符串,计算哈希值很简单,但是给出哈希值,还原成原始字符串理论上来说不行

6.foreign key 

保证一个表中的数据匹配另一个表中的值得参照完整性,外界约束 关键字 reference

先创建班级表 class

student 为另一新表,要使得 student中的classId 存在于 class中的 classId , 即用classId将两表联系起来 

create table 表名 (列名 类型,列名 类型,关联列名 类型,foreign key(关联列名) references 被关联表名(被关联列名));

此时student 中的classId 就是 class中的classId ,两个表也就被关联起来了 

创建外键的注意事项:引用的父表那一列要么是主键unique

7.更复杂的一些查询操作

7.1插入和查询结合

将student 中的数据 插入到student2中,但是要保证两表的 列数 ,列的类型 ,顺序 一致

7.2常用的聚合查询

行和行之间的计算,sql提供了一种  “ 聚合函数 ”,聚合查询自动跳过空值

7.2.1 count(distnct expr)

返回查询到的数据数量

7.2.2sum(distnct expr)

返回查询数据的总和

7.2.3average(distnct expr)

返回查询数据的平均值

7.2.4max(distnct expr)    min(distnct expr)

返回查询数据的最大值和最小值

7.3 分组查询 

group by子句

指定某个列,针对这个类,把值相同的行,分到一组中,可以针对每个组,分别进行聚合查询

1.先执行select role,id from emp 

2.再根据 group by role 设定 ,按照role 这一列的值,针对上述查询结果,进行分组

3.针对上述的每个组,分别执行count 聚合操作

上述结果整理成一个临时表

select 列名,avg(列名) from 表名 group by 列名 having   条件 

7.4多表联合查询

1.先确定要查询的信息来自于哪几个表

2.把这些表进行笛卡尔积

3.指定连接条件

4.指定其他补充条件/聚合操作

5.针对列进行精简

7.4.1 内连接

两表内容若不是一一对应,针对两表进行内连接,得到的就是两表所共有的数据

where关键字

select * from 表名,表名;

select * from 表名,表名 where 条件 ;

 

join on

没有连接条件  select * from 表一  join  表二 ;

指定连接条件  select * from 表一  join  表二  on  条件 ; 

7.4.2 外连接
join on 

可以加上 left / right 关键字 形成 左外连接 / 右外连接,

对于左外连接,就是以左侧的表为基准(写作  表一  join 表二  此时,表一 为左侧表,表二为右侧表),会保证左侧表中的每一个数据都一定存在,左侧表数据在右侧表中不存在的部分(列),会使用null来填充

右外连接与左外连接类似

select * from 表名 left / right  join 表名 on 条件;

站在集合的角度看

7.4.3 子查询

把多个SQL嵌套成一个SQL

 7.4.4合并查询

union关键字

select * from 表名 where 条件 union select* from 表名 where 条件;

union允许从不同的多个表中分别查询,只要每个表查询的结果集合列的类型和个数匹配,都能合并,or 只针对一个表

union 操作默认去重,若写成union all 就不去重

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值