*数据库
数据前后台交互介绍
基本知识
关系型数据库管理系统 === RDBMS === dbms
以行和列的形式存储数据 == 二维表【表名user 列名 id name age sex height address . 数据】
【表名,字段,记录】
user 表中保存的数据都是和用户相关的数据
多张表 构成了一个数据库
多个库 组成了一个项目
非关系型数据库管理系统
sql语言
机构化查询语言
ddl 数据 定义 语言
dml 数据 操作 语言 *【增 删 改 】 真实性操作 数据会被改变 更新原数据操作
【dql原来属于dml 】
dql 数据 查询 语言 ******************************** 虚拟操作 原数据是不会被修改的
dcl 数据 控制 语言
*mysql数据库的安装和卸载
数据库安装好之后需要检查
win + r 输入 cmd
mysql -uroot -proot
2:去看数据库的服务
搜索本地服务 找到 数据库否是是否存在并起开
卸载
控制面板
安装操作
见视频
密码一定要写小写的root
安装的时候一定要改路径
环境变量配置
首先我们应该找到我们安装的位置
D:\53ruanjian\MySQL\MySQL Server 5.7\bin
此电脑 右键 ---- 属性------高级系统设置------环境变量------系统环境变量 ----新建-----变量名是 MYSQL_HOME 值就是安装路径
----》path 中点击新建 ----》%MYSQL_HOME% 将他上移到最前面 保存关闭
再重新打开一个黑窗口输入指令 mysql -uroot -proot
*DDL介绍
数据的定义语言
数据库 sql语句是不区分大小写的
create database Colin; 数据库的创建
show databases; 展示所有的数据库 里面自带有四个 不 要 碰!!!!!!!!!
错误编码 1064 sql语法有问题
一般我们认为比较厉害的人用的都是大写
数据库切换
use colin 数据库的名字
select database(); 查看当前是在哪一个数据库中
select * from 显示表数据
删除库
drop database zhangsan;
表 列
Day10-Mysql数据库的介绍和使用
*DDL
表的创建
create table student
create table stu 表名和库名+列名都是自定义的 (只能写字母)_
数据添加是不使用DDL
需要使用DDL语言添加表的列名
create table stu(sid 整数,sname 可变长度字符串,sage 整数,sadd 可变长度字符串,ssex 固定长度字符串);
create table stu(sid int,sname varchar(100),sage int,sadd varchar(100),ssex char(2));
表创建中使用到的数据类型介绍
int(长度) == 长度不写幽默值 int int(6)
float/double() 小数 == 浮点型 float(5,2) 999.99 0.01
char(2) 表示固定长度字符串 一个汉字 男_ char(255)
varchar(3) 表示可变长度字符串 最大长度不能超过3 男 varchar(65535)
time 时分秒
date 年月日
表的查看
show tables;
查看表结构
desc stu;
修改表
alter table 表名
添加列
alter table stu add sheight float(5,2)
alter table stu modify sid varchar(10);
删除表
drop table te
注意:库名和表名不要一样
*表约束
约束表中的数据
1:主键约束
primary key
特性 : 给某一列设置一个主键约束的时候
这一列就必须
不能为空
值不能重复
被别人(外键)引用
create table st 1(sid int primary key,sname varchar(100),sage int,sadd varchar(100),ssex char(2));
删除主键
alter table stu1 drop primary key
2:主键自增约束
是在主键列的基础上去添加一个新的约束
auto_increment
前提 sid已经是主键
alter table stu1 modify sid int auto_increment
另外一种
create table stu1(sid int primary key auto_increment,sname varchar(100),sage int,sadd varchar(100),ssex char(2));
3:唯一约束
让值不能够重复出现
name
unique 关键字
create table stu1(sid int primary key auto_increment,
sname varchar(100) unique,
sage int,
sadd varchar(100),
ssex char(2));
4:非空约束
值不能为空
not null
create table stu1(sid int primary key auto_increment,
sname varchar(100) unique,
sage int not null,
sadd varchar(100),
ssex char(2));
*DML
数据的操作语言 只对数据有操作效果
insert 插入 增
update 更新 修改
delete 删除 【drop ==DDL delete == dml 】
增
insert into 表名
单数据添加
指定列添加
insert into 表名(好多的列名,也可以只写一个列名,列名之间用逗号分开) values(写的是值,值和值之间使用逗号分开,值出现的个数和顺序参照列的个数和顺序)
基本添加
insert into 表名 values(值数据就应该按照 原表中应有的列的个数和顺序编写)
多数据添加
指定列
insert into 表名(列名,列名,列名,。。。。) values(值,值,值,。。。。),(值,值,值,。。。。),(值,值,值,。。。。),......
基本
insert into 表名 values(值,。。。。。。),(值,。。。。。。),(值,。。。。。。),.....
注意事项
值:字符串类型的和时间类型 全都要加上引号
列: 不需要加引号 直接写
更新
update 表名 set 列名 = 值
修改 性别为男
update stu set ssex = '男' 结果是都改成了男
修改 性别位女 需要加条件 给谁的性别修改
条件引出的关键字 where
update stu set ssex = '女' where sname = 'lili'
如果多列需要同时修改的话 那么列和列之间我们使用逗号分开
修改练习
员工表
将姓名为张三的员工薪水修改为3001元。
update employee set salary = 3001 where name = '张三';
将姓名为李四的员工薪水修改为4000元,job改为ccc。
update employee set salary = 4000 , job = 'ccc' where name = '李四'
将王五的薪水在原有基础上增加1000元。
update employee set salary = salary+1000 where name = '王五'
将所有员工薪水修改为5000元。
update employee set salary = 5000;
删除
delete from 表名
整张表的数据全部删除 表还是存在的
delete from 表名 where 条件 (列名 = 列值)
*DQL
select 查询 【DQL】
全查
select * from 表名
select * from stu
指定列
select salary from employee;
select 你要查询的内容 from 你要查询的表
去重复查询
distinct
select distinct job from employee;
列运算
ifnull(有null值的列名,0) 如果有null值的列 进行计算的时候 我们需要让null转换成0即可
模糊查询
like
特殊符号 % 表示的是一个或者多个或者0个字符
_ 表示一个字符
name like "_三" 2
name like "_三_" 3
name like "三_" 2
name like "_" 1
name like "__" 2
name like "___" 3
name like "%三" 但是只要最后一个字是三就能找到
name like "%三%" 只要有三就能找到 ***************************88
name like "三%" 只要第一个字是三就能找到
name like "%" 所有内容
select * from employee where name like '%三%';
关系运算符
where 后边 作为条件的判断依据
< > <= >= = !=
select * from employee where id >= 5;
逻辑运算符
and 并且 和
or 或者
至少要有两个及以上的条件
select * from employee where salary < 5000 or resume >5000;
select * from employee where salary > 500000 or resume >5000;
分页数据查询操作
sql 语句 -----》所有的RDBMS
每一个数据中都有他自己的 方言
limit 就属于mysql数据的方言
limit 0,5
从0开始展示,一页展示的条数
select * from employee limit 0,3;
123
456
789
10
278页数据开始的位置是多少?
(当前页号 - 1 ) *一页显示的条数
(278-1)*3 = 831
范围查询
between ... and ...
select * from employee where salary >10000 or salary < 1000;
select * from employee where salary < 10000 and salary > 1000;
select * from employee where salary between 1000 and 10000;
in
select * from employee where name = "张三";
排序查询
升序 默认 asc
降序 desc
order by
select * from employee order by salary asc;
select * from employee order by salary asc,resume desc; 多条件排序的时候只有在第一个条件不能够排序的前提下才会执行第二个条件排序
聚合函数
函数 = 方法 = 名+( )
小括号中应该写的是 计算的列名
max() 求最大数
min() 求最小数
count() 求总条数 NULl不进行统计 但是 我们要是求一下这张表中一共有多少数据的话 使用的是count(*) 或者count(1)
avg() 求平均数
sum() 求总和
select max(salary),min(resume),sum(salary),avg(salary),count(*) from employee;
都取别名
select max(salary) 最大工资,min(resume) 最小奖金,sum(salary) as 总工资,avg(salary) 平均工资,count(*) as 总条数 from employee;
分组查询
group by
根据有重复的数据列来进行分组 这样分组是有意义的
但是分组查询的内容和上面就不一样了
只能查询 分组的列,以及 聚合函数
还有一个关键字 having 他是一个条件引出关键字
where是分组前的条件引出 在where的后面不能去写 聚合函数 (不能使用聚合函数作为条件)
having 是分组后的条件引出关键字 后面可以使用聚合函数
有group by 不一定会有having
但是 有having就必须要分组 就是有group by
select product,count(*) from orders group by product;
将商品进行分类并统计每种商品的销售总额
select product,sum(price) from orders group by product;
子查询:
当一个sql查询语句中出现了多个select关键字的时候 他就是子查询
查询购买了几类商品,
select count(*) from (select product from orders group by product) as a
并且每类总价大于100的商品
select product,sum(price) from orders group by product having sum(price) > 100;
Day11-数据库基本介绍
*数据库连接工具的使用
修改安装路径
进行破解
*工具的使用介绍
数据导入操作 sql文件
*表关系介绍
一对多 多对一
一对一
多对多
表和表之间的关系创建是通过主外键来联系的
1:主键任何表都有 少的一方
2:外键不一定要有 多的一方
外键 可以有好多列, 可以为空,可以重复,必须引用主键值
多的一方的外键去引用少的一方的主键值
多对多
1:主键
2:外键
3:会存在第三张表
中间表就是第三张表 里面保存的是 两外两张表的外键 里面引用的是他们的主键值
三张表查询
不管有几张表 重点是找到主键和外键
联查时给他们加条件
两张表一个条件 主键 = 外键
三张表 两个条件 也是主键+外键
一对一
1:主键
2:外键 不能为空 不能重复 外键引用主键值
主键列就是外键列
*多表联查
笛卡尔 人名
积
两表联查得到的乘积就是笛卡尔积
这个乘积中有很多无效额数据 我们不使用
我们需要相办法去除 无效的数据
给他加条件
主键 = 外键
select * from customer c,orders o where c.cid = o.cid
mysql的方言版
正式版本
内连接
select * from customer c inner join orders o on c.cid = o.cid
两张表中查询的时候一定都要满足条件
满足条件的数据才会被查询出来
外连接
左外连接
select * from customer c left outter join orders o on c.cid = o.cid
左边的表和右边的表
以左边的表为主表 (所有数据都要)
右边的表 辅助表 (用到了我就查 不用 我就不查)
右外连接
select * from customer c right outter join orders o on c.cid = o.cid
以右边的表为主表 (所有数据都要)
左边的表 辅助表 (用到了我就查 不用 我就不查)
内外连接的区别
内连接返回两张表满足条件的所有数据
外连接除了返回两张表满足条件的所有数据,还会返回左表或者右表不满足条件的数据
左外连接和右外连接的区别
左外连:返回满足条件的所有记录,同时返回左表中剩余的其他记录
右外连:返回满足条件的所有记录,同时返回右表中剩余的其他记录