文章目录
第一节 数据库相关的概念
DataBase 简称DB 数据库管理系统DBMS
MySQL 是一种数据库管理系统(不要再乱说丢脸了)
SQL结构化查询语言 用来操作数据库
第二节 MySQL的安装与基本使用
对应自己的电脑版本进行搜索学习
第三节 MySQL的使用
mysql -u(用户名) -p(登录密码) -h(登录ip 默认127.0.0.1)-p (默认端口号 3306默认)
关系型数据库:建立在关系模型(集合论的思维发展而来)基础之上的数据库
(每一种数据库可能在SQL上有一点点不同所以要注意)
(SQL不区分大小写 , 关键字建议大写)
1⃣️ create database db1; 创建数据库
(可以单行 或者 多行使用 以分号判断结尾)
2⃣️ show databases;
(查看当前有多少个数据库)
3⃣️-- (一个空格)或者 # 单行注释
/**/多行注释
DDL: 对数据库 和 表进行操作
DML 与 DQL: 对数据进行操作
DCL:对数据库 和 表的权限进行操作
接下来依次的进行介绍
第四节 具体操作
DDL
对数据库进行操作
增 create database 名称;(不能重名冲突) create database if not exists db1;
删 drop database 名称;(同理不能冲突)drop database if exists db2
改(使用) use 名称;
查 show databases;
对表进行操作
增 create table (字段名 属性类型,字段名 属性类型); (最后一个不用带,号). string是varchar()
double(总长度,小数点后的位数)
date 只有年月日
char 和 varchar:定长存储固定 存储性能较高但是比较浪费
主要分为三种
- 数值
- 字符串
- 日期
删 drop table 名称;
改 :- 修改表名 alter table 名称 rename to 新的名称;
- 添加列 alter table 名称 add 属性名 类型;
- 修改列类型 alter table 名称 modify 列名 类型;
- 修改列名 类型 alter table 名称 change 列名 新列名 类型;
- 删除列 :alter table 名称 drop 列名;
查 show tables; desc 表名称;
DML
增: 第一种 对某一列进行数据插入:
Insert into 表名 (列名1,列名2)values (值1,值2) (值)
Insert into 表名 valuss (全部值),(全部值)
{均可以通过多个数值 批量处理}
改:UPDATA 表名 set 列名=值,列名=值, [where 条件];
{updata语句一旦没有添加where语句会将表内的所有行的元素进行修改!!!}
删:delete from 表名 where条件
DQL
基础查询
select 列名 from 表名;
(* 尽量少的使用)
{DISTINCT 用来去除一些查询到的重复的数据}
{as 关键字 }
条件查询
注意between and 关键字 (日期date类型也可以通过大小进行比较) 在某某之间
注意in关键字 进行多选一
注意在SQL里null值不能使用= != 进行比较 必须使用is null 或者 is not null
模糊查询 like。 _单个任意字符。 like 多个任意字符
排序查询
注意有多个排序条件时 采用的策略是短路比较
分组查询
聚合处理操作。特别注意null值 不参与所有聚合函数的运算
注意 where 和 having 的区别(注意三者之间的执行顺序)
分页查询
规定一次查询的数目
第五节 约束
主键可以理解为: 非空 唯一 代表标识该行数据
(duplicate 重复)
– 默认值的演示
INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES (2,‘李四’,‘2000-05-12’,13020);
对于默认约束的插入正确形式应该是下面这种
自增长:auto_increment
当然这些约束可以在建表之后进行添加修改
只需要修改列数据类型的形式进行修改即可
第六节 外键约束和多表查询
外键
外键用来建立两个表之间的联系,保证数据的一致性和完整性
constraint约束
REFERENCES reference 引用 参考
数据库设计
ER图:
设计过程
表关系
其中一对一比较少见 拆表 (将常用和不常用进行区分)
这里的对应指的是数据字段的对应
一对多(多对一): 通过使用在多的一端建立外键来指向少的一端
多对多: 需要通过第三张中间表来完成 一般需要多个外键来指向 并添加一些额外信息
简化 属性 加快搜索速度
多表查询
直接是笛卡尔积
内连接
– 多表查询
SELECT
t1.id,
t1.dep_name,
t2.ename
FROM
dept AS t1,
emp AS t2
WHERE
t1.id = t2.dept_id;
外连接
子查询:
嵌套查询:
当一次查询无法得到我们想要的答案时就会 进行嵌套查询
-- 嵌套查询
SELECT salary,bonus FROM emp WHERE ename = '李四';
SELECT ename,salary,bonus FROM emp where (salary+bonus) > 13020;
可以进行一次查询 将其修改成
SELECT ename,salary,bonus FROM emp where (salary+bonus) > (SELECT salary+bonus FROM emp WHERE ename = '李四');
-- 嵌套查询的复杂情况
SELECT id FROM dept WHERE dep_name='研发部' OR dep_name='销售部';
SELECT * FROM emp WHERE dept_id = 1 OR dept_id = 2;
变为
SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE dep_name='研发部' OR dep_name='销售部');
虚拟表 将一个表中满足条件的部分作为一个中间表(虚拟表)来进行查询
SELECT * FROM emp WHERE joindate > '2001-01-01';
SELECT * FROM (SELECT * FROM emp WHERE joindate > '2001-01-01') AS t1,dept WHERE t1.dept_id=dept.id;
事务
事务是 一组数据库操作命令 是一个操作序列
是一个不可分割的工作逻辑单元(很像操作系统中的原语)