Mysql

文章目录
Mysql
1 数据库
1.1 数据库简介
1.2 数据库的分类
1.2.1 关系型数据库
1.2.2 非关系型数据库
1.3 常见的数据库
1.3.1 开源和闭源区别
2 SQL
2.1 如何连接数据库软件
2.1.1 在终端连接
2.1.2 通过可视化软件连接
3 数据库相关SQL
4 表相关SQL
练习:
表相关练习
5 Mysql数据类型
5.1 数值类型
5.2 字符串类型
5.3 日期类型
6 数据相关sql
数据相关sql
数据相关练习
6.1 查询进阶
练习
7 关联查询
7.1 子查询
7.2 关联查询
7.2.1 笛卡尔积
7.3 等值连接和内连接
7.4 外连接
作业
作业答案
8 约束
8.1 主键约束
8.2 非空约束
8.3 唯一性约束
8.4 默认值约束
8.5 自增约束
8.6 外键约束
9 事务
9.1 事务的ACID特性 面试必问
10 Sql分类
10.1 数据定义语言 DDL
10.2 数据操作语言 DML
10.3 数据查询语言 DQL
10.4 事务控制语言 TCL
10.5 数据控制语言
11 表设计及关联关系
11.1 一对一
11.2 一对多
11.3 多对多
11.4 自关联
11.5 案例:权限管理的表设计
练习
11.6 连接方式和关联关系
12 数据库表设计三大范式
12.1 第一范式
12.3 第三范式
13 视图
13.1 视图的分类
13.2 在视图中进行增删改查
13.3 删除视图
13.4 视图总结
14 索引
14.1 什么是索引,为什么要建立索引
14.2 索引类型
14.3 优缺点
14.4 索引分类
14.5 索引的创建和删除
15 SQL优化
15.1 为什么要对SQL进行优化
15.2 SQL优化的一些方法
数据库表
16 常见面试题

1 数据库
1.1 数据库简介
之前通过IO技术可以实现数据的增删改查操作,但是执行效率低,只能保存文本数据,所有功能都由程序员自己实现,开发效率低,使用现成的数据库软件,把数据库的具体操作交给数据库软件去处理,只需要学习如何使用数据库软件即可

1.2 数据库的分类
1.2.1 关系型数据库
经过数学理论验证,可以将显示生活中的任何关系进行保存,已表为单位保存数据

1.2.2 非关系型数据库
一般已键值对形式保存,一般用于处理一些特殊场景,如缓存数据,比如redis数据库

1.3 常见的数据库
(1) Mysql:Oracle公司的产品,08年被sun公司收购,09年sun公司又被Oracle收购,开源数据库,原Mysql员工从Oracle公司辞职后创办了MariaDB
(2) Oracle:Oraccle公司产品,闭源,市场排名第二
(3) SqlServer:微软公司产品,主要用于在微软的整套解决方案中,市场排名第三

1.3.1 开源和闭源区别
开源:开放原地阿玛,通过卖服务盈利,有大牛程序员对开源项目进行无偿的维护和升级
闭源:不开放源代码,通过卖产品+服务盈利,有大牛程序员为了刷存在感不断的去攻击

2 SQL
结构化查询语言,用于程序员和数据库软件进行交互

2.1 如何连接数据库软件
2.1.1 在终端连接
在dos窗口


在终端


2.1.2 通过可视化软件连接


3 数据库相关SQL
1.查看所有数据库 show databases;
2.创建数据库 create database db1;
3.查看数据库详情 show create database db1;
4.创建数据库指定字符集 create database db2 character set gbk;
5.删除数据库 drop database db2;
6.使用数据库 use db1;
7.导入sql文件 再黑框里执行 source C:\Users\57437\Desktop\emp.sql;

4 表相关SQL
#1.创建表 create table person ( name char(10), #字段名 字段类型 age int(3) );
#练习 创建学生表student,字段:学号id 姓名name 语文chinese 数学math 英语english create table student( id tinyint, name varchar(10), chinese int, math int,
english int );
#2.查看所有表 show tables;
#3.查看表详情 show create table student;
#–表引擎 innoDB(默认)支持事务和外键的高级操作 myisam:只支持增删改查

#4.创建表指定表引擎和字符集 create table teacher ( name varchar(10), age int(3) ) engine=innoDB charset gbk;

练习:
#1. 创建2个数据库分别是mydb1和mydb2(字符集为gbk) create database mydb1; create database mydb2 character set gbk;
#2. 在mydb1里面创建员工表emp 字段: 姓名 年龄 工资(sal) use mydb1; create table emp(name varchar(10),age int,sal int);
#3. 在mydb2里面创建英雄表hero 字段: 姓名 年龄 英雄类型(type) 引擎为myisam字符集为gbk use mydb2; create table hero(name varchar(10),age int, type
varchar(10))engine=myisam charset=gbk;
#4. 删除刚创建的两个数据库 drop database mydb1; drop database mydb2;

#5.查看表字段 desc student;
#6.删除表 drop table teacher;
#7.修改表名 rename table student to mystudent;
#8.修改表引擎和字符集 alter table person engine=myisam charset=gbk;
#9.添加表字段
#在末尾添加 alter table person add addr varchar(20);
#在最前面添加 alter table person add id int first;
#在***后面添加 alter table person add sex char(1) after name;
#10.删除表字段 alter table person drop sex;
#11.修改表字段名和类型 alter table person change age gender varchar(1);
#12.修改字段类型和位置 alter table person modify gender varchar(5) after id;

表相关练习
#1. 创建数据库mydb3 指定字符utf8 并使用 create database mydb3 character set utf8; use mydb3;
#2. 创建temp表 只有id字段 指定引擎为myisam 字符集为gbk create table temp (id int) engine=myisam charset gbk;
#3. 修改表名为t_emp rename table temp to t_emp;
#4. 修改引擎为innodb 修改字符集为utf8 alter table t_emp engine=innodb charset utf8;
#5. 在最后面添加name字段 alter table t_emp add name varchar(10);
#6. 在name前面添加age字段 alter table t_emp add age int after id;
#7. 在age后面添加工资sal字段 alter table t_emp add sal double after age;
#8. 修改sal字段名称为salary alter table t_emp change sal salary double;
#9. 修改age字段到最后面 alter table t_emp modify age int after name;
#10. 删除salary字段 alter table t_emp drop salary;
#11. 删除表 drop table t_emp;
#12. 删除数据库 drop database mydb3;

5 Mysql数据类型
5.1 数值类型
类型    大小    范围
tinyint    1byte    -128,127
smallint    2byte    `
mediumint    3byte `    
int/integer    4byte `    
bigint    8yte `    
float    4byte    `
double    8yte `    
5.2 字符串类型
类型    大小    用途
char    ` 定长字符串    
varchar    ` 变长字符串    
text    ` 长文本数据    
longtext    ` 极大文本数据    
char(n)和varchar(n)中括号中的n代表字符的个数,并不代表字节,比如
char(30)就是可以存储30个字符
char(n)是定长字符串,开辟固定大小的内存
varchar(n)是边长字符串,如果字符串个数没有达到n,实际开辟的内存空间为实际的字符串个数,节省内存

5.3 日期类型
类型    大小    格式
date    ` YYYY-MM-DD    
time    ` HH:MM:SS    
year    ` YYYY    
datetime    ` YYYY-MM-DD HH:MM:SS    
6 数据相关sql
数据相关sql
create database mydb1 character set utf8; use mydb1; create table emp(
id int, name varchar(10), age int ) engine=innodb charset utf8;

#插入数据
#全表插入 values insert into emp values (1,‘Tom’,18);
#指定字段插入 insert into emp (id,name) value (2,‘jerry’);
#中文问题 insert into emp values(3,‘刘备’,39);
#如果以上代码报错 需要执行以下命令 set names gbk;
#批量插入 insert into emp values(4,‘关羽’,25),(5,‘张飞’,25),(6,‘貂蝉’,17);
#查询数据 select name,age from emp; select * from emp; select * from emp where age<20;
#修改数据 update emp set age=29 where name=‘刘备’;
#修改数据时,由于数据库有安全模式无法修改数据
#关闭数据库安全模式 set sql_safe_updates=0; update emp set age=10 where id=2;
#删除数据 delete from emp where age<20; delete from emp;

数据相关练习
#1. 创建hero表 id 名字name 类型type 价格money
#2. 保存以下数据

#1,诸葛亮,法师,18888
#2,周瑜,法师,13888
#3,孙悟空,打野,18888
#4,小乔,法师,13888
#5,黄忠,射手,8888
#6,刘备,战士,6888
#3. 修改所有18888为28888
#4. 修改所有法师为战士
#5. 删除价格为6888的英雄
#6. 修改小乔为猪八戒
#7. 删除价格低于15000的英雄
#8. 添加性别gender字段在name的后面
#9. 修改所有英雄的性别为男
#10. 删除所有数据
#11. 删除表

6.1 查询进阶
#1.is null 和 is not null
#从员工表中查询 没有上级领导的员工姓名,工资 select ename,sal from emp where mgr is null;
#查询有领导的员工姓名和上级领导编号 select ename,mgr from emp where mgr is not null;

#2.起别名
select ename from emp; select ename as ‘姓名’ from emp; select ename ‘姓名’ from emp; select ename 姓名 from emp; select ename 姓名 from
emp;

#3.比较运算符 > < >= <= = != <>
#查询工资在2000以下的员工姓名和工资 select ename,sal from emp where sal<2000;
#查询职位(job)是 manager的员工姓名,工资,职位 select ename,job,sal from emp where job =‘manager’;
#查询工资小于等于1600的员工姓名,职位,工资 select ename,job,sal from emp where sal<1600;
#查询不是1号部门的员工姓名和部门编号 select ename,deptno from emp where deptno !=1; select ename,deptno from emp where deptno <>1;

#4.去重 distinct
#查询emp表中所有员工的职位 select distinct job from emp;

#5.and和or
#and 等效java的&& or 等效java的||
#查询不是10号部门,工资小于3000的员工编号,姓名,工资,部门编号 select empno,ename,sal,deptno from emp where deptno!=10 and sal<3000;
#查询部门是30或者上级领导为7698的所有员工的姓名,部门编号,上级领导编号 select ename,deptno,mgr from emp where deptno=30 or mgr=7698;

#6.in
#如果查询字段的值为多个的时候可以使用In关键字
#查询员工工资是800,950,1600的员工信息; select * from emp where sal=800 or sal=950 or sal=1600; select * from emp where sal in(800,950,1600);

#7.between x and y
#在两个数值之间,包含and两边的数值
#查询工资在500-1000的所有员工名字和工资 select ename,sal from emp where sal <=1000 and sal>=500; select ename,sal from emp where sal between 500 and
1000;

#8.like 模糊查询
#_:代表单个未知字符
#%:代表多个未知字符
#查询名字以K开头的所有员工名字 select ename from emp where ename like ‘k%’;
#查询商品标题包含 笔记本 的商品 select title from t_item where title like ‘%笔记本%’;
#查询商品标题第二个字是心的商品标题 select title from t_item where title like ‘_心%’;
练习
#查询单价低于100的记事本 select * from t_item where title like ‘%记事本%’ and price<100;
#查询有图片的得力商品 select * from t_item where title like ‘%得力%’ and image is not null;
#查询单价介于50到200之间的得力商品 select * from t_item where title like ‘%得力%’ and price between 50 and 200;
#查询有赠品的dell商品(卖点sell_point中带赠字) select * from t_item where title like ‘%dell%’ and sell_point like ‘%赠%’;
#查询标题不包含得力的商品 select * from t_item where title not like ‘%得力%’;
#查询价格介于50到200之外的所有商品 select * from t_item where price not between 50 and 200;

#9.查询结果排序 order by
#默认是升序:asc,降序:desc
#查询员工的名称和工资,按照工资降序排序 select ename,sal from emp order by sal desc;
#查询单价在100以下的商品名称和价格,按照价格降序排序 select title,price from t_item where price<100 order by price desc;
#多字段排序,当一个字段有相同值时,按照第二个字段排序
#查询所有员工名称,部门编号,工资,部门编号按照降序排序,工资按照升序排序 select ename,deptno,sal from emp order by deptno desc,sal;
#查询所有dell商品,按照分类id升序,单价降序排序 select title,category_id,price from t_item where title like ‘%dell%’ order by category_id,price desc;

*#10.limit(m-1)n,n 分页查询
#limit 从第几条开始查,每页显示几条 m表示第几页 n表示每页显示几条
#查询商品表中商品名称和价格,第二页数据,每页显示5条 select title,price from t_item limit 5,5;
#查询所有商品,单价升序,显示第三页,每页显示3条数据 select title,price from t_item order by price limit 6,3;
#查询工资最高的员工信息 select * from emp order by sal desc limit 0,1;

#11.数值计算 + - * / %(mod())
#查询又有商品的单价,库存,总价 select price,num,price*num 总价 from t_item;
#%和mod()都是取余 7%2 mod(7,2)

#12.日期相关函数
#获取当前日期+时间 select now();
#获取当前日期 select curdate();
#获取当前时间 select curtime();
#从日期和时间中提取日期 select date(now());
#从日期和时间中提取时间 select time(now());
#查询商品创建的年月日 select date(created_time) from t_item;
#分别提取 年 月 日 时 分 秒 select extract(year from now()); select extract(month from now()); select extract(day from now()); select
extract(hour from now()); select extract(minute from now()); select
extract(second from now());
#查询入职的年份 select ename,extract(year from hiredate) from emp;
#日期格式化date_format(时间,格式)
#%Y 4位年2018 %y 2位年18
#%m 2位月04 %c 1位月 4
#%d 日
#%H 24小时制 %h 12小时制
#%i 分 %s 秒 select date_format(now(),’%Y年%m月%d日%H时%i分%s秒’) 当前时间;
#查询商品的创建日期 按照年月日显示 select date_format(created_time,’%Y年%m月%d日’) from t_item;
#把不规则日期转化成标准格式 select str_to_date(‘25号12月2016年’,’%d号%m月%Y年’);

#13.ifnull
#判断是否为空,如果是修改成逗号后面的值,如果不是修改成逗号前面的值
#把员工

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A浅笑。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值