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时间毫秒值