MySQL

MySQL:

DDL:数据库/表 结构上的操作

DML: 数据表上,数据的增删改

DQL:数据表上,数据的查询

创建数据库: create database 数据库名

切换数据库: use 数据库名

查看正在操作的数据库名称:select database()

查看MySQL服务器中有哪些数据库: show databases

删除某个数据库:drop database 数据库名称

创建数据表(前提切换到需要建表的数据库):

create table 表名(

字段名 类型 (长度) 约束

字段名 类型 (长度) 约束

);

联合主键:一个主键包含多个字段,在数据表最后添加 : primapy key(字段名,字段名)

查看某张数据表的表结构:desc 表名

删除数据库某张表:drop table 表名

修改某张表的某些字段:

alter table 表名 关键字… 关键字: 添加:add 修改:modify ,change 删除 drop

添加:

格式1:insert into 表名 (字段1,字段2…)values(值1,值2…)

格式2:insert into 表名 values(值1,值2…)

一次性添加多条数据:insert into 表名 values(值1,值2,值3),(值1,值2,值3)…

修改:

没有条件直接修改

update 表名 set 字段名1=值,字段名2=值,…

按条件修改:

update 表名 set 字段名1=值1,字段名2=值… where 条件

删除:

逐条删除数据:delete from 表名

逐条删除表中符合条件的数据:delete from 表名 where 条件

查询:

查询并展示所有数据:select * from 表名

查询并展示表中符合要求的数据 :select 字段 from 表名 where 条件

数据库事务

数据库事务:数据的回收站

数据库的DML操作(增删改)是可以恢复的。

开启事务,开启一次回收站功能:start transaction

回滚事务,关闭当前事务,下次必须重开,还原 :rollback

提交事务。关闭当前事务,下次必须重开 持久化DML操作 : commit

**注意:**事务操作不能遭遇DDL语句,只要遭遇DDL语句,事务会自动COMMIT;

DQL查询–单表查询

条件查询—where

别名,相当于外号,可以为表或字段加别名:as:

去重复:distinct

比较运算符:

显示在某一区间的值(包含头和尾) 先写小值,再写大值 :between

显示在in列表中的值,例:in(100,200),替代 or…or…or的结构 :in(set)

模糊查询,Like语句中,% 代表零个或多个任意字符,

_ 代表一个字符**:LIKE ‘ 张pattern ’** ,例如first_name like ‘_a%’;

判断是否为空 :is null

逻辑运算符:

多个条件同时成立**:and**

多个条件任一成立**:or**

不成立,取反**:not ** 例:where not(salary>100);

排序—order by:

放置在select语句的最后。

格式:

*select from 表名 order by 排序字段名 asc/desc

asc 升序 (默认) 小到大

desc 降序 大到小
聚合函数/分组函数:

count(字段名):统计指定列不为NULL的记录行数

sum(字段名):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

msx(字段名):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

min(字段名): 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

avg(字段名):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

注意:1、 **null ** 值不纳入计算

​ 2、sum\max\min\avg 建议仅对于数字类型操作,不要操作字符串

分组—group by

格式**:select 字段1,字段2…from 表名 group by 分组字段**;

分组运算-having

格式:select 字段1,字段2… from 表名 group by 分组字段 having 分组条件;

数据库约束:
唯一约束:

unique:被标记的字段,不能重复

注意,每个表可以有多个unique 约束,但是每个表只能有一个primary key(主键约束) 。

唯一约束,会忽略null值

格式1:

​ create table 表名(

​ 字段 类型 UNIQUE;

);

非空约束:
not null:约束当前字段 不接受null 值。

格式:

​ create table 表名(

​ 字段 类型 not null;

);

自增策略:

auto_increment:自动增长列类型必须是整形。自动增长列必须为约束必须唯一(可以是唯一约束,可以是主键约束)。

多表:

用多表原因

​ 1、维护方便

​ 2、提升查询速度

主表:分类数据从分类表而来,分类表称为主表,数据来源表

从表:商品表引用了分类数据,商品表称为从表,数据引用表 (外键所在表)

外键特点

1、从表外键指向主表主键(从外指主主)

2、从表外键的数据类型和长度,必须和主表主键数据类型和长度 保持一致

外键约束:

为什么要要用外键约束?

为了强制性保持主从表数据的完整性,需要使用外键约束

数据完整性:从表外键,可以引入完整的主表数据

约定:若尝试破坏数据的完整性,该操作就会被报错停止。

声明外键约束:(是为从表添加) 前提:当前的主从数据必须是完整的。

格式**:alter table 从表名 add constraint 外键名称(自定义) foreign key (从表外键字段名) references 主表名 (主表的主键名)**

特殊:

外键约束 不会对null 作判断。

​ 若外键为null,该数据不会被外键约束 干扰

多表关系-建表

一对多:在多方创建一个外键,指向一方主键

多对多:创建中间表,中间表上有两个外键分别指向两个表的主键。

一对一:①合成一张表

​ ②任意一方创建外键,指向另一方主键。 (外键加入唯一约束)

​ ③两方的主键值相同,把任意一方的主键加入外键,形成主外键。

连接查询:

内连接查询:

隐式内连接:select 字段 from A,B where 条件

显示内连接:select * from A inner join B on 条件;

外连接查询:

当数据量较大时,内连接查询会占用大量的内存空间,可以使用外链接查询。

内连接:先进行交叉相乘,where晒减

外连接:以某张表为基准表,进行扫描拼接

左外连接:select from A表 left outer join B表 on 连接条件;

右外连接:select from A表 right outer join B表 on连接条件;

内连接:

​ 查询效率:速度较快

​ 内存占用:先笛卡尔积,再进行where晒减,内存占用在初期笛卡尔积的时候会很大。

​ 内连接占用内存空间大

​ 外连接:

​ 查询效率:一般

​ 内存占用:以基准表进行扫描拼接,内存占用在后期才会增大。

​ 外连接占用内存空间小

子查询:

查询:查询中嵌套查询

格式:进行 select 嵌套。

​ 例如:select 字段 from 表名 where (select 字段 from 表名……)……

​ 例如:select 字段 from (select 字段 from 表);

子查询效率一般,查询越多,效率越低。

子查询执行顺序:先执行最里层查询。

何时用连接查询,何时用子查询?

子查询A查询用到了B查询的查询结果

连接查询A查询的结果 + B查询的结果

时间判断:

A时间早于B时间A时间<B时间 本质A时间毫秒值 < B时间毫秒值

A时间晚于B时间A时间>B时间 本质A时间毫秒值 > B时间毫秒值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值