MySQL-要点概括-第一周-8月5日-8月10日

一.SQL语句的分类(关键字大小写不敏感,数据大小写敏感)

SQL语言可分为如下5种,本课程需重点掌握DML、DQL、TCL语言,理解DDL语言、了解DCL即可
分类
名称
用途
代表关键字
补充1
表的约束
DDL
 (Data Definition Language)
数据定义语言
用来定义数据库、
表及其它对象的结构 rename
CREATE
DROP(删除)ALTER(更改)
1.创建表:
create table 表名(
  列名1 数据类型(位数)PRIMARY KEY,
  列名2 数据类型(位数)FOREIGN KEY,
  列名3 数据类型  (位数)REFERENCES 所关联表(列名),
  列名4 数据类型(位数)CHECK (x>=1 and x<=10)
);
2.修改表:
改表名:alter table 原表名 rename 新表名;
追加列名:alter table 表名 add column 列名 数据类型;
修改列名:alter table 表名 change column 列名 数据类型;
删除列:alter table 表名 drop column 列名 ;
修改列为主键:alter table add constrans primary key(列名);
修改列为外键:alter table add constrans foreign key(列名);
3.删除表:
drop table 表名;
4.截断表:清空表数据,保留表结构
truncate table 表名;
约束录入表数据的准确性,通过对列的约束来实现
1.主键约束(primary key):
(1)约束列的数据有整行数据的代表性 => 唯一且非空
(2)尽量不使用有现实意义的数据作为主键
(3)只有一个主键约束,但一个约束可以约束多个列
2.外键约束(foreign key):
(1)一般不设置外键:不影响导表顺序(在前端进行准确性约束)
3.唯一约束(unique):
(1)被约束列是唯一的,可以为空
(2)一个表可以设置多个唯一约束
4.非空约束(not null):
  (1)被约束列不许录入,不得为空
5.检查约束(MySQL不支持):
(1)CHECK 自定义约束
DML
(Data Manipulation Language)
数据操作语言
用来增加、
修改、
删除表中的数据
INSERT、
DELETE、
UPDATE
1.数据插入(新增):
方式一:
insert into  表名 
values  (值1,' 1999-1-2 ','文本用单引3',null,值4 ......)
方式二:
insert into  表名 (列1,列5,列8)
values  (值1,值5,值8)
方言三:
insert into  表名 (列1,列5,列8)
values  (1,5,8),(11,55,88),(111,555,888)
2.修改数据:
update 表名 
set 列 1 = 新值 1,列 2 = 新值 2,列 3 = 新值 3
where  条件
3.删除数据:
delete from 表名
where 条件
DQL
(Data Query Language)
数据查询语言
用来查询表中的数据
SELECT、FROM、WHERE、ORDER BY 、GROUP BY、HAVING
1.MySQL方言:
   select 允许单独使用,Oracle必须与from联合使用。
  (1) select current time( )
  (2) select current date( )
  (3) select now( )
(4)Oracle:select sysdate( )
2.select 全部列名/*(没有挨个列手打效率高)
3.null参与算数运算,结果为null
4.在sql中任意两个null不相等
5.null处理函数(方言):
   if null(参数1,参数2)if 参数1为null 结果为 参数2
6.DISTINCT(去掉重复的条数(或者说相同的对象))
7.文本类型:=(文本一致),<>(文本不一致)
8.强调*(方言): BINARY :强制敏感,绝大部分数据库,筛选时数据大小写是敏感的
9.时间:筛选符号同数值类型(越未来的时间越大)
10.条件的逻辑组合
  (1) 既有and又有or ,and 的优先级高于 or:解决方案加()
(2)特殊筛选关键字:
  • (加NOT取反)+BETWEEN X AND Y   在[x,y]之间:适用于数值或者日期数据
  • (NOT)+IN(x1,x2,x3.....)  在{x1,x2,x3.....}之中
  • (NOT)+Like ‘x’像x一样:% 表示有任意数量的字符,_ 表示有1个字符
  • (NOT)+IS NULL  筛选NULL值
(3)排序:
  • 文本:按照字典顺序
  • 升序 ASC(默认)
  • 降序 DESC (降序)
  • ORDER BY:from---where---select---order by---limit 
    • order by 列1 DESC ,  列2 ASC
    • ( 先按 列1 降序,相同的按 列2 降序) 、
  (4)分页,分段:LIMIT(方言)
  • limit  (P-1)n , n
1.聚合函数
(1)单行函数(方言):
一行数据经过函数计算得到一行结果
(2)组函数:
一组数据经过函数计算得到一个结果
MAX, MIN, AVG, SUM, COUNT)
2.分组句式
(1)对查询样本进行分组统计
  (在分组查询时,只有在 GROUP BY 中出现的列,才允许出现在select 中。)
(2)GROUP BY 可以使用多个列进行分组
  from---where---group by(having专门用于筛选分组函数)
  ---select---order by---limit 
3.  DQL的执行顺序(数据查询语言)
-- FROM 从表中获取数据
-- WHERE  筛选需要的数据行
-- GROUP BY 对筛选后的数据行进行分组,并计算分组函数
-- HAVING 专门用于筛选分组函数的条件
-- SELECT 筛选数据列,计算算术表达式,列的别名
-- ORDER BY 根据结果进行排序
-- LIMIT  结果分页分段
左右外连接示意图

20230724024159.png?origin_url=file%3A%2F%2F%2FC%3A%2FUsers%2F%E7%8E%8B%E6%80%80%E7%85%9C%2FAppData%2FLocal%2FTemp%2Fenhtmlclip%2FImage.png&pos_id=yuj9BgF5

fcfa1e682cef4cc795742d47d5cd14e3.png
4. 多表关联查询的基础 -- 笛卡尔积
关联条件: 两张表中,具备相同意义的两个列,是他们的关联列,大部分情况下它们的名字也是相同。
A{x,y,z}   B{m,n}
A x B = {xm,xn,ym,yn,zm,zn}
SQL中,笛卡尔积使用“交叉连接”来实现
CROSS JOIN
(1) 多表连接
SELECT  *
FROM a表 
CROSS JOIN b表
(2)  等值连接
SELECT  *
FROM a表
JOIN b表
ON(e.deptno= d.deptno)
(3) 外连接
---左外连接 ---
SELECT  *
FROM a表
LEFT JOIN b表
ON(e.deptno= d.deptno)
---右外连接 ---
SELECT  *
FROM a表
RIGHT JOIN b表
ON(e.deptno= d.deptno)
---全外连接---
SELECT  *
FROM a表
LEFT JOIN b表
ON(e.deptno= d.deptno)
UNION
SELECT  *
FROM a表
RIGHT JOIN b表
ON(e.deptno= d.deptno)
(4)自连接(有层次结构,有上下级):
SELECT  *
FROM a表
JOIN a1表
ON(a.deptno= a1.mgr)
(5) 集合操作
并集操作:
交集操作:交集函数(INTERSECT)
1.子查询
(1)简单子查询:sub query :

20230724024159.png?origin_url=file%3A%2F%2F%2FC%3A%2FUsers%2F%E7%8E%8B%E6%80%80%E7%85%9C%2FAppData%2FLocal%2FTemp%2Fenhtmlclip%2FImage(1).png&pos_id=MENpZDO0

40d158f63c694cebb48807c1ae304f73.png
(2)多行子查询(多行单列)
(a)子查询中 in中有null,主查询无法查出=null的数据
(b) not in()有null就无法查询任何数据
(c)>any 大于最小值,<any小于最大值
  (d)  >all 大于最大值 , <all小于最小值
(3)from中的子查询(临时视图)
  •   SELECT
  •   ename
  • FROM
  •   emp
  • JOIN
  •   临时视图emp
  • ON
  • (连接条件)
  • WHERE 条件
(4)相关子查询 EXISTS 和 NOT EXISTS 
         逐条验证主查询数据存在与否(有、没有)
  •   SELECT
  •   *
  • FROM
  •   emp E
  • WHERE  EXISTS(    
  • SELECT
  •   0
  • FROM
  •   emp PX
  • WHER
  • ( E.mgr=P.deptno)
2. 视图
数据库一种对象,关键字是VIEW
它是对数据表中的数据产生的“透视”,不存储数据。
通常做2件事:
(1) 将常用的复杂查询编制成一个视图,直接通过查询视图获得需要的数据
(2) 隐藏敏感数据
创建视图
CREATE OR REPLACE VIEW 视图名
AS
DQL语句
删除视图
DROP VIEW 视图名;

20230724024159.png?origin_url=file%3A%2F%2F%2FC%3A%2FUsers%2F%E7%8E%8B%E6%80%80%E7%85%9C%2FAppData%2FLocal%2FTemp%2Fenhtmlclip%2FImage(2).png&pos_id=TCmycYBy

348eeec659c145e8969a775fa22dcc75.png
3. 索引
索引目的为了提高表的检索(查询)速度,实际是不一定的
索引建立后一定会降低插入和删除的执行速度
自动索引:表的主键列和唯一约束列
    相应的列会自动添加索引
手动索引:通过人工添加索引
索引的关键字是INDEX
CREATE INDEX 索引名 ON 表(列)  -- 为“表”的“列”添加索引
DROP INDEX 索引名
索引是自行维护,创建之后不用管理
  1.  C/S(客户端/服务器)架构应用程序,安装数据库程序其实是数据库的 服务器server 
  2. 四个特性:
(a)原子性:事务是一个不可继续划分的整体
    如果一个事务由多个DML操作组成,这些DML操作被看作成一个整体
(b)一致性:组成事务这些DML操作,要么都成功,要么都失败。
(c)隔离性:不同事务之间不能互相影响。
(d)持久性:事务提交后,数据存入数据库,持久生效。
2.事务控制

20230724024159.png?origin_url=file%3A%2F%2F%2FC%3A%2FUsers%2F%E7%8E%8B%E6%80%80%E7%85%9C%2FAppData%2FLocal%2FTemp%2Fenhtmlclip%2FImage(3).png&pos_id=qZtvyC7R

fd8668b4b4dd40c686a21c24e3decd8a.png
3.数据库设计
1.数据库的设计范式
第一范式1NF:
  • 一个数据项(列,一个实体的属性)应该具备不可划分的原子性
第二范式2NF
  • 所有 非主键属性必须完全依赖主属性 ,不能部分依赖主属性
  • 问题一:数据冗余,某个课程学分可能被记录多次
  • 问题二*:丢失数据,某个课程无人选课,学分记录丢失
  • 解决:拆成两个表
第三范式3NF
  • 满足前两个范式的条件下, 消除传递依赖
  • 非主属性必须直接依赖于主属性,不能通过其他属性传递依赖
  • 问题一: 数据冗余,班级名保存了很多次
  • 问题二*:数据丢失,某个班级没学生,班级信息丢失
  • 解决:拆成两个表
2.实体关系设计
一对一关系
  • 两张表中的数据通过拥有相同的主键值一一对应
  • 理论上两张表是同一主体,因为各种原因将其拆分
一对多关系
  • 在多侧添加一侧的外键列
多对多关系
  • 通过建立中间关系表,以两张表的主键结合为联和主键
DCL
(Data Control Language)
数据控制语言
用来授予和收回权限
GRANT(授权)、REVOKE(收回权限)
TCL 
(Transaction Control Language)
事务处理语言
用来对数据进行提交和回滚
COMMIT(提交)、ROLLBACK(回滚)
二.SQL的数据类型
1.数字
2.文本
3.时间

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值