■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓↓↓↓ 数据库 ↓↓↓↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
数据库;
为什么要有?
当使用XML,IO等一些技术进行存储数据的时候,读取速度慢,操作不简便。。。。。。。
是什么?
数据库就是一个存储数据的容器,
可以通过数据库相关的软件对数据和数据库进行管理,
提高数据的可操作性可视化性,查询方便等。。。。。
作用;
1.用于永久的保存数据
2.管理数据
3.查询方便,读取速度快
特点;
1.数据永久保存
2.查询方便
3.数据有条理性的存在
4.可以存放文本文件也可以存放二进制文件等。。。。。。
分类;
1.关系型数据库
a)数据之间是有关联的
2.非关系型数据库
a)使用对象来存放数据的
---> 普遍率不高
---------------------------------------↓↓↓↓↓↓↓↓↓ 数据库常用软件 ↓↓↓↓↓↓↓↓↓↓↓-------------------------------------------
数据库常用软件;
1.Oracle ---> 甲骨文公司开发
---> 是一个关系型的数据库
---> 作用在大项目上的一个数据库
---> 和java语言的兼容性很好,
因为有部分的组件和界面是使用java代码写的
---> 是一个关系型数据库
---> 是目前应用的最为广泛的数据库
2.SQL Server ---> 微软公司开发的
---> 和C#的兼容性是最好的一个数据库,
可以说是为了C#这个语言所开发的一个数据库
---> 只能在windows系统下运行
3.My SQL ---> 开源的数据库,
但是目前已经被Oracle收购了。
---> 是一个轻量级的数据库
---> 一般应用在中小项目
---> 和java语言兼容性很好,
因为都是开源的
---> 使用SQL语言来操作数据的。
---> 可以应用在Liunx,unix,windows等一些系统
---> 有黄金组合之称
LAMP --> Liunx --> Apache --> MySQL --> PHP
等。。。。。。。
◆◆◆注;以上的是一个软件,
而不是数据库,
是管理数据库,
和维护数据库,
创建数据库的软件。
类似数据库的容器。
而操作数据库是通过数据库的语言来操作的。。。。。。。
---------------------------------------↓↓↓↓↓↓↓↓↓ 数据库一般结构 ↓↓↓↓↓↓↓↓↓↓↓-------------------------------------------
数据库一般结构;
数据库
|--- 表......
|--- 字段(列)......
|--- 字段类型
|--- 数据
◆◆◆◆◆注;一个数据库软件 ---> 多个数据库 ---> 多个表 ---> 多个字段 ---> N数据
↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓ ↓↓↓↓↓ ↓↓↓
管理数据库 管理表 管理字段数据 区分数据 存放对应字段
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓↓↓↓ MySQL数据库 ↓↓↓↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
MySQL数据库;
为什么要有?
1.数据可以存放在数据库,那么数据库是由什么来创建的?
2.数据库是通过什么来管理的?
是什么?
MySQL是一个管理数据库的软件,
而这个数据库软件只适合应用在中小项目
作用;
1.可以永久的存储数据
2.管理数据
3.使得用户的数据有条理性的存在
4.管理数据库
5.可以存放文本文件和二进制文件等。。。。。。
特点;
1.是一个关系型数据库。
2.适合中小项目
3.使用SQL语言来操作数据
--------------------------------↓↓↓↓↓↓↓↓↓ MySQL数据库 —— 内部运行原理 ↓↓↓↓↓↓↓↓↓↓↓-------------------------------------------
1.MySQL数据库在启动的时候,
内部会加载所有数据库和数据库的所有表的索引,
而不会加载数据。。。。。。
2.用户通过SQL语句访问数据库的表数据的时候,
MySQL数据库会根据获取到的SQL语句会匹配已经加载到内存的索引。。。。
a)匹配不到索引则会报错
b)匹配成功则根据这个语句的需求,
获取到这个索引的表的数据。
3.返回数据给用户
■■■■■■■■—————————————————————————————————↓↓↓↓↓↓↓↓↓ 数据库设计概念 ↓↓↓↓↓↓↓↓↓↓↓——————————————————————————————■■■■■■■■
数据库设计概念;
要了解数据库设计概念,
那么要先了解项目的开发过程。
项目开发过程;
1.需求分析
2.需求设计
a)概要设计;技术架构、数据库的设计等。。。。。。
b)详细设计;具体到每一个类怎么设计,每一个类的方法怎么设计。。。。。。
3.编码实现
4.测试
5.上线部署和维护
A、为什么要有数据库设计概念?
有了数据库设计概念,
那么则在进行开发的时候,
设计数据库时不会无从下手。
B、是什么?
是这个行业的前辈总结出来的经验,
使得这个行业的人员在设计数据库时有具体的参考。。。。
而一般都是参考流行的三大范式。
作用;
使得数据库更加符合需求的设计
----------------------------------------↓↓↓↓↓↓↓↓↓ 数据库设计三大范式 ↓↓↓↓↓↓↓↓↓↓↓-------------------------------------------
数据库三大范式;
一、表的每一个字段都是不可分割的,都是独立的单元
通俗;表的数据进行一个字段式的管理,而不要全部数据放在一个字段
缺点;字段之间可能没有关系,使得数据产生混乱
二、在第一范式的基础上,要求除了主键以外的其他字段都和主键有依赖关系
通俗;一张表只表达一个意思,如;学生表只表达学生的信息等。。。。。
缺点;使得表与表之间没有关系,
每一个表都是独立的个体,
那么使得数据库会出现臃肿的情况。
冗余过大,使得大量数据出现重复。
三、在第一范式和第二范式的基础上,
要求除了主键以外的其他字段和主键有直接决定的关系
通俗;表和表之间是有关系的,
表的某一个主键就表示这个数据,
而这个主键是和某张表是有关系的,
使得表不会出现大量的冗余。
如;工人的工时不一样,
而不用标记每一个工时和工人,
直接使用一个工时表进行一个关联就可以。
缺点;查询效率低下,但是解决了第一范式和第二范式的缺点。。。。。。
◆◆◆◆◆◆注;尽量做到就可以了,
因为具体的实施都是视项目而定的。
◆◆◆ 不使用范式,提高查询效率,使得存储空间变大
◆◆◆ 使用范式,减少了存储空间的占用,使得查询的效率低下
■■■■■■■■■■■■■■■■—————————————————↓↓↓↓↓↓↓↓↓ MySQL数据库 —— SQL语言 ↓↓↓↓↓↓↓↓↓↓↓—————————————————■■■■■■■■■■■■■■■■
SQL语言;
为什么要有?
有了数据库,
有了管理数据库的软件,
那么数据库的数据是如何操作的?
是什么?
Struture Query Language ---> 结构化查询语言
---> 是一个专门为关系数据库所设计的语言
作用;
1.创建数据库
2.管理···数据库的数据
3.操作···数据库的数据
4.可以作用在MySQL平台上
。。。。。。
特点;
1.只作用在关系型的数据库
2.对大小写不敏感
◆◆◆◆◆注;无论表名还是数据库名在创建的时候是大写的,
而在数据库中会自动转换成小写所以对大小写不敏感。
----------------------------------↓↓↓↓↓↓↓↓↓ SQL语言 —— 常用数据类型 ↓↓↓↓↓↓↓↓↓↓↓-------------------------------------------
SQL语言-常用数据类型;
1.数值型;
a)int -J-> int
b)float -J-> float
c)double -J-> double
d)short -J-> short
e)bit -J-> byte
2.字符(字符串类型)
a)char(长度) -J-> String/char
b)varchar(长度) -J-> String/char
◆注;a、char是不可变字符的长度,
只要存放的数据不超过这个长度就可,
但是如果存放的数据没有超过这个长度,
◆ 在内存中还是占用这个长度大小,
多余的部分会使用空格代替。
b、varchar是可变字符长度,
只要存放的数据不超过这个长度就可,
◆ 但是在内存中占用的大小会根据数据的大小。
3.日期类型
a)date 日期 --> yyyy-MM-dd
b)datetime 日期时间 --> yyyy-MM-dd hh:mm:ss
c)timestamp 时间戳 --> 没有效果,
只会记录下当前数据操作时间,
所以一般是不需要维护的。
4.文件类型
text 存储文本文件
blob 字节类型
◆◆◆注;在MySql中如果是数值类型传入一个字符串则会转换成 ( 0 )
-------------------------------↓↓↓↓↓↓↓↓↓ SQL语言常用操作(数据库)语句 ↓↓↓↓↓↓↓↓↓↓↓-------------------------------------------
SQL语言常用操作数据库语句;
1.show databases; ---> 显示当前所有的已创建的数据库
2.create database 数据库名 ---> 创建数据库
3. show create database 数据库名 ---> 查看数据库的编码集
4.create database 数据库名 default character set 字符集
——> 在创建数据库的时候指定编码集
◆◆◆◆◆注;如果指定的是UTF-8的,直接写utf8,
因为在SQL语言中是忽略UTF-8的( - )的。
5.alter database 数据库名 default character set 字符集
---> 修改数据库字符集
6.drop database 数据库名 ---> 删除数据库
◆◆◆◆◆注;千万要记得预先备份。
---------------------------↓↓↓↓↓↓↓↓↓ SQL语言常用操作数据库(表)语句 ↓↓↓↓↓↓↓↓↓↓↓-------------------------------------------
SQL常用操作数据库表语句;
1.use 数据名 ---> 进入数据库
◆◆◆注;必须要先进入数据库才可以,
进行管理这个数据库的数据。
2.show tables ---> 显示所有的表
3.create table 表名(字段(列) 类型,...) ---> 创建表
◆◆◆◆◆注;创建表的时候,
最少必须要指定表的一个字段。
4.alter table 旧表名 rename to 新表名---> 修改表名
5.desc table 表名 ---> 查看表的字段详细信息
6.drop table 表名 ---> 删除表
7.alter table 表名 add column 字段 类型,...
---> 给表添加字段
8.alter table 表名 modify 字段 新类型
---> 修改表的字段类型
9.alter table 表名 change 老字段名 新字段名 类型
---> 修改表的字段名
10.alter table 表名 drop column 字段名
---> 删除表的字段
--------------------------↓↓↓↓↓↓↓↓↓ SQL语言常用管理数据库表的(字段)语句 ↓↓↓↓↓↓↓↓↓↓↓-------------------------------------------
SQL常用表的(字段)语句;
1.insert into 表名 values(值,...) ---> 添加数据到表中,
◆ 是全局字段添加。
2.insert into 表名(字段,...) values(值,...) ---> 添加数据到表中,
◆ 是局部添加。
◆◆注;添加数据的时候,
如果指定的是局部的数据,
那么有一些数据没有添加则是使用null
要习惯使用局部修改
3.update 表名 set 字段=值,... ---> 修改表某字段的数据,
◆ 当前字段全局修改。
4.update 表名 set 字段=值,.., Where 字段=值,... --->修改表某字段的数据,
◆ 根据逻辑条件进行修改
◆◆注;在修改数据的时候,要习惯加上逻辑条件
5.delete from 表名 ---> 全局删除当前表的,
◆ 所有字段的数据。
6.delete from 表名 Where 字段=值,... ---> 局部的删除当前表的,
◆ 符合逻辑条件的字段的,
某个数据。
7.truncast 表名 ---> 删除表的所有数据,
◆ 并且将表类似置为初始化状态,
◆注;truncast没有局部删除
◆◆◆◆◆注;必须要习惯使用delete局部删除,
◆ 必须要做备份
8.select * from 表名 ---> 查询表的所有字段数据
9.select 字段 AS '别名',字段 '别名' from 表名 ---> 查询表的某一个字段,
↓↓↓ ↓↓↓ ◆ 数据的时候,
① ② 可以使用别名,
◆ 便于观看
10.select * from 表名 where 字段=值 ---> 查询表的匹配,
这个逻辑条件的数据。
11.select *,(字段 + 字段) from 表名 ---> 查询表的数据的时候,
◆ 将某2个字段进行合并,
◆注;只能合并进行算术计算的列,
因为合并其他类型的无效。。。。。。
12.select *,常量 AS '别名' from 表名 ---> 在查询表数据的时候,
添加一个虚拟的常量列,
常量列值,
默认是常量
13.select distinct */字段 from 表名 ---> 去除重复的行
select distinct *(字段) from 表名 ---> 去除重复的行
14.逻辑条件查询 and & or
a)select * form 表名 where 字段1=值 and 字段1=值 ---> 查询表数据显示,
要符合字段1,
◆ (和)字段2的值。
b)select * from 表名 where 字段1=值 or 字段2=值 ---> 查询数据显示,
要符合字段1,
◆ (或)字段2的值。
15.比较条件 > & < & >= & <= & <> & = & between and
a)select * from 表名 where 字段1<>值 or 字段2=值 ---> 查询数据显示,
◆ 符合字段1(不等于)
或字段2(等于)
b)select * from 表名 where 字段1 between 值1 and 值2,......
---> 查询数据显示
符合字段1值1
(和)值
◆注;是包头包尾的,等价↓↓↓↓↓↓↓↓
select * from 表名 where 字段1>=值 and 字段1<=值
16.判空 is null & is not null
a)select * from 表名 where 字段1 is null or 字段2 is not null
---> 查询表数据,
◆ 字段1 是(为空)◆
◆ 或字段2 是(不为空)的数据
b) select * from 表名 where 字段1=' ' or 字段2<>' '
---> 查询表数据,
◆ 字段1 等于 ' '(空字符串)
◆ 字段2 不等于 ' ' (空字符串)
17.模糊查询 Like
a)select * from 表名 where 字段1 Like '%x' and 字段2 Like '_x'
---> 查询数据,
字段1的某个数据
◆ 最后一个字符包含x
字段2的某个数据
◆ 第二个字符包含x
◆◆◆注;% 是匹配所有的字符 和 个数
_ 是匹配单个字符的 和 单个个数
18.分页查询 limit
select * from 表名 limit 起始行N,查询行数M ---> 查询表的第(N)起始行
第(M)条查询行数
19.聚合函数查询 max() & min() & avg() & sum() & count()
最大 最小 平均值 和 行数和
select max(*),min(*),avg(字段),sum(字段),count(字段) from student
---> 查询表的各个字段
的计算值
◆◆◆注;聚合函数查询一般是使用在数值的字段,
◆ 如果有一行为null,count是不会计算的。
◆一般空字符串都是0
20.查询后排序 order by
a)select * from 表名 order by 字段 asc ---> 根据表的某个字段,
进行(asc)升序排序。
b)select * from 表名 order by 字段 desc ---> 根据表的某个字段
进行(desc)降序排序。
◆◆注;asc是降序排序,
desc是升序排序
21.分组查询 group by
select * from 表名 group by 字段 ---> 根据表的某一个字段进行分组
select gender,count(字段) form 表名 group by gender
---> 根据表的gender字段,
的个数进行一个分组。
22.分组后筛选 having
a)seklect 字段,count(字段) from 表 group by 字段 having count(字段) > N;
---> 根据表查询字段,
根据这个字段的个数进行一个分组,
而分了组之后在进行逻辑判断
◆注;where是先筛选在分组,
而having分组后筛选。
小结顺序;select -> (ditinct...) -> from -> where -> group by -> having -> order by -> limit
↓↓↓ ↓↓↓ ↓↓↓ ↓↓↓ ↓↓↓ ↓↓↓ ↓↓↓ ↓↓↓
选择 去重等.... 来自哪 筛选 分组 筛选 排序 分页
————————————————————————————————————↓↓↓↓↓↓↓↓↓ SQL语言 —— 约束 ↓↓↓↓↓↓↓↓↓↓↓———————————————————————————————————————
SQL约束;
为什么要有?
当表的格式规定下了后,
如果没有约束那么当程序员或其他人,
不小心输入错了一个数据的时候,
可能导致这个数据库出现异常,
导致用户在使用这些数据的时候,
会出现不可预知性的错误。
是什么?
SQL约束是SQL语言下的一个技术。
作用;
1.可以控制用户输入的数据,提高表的健壮性
特点;
----------------------------------↓↓↓↓↓↓↓↓↓ SQL语言 —— 约束常用语句 ↓↓↓↓↓↓↓↓↓↓↓----------------------------------------------
SQL常用约束语句;
1.默认值 Default ''
条件;创建一张学生表,
a)学生性别字段如果没有输入则默认是男.
代码;create table student(
id int,
gender char Default '男' ---> 默认值
);
◆注;默认值字段,如果写入null也是有效的,那么则不符合要求的。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
2.非空 Not null
条件;创建一张学生表,
a). 学生的名字不可以为空,
b).学生性别没数学则默认是男
代码;
create table student(
id int,
name varchar(20) not null, ---> 不为空
gender char Default '男' ---> 默认
);
◆注;非空字段类型是类型的,如果输入是字符串则默认是0。
3.唯一 unique
条件;创建一张学生表,
a)id是唯一,不能重复的
b)名字是不能为空的
c)性别默认值是男的
代码;
create table student(
id int Unique,
name varchar(20) Not null,
gender char default '男'
);
◆注;唯一(unique)约束中可以输入null ,可是如果输入null 则是不符合需求了
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
4.主键 Primary key
条件;创建一张学生表,
a)id是唯一的,并且不可以为空
b)姓名不能为空,默认是 ' ' 空字符串
c)性别默认是'男'
代码;
create table student(
id int Primary Key, ---> 唯一不能为空
name varchar(20) Not null Default ' ',---> 不能为空,默认
gender char Default '男' ---> 默认值
);
◆注;在Primary Key虽然实现了唯一,
但是如果在每次存放数据的时候都要写,
那么太降低开发的效率了,而且是唯一的。
5.自增长 Auto_Inrement
条件;创建一个学生表
a)id是唯一,不能为空,实现自动添加
b)姓名是不能为null的,默认是空字符串
c)性别默认值是 男
代码;
create table student(
id int Primary Key Auto_Increment, ---> 自动增长,而且唯一
name varchar(20) not null Default ' ',---> 不能为空,默认是' '
gender char Default ' '
);
◆注;主键和自增长基本都是一起使用的,自增长是MySQL特有的。。。。。。
◆◆◆注;一张表只能有一个主键,因为主键是唯一标识
6.外键 Constraint - - Foreign Key() - references-
条件;A、创建一个科目表,
a)id是唯一的,而且自动增长
b)subject(科目)不能为空
B、创建一个学生表,
a)id是唯一的,而且会自动增长,而且不能为空
b)name是不能为空
c)gender默认值 '男'
d)subjectId(科目) 和科目表的Id做关联
代码;
A、
create table subjects(
id int Primary Key Auto_Increment, ---> 唯一且自动增长
subject varchar(20) not null, ---> 不能为空
);
B、create table student(
id int Primary Key Auto_Increment, ---> 唯一且自动增长
name varchar(20) not null, ---> 不能为空
gender char Default '男', --->默认值
subjectId int,
Constraint 外键名 Foreign Key(subjectId) References subject(id)
---> 关联subject表
);
说明;
被关联的表(subject)叫主表
关联别的表的表(student)叫副表
Constraint 外键名 Foreign Key(副表外键) References 主表(被关联键)
◆◆注;删除/更改外键等操作,都是···先···操作副表···再···操作主表的,
但是这样不便于维护,所以可以使用级联的方式使得操作,
的时候直接操作主表就可。
级联
代码;
create table student(
id Primary Key Auto_Increment,
name varchar(20) not null,
gender char Default '男',
|--- Constraint 外键名 Foreignd Key(副表外键) References 主表(被关联键)
+---->On Update Cascade On Delete Cascade
);
◆◆◆注;级联只是可以用在外键上的,使得主表修改同步到副表
◆◆◆注;一张表可以关联···多个···外键,但是只有···一个···主键。
◆◆◆◆◆注;注意副表的外键要和主表的主键类型要一致
◆◆重◆重◆◆注;在创建约束的时候,第N个字段都是以( , ) 结尾的,
最后一个约束是 ( ) 空,什么都不需要的,
如果是多个则约束则以( )空格 进行分隔的。
在创建表的时候,建议,必须要提供一个主键,可以提高操作的效率。
————————————————————————————————————↓↓↓↓↓↓↓↓↓ SQL语言 —— 多表查询 ↓↓↓↓↓↓↓↓↓↓↓———————————————————————————————————————
SQL多表查询;
为什么要有?
当如果有多张表存放则各种信息,
而这些表之间是由关系的,
那么应该怎么查询这些表之间对应的信息?
如同两张表进行一个核对。。。。。
是什么?
同时操作N张表
作用;
1.可以同时操作多张表
2.根据这些表可以进行一个核对查询
特点;
1.表与表之间一般是有关系的。
-----------------------------↓↓↓↓↓↓↓↓↓ SQL语言 —— 多表查询语句编写规则 ↓↓↓↓↓↓↓↓↓↓↓----------------------------------------------
SQL多表查询语句编写规则;
1.确定要查询的表
2.确定查询表的字段
3.连接条件
◆◆◆注;连接条件是 ---> 表的数量 - 1
--------------------------------↓↓↓↓↓↓↓↓↓ SQL语言 —— 多表查询常用语句 ↓↓↓↓↓↓↓↓↓↓↓----------------------------------------------
SQL多表查询常用语句;
A、创建学生表
create table student(
name varchar(20),
age int Not null,
boosId int;
subject varchar(20)
);
B、创建学生考试科目表
create table workMessage(
subject varchar(20)
);
1.交叉查询
条件;查询每一个学生考过的科目对应信息
代码;
select st.name,wm.subject from student st,workMessage AS wm;
说明;这样的代码 ◆ 是有问题的 ◆,
会出现·笛卡尔积·的错误,
在查询的时候要避免笛卡尔积的错误。
◆◆◆◆◆注;在进行多表查询是···必须···要加上···查询条件···的,
否则会出现笛卡尔积的错误,笛卡尔积的错误是不愿意出现的。
除非是非常特殊,极端的情况才需要出现笛卡尔积的结果。
2.内连接查询
条件;查询每一个学生考过的科目对应信息,不允许出现笛卡尔积错误
/代码一;
/ |--- select st.name,wm.subject from student st,workMassage wm
/ +----> where st.subject=wm.subject
/
/ 说明;选择st表的name字段和wm表的subject字段,
/ 这个2个字段来自student表和workMessage表,
效果是一样的 ---------| 逻辑判断st表和wm表的subject字段是否一样的,
\ 一样的则返回这结果。
\
\
\
\代码二;
|--- select st.name,wm.subject form student st
+---> Inner Join workMessage wm On st.subject=wm.subject
说明;选择st表的name字段和wm表的subject字段,
这个name字段来自student表并且加入workMessage表,
进行逻辑判断st表和wm表的字段是否一样的,
一样则返回这个结果。
◆小结;内连接查询是只会返回符合逻辑条件的数据,
不符合逻辑条件的不会返回结果.
3.外连接查询
条件;以科目···为主···查询学生考过的科目
A、左外连接查询 Left Outer Join ... On ...
代码;
|--- select wm.subject,st.name from student st
+---> Left Outer Join workMessage wm On st.subject=wm.subject
说明;
选择wm表的subject字段和st表的name字段,
wm来自student表,以这个表的左边那个表为主,
加入workMessage表进行逻辑判断。
◆小结;左表为主,左表匹配右表,不匹配则为null。
B、右外连接查询 Right Outer Join ... On ...
代码;
|--- select wm.subject,st.name from student st
+---> Right Outer Join workMessage wm On st.subject=wm.subject
说明;
选择wm表的subejct字段和st表的name字段,
wm来自student表,以这个表的·右边的那个表为主
加入workMessage表进行逻辑判断。
◆小结;以右表为主,右表匹配左表,不匹配则为null。
◆小结;在外连接中的是以那边的表为主的,就算不符合条件则用null
外连接和内连接的区别;
外连接不符合条件的也会显示
内连接只有符合条件才会显示
4.自连接
条件;查询student表的boosId和自身id匹配的
代码;
|--- select st.name,ss.boosId form student st,sutdent ss
+---> where st.id=ss.id;
说明;选择st表name字段和ss表boosId字段,
st来自student表,ss来自workMessage表,
进行判断 st的id字段和ss boosId字段是匹配的。
◆小结;自连接就是自己表连接自己表。
————————————————————————————————————↓↓↓↓↓↓↓↓↓ SQL语言 —— 存储过程 ↓↓↓↓↓↓↓↓↓↓↓———————————————————————————————————————
SQL存储过程;
为什么要有?
但有N条语句是一样的时候要如何进行一个添加?
一条一条的添加的话,效率太低下了。。。。。。
是什么?
是带有逻辑处理的SQL语言编程
作用;
使得SQL语句更加强大,处理更多的业务。。。。
特点;
1.移植性差
2.语法不通用
3.执行速度快
--------------------------------↓↓↓↓↓↓↓↓↓ SQL语言 —— 存储过程的形参类型 ↓↓↓↓↓↓↓↓↓↓↓----------------------------------------------
SQL语言存储过程的形参类型;
1.in ---> 输入形参
2.out ---> 输出形参
3.inout ---> 输入输出形参
--------------------------------↓↓↓↓↓↓↓↓↓ SQL语言 —— MySQL数据库变量 ↓↓↓↓↓↓↓↓↓↓↓----------------------------------------------
MySQL数据库的变量;
①.全局变量;
a)MySQL数据库运行则会有效
b)
1.设置全局变量 set @@变量名=值;---> @@
2.调用全局变量 select @@变量名; ---> @@
②.会话变量;
a)用户登录则有效
b)
1.设置会话变量 set @变量名=值; ---> @
2.调用会话变量 select @变量名; --->
③.局部变量;
a)只存在存储过程中,最小的变量
出了存储过程则是无效的
b)
1.普遍作为形参的存在
2.设置局部变量;set 变量名=值 --->
应用;MySQL数据库的变量,
一般都是用在SQL存储过程中,
存储过程如同java的方法那样。
-----------------------------↓↓↓↓↓↓↓↓↓ SQL语言 —— 存储过程基本定义格式 ↓↓↓↓↓↓↓↓↓↓↓----------------------------------------------
存储过程基本定义格式;
Dilimiter $ ---> 存储过程开始··关键字··和··标识符··
Create Procedure 存储过程名(形参) ---> 创建存储过程,可有形参和无形参
Bengin ---> 存储过程内容开始关键字
内容........
如;select * from student;
End $ ---> 存储过程内容结束关键字和标识符
调用存储过程;
Call 存储过程名(形参) ---> 调用
◆注;标识符是可以自定义的。。。。。
--------------------------------↓↓↓↓↓↓↓↓↓ SQL语言 —— 存储过程常用语句 ↓↓↓↓↓↓↓↓↓↓↓----------------------------------------------
SQL存储过程常用的语句;
1.普通存储过程
Delimiter $ ---> 存储过程开始关键字和标识符
create Procedure test_aa() ---> 创建存储过程
Begin ---> 存储过程内容执行开始标识符
select * from 表名; --->执行内容
End $ ---> 存储过程的结束关键字和标识符
2.存储过程的 IN 形参
Delimiter $
Create Procedure test_bb(In 名N 类型Int)
Begin
Set @N = 5; ---> 将进来的这个变量的值,
设置为会话变量值为 5
End $
Call test_bb(0); ---> 调用并且传参
select @n; ---> 获取变量N的值
3.存储过程的 Out 形参
Delimiter $
Create Procedure test_cc(Out 名N 类型int);
Begin
Set N=6; ---> 直接设置这个传进来的形参的值为 5
End $;
Set @m=6; ---> 设置一个会话变量
Call test_cc(@m) ---> 调用存储过程并且传入变量
select @m ---> 获取到变量值
4.存储过程的 InOut 形参
Delimiter $
Create Procedure test_dd(InOut 名N 类型int,InOut 名M 类型int);
Begin
Set @N=5; ---> 将这个形参N设置成一个会话变量值为 5
Set M=7; ---> 将这个形参M设置值为 7
End $;
Set @m=5; ---> 设置会话变量
Call test_dd(6,@m); ---> 调用存储过程
select @n,@m; ---> 调用2个值
5.带有IF逻辑的存储过程
Delimiter $
Create Procedure test_ee(In M int,Out N int)
Begin
IF N>5 Then ---> IF语句
Set @M=5
ELSEIF n<5 THEN
Set @M=6;
ELSE
Set @M=8;
End IF; ---> IF语句结束符
End $
Set @s=5; ---> 设置会话变量
Call test_ee(5,@s); ---> 调用存储过程
Select @s; ---> 获取到会话变量
6.带有循环的存储过程
Delimiter $
Create Procedure test_ff(In M int)
Begin
Declare i int Default 0;
Declare t int Default 0;
While i<100 Do
Set t=t+i;
Set M=t;
End While;
End $;
Set @t=5; ---> 设置会话变量
Call test_ff(@t); ---> 调用存储过程
Select @t; ---> 获取会话变量值
◆◆◆◆◆◆注;要注意书写存储过程时的符号。。。。。。
只有在执行语句块中才有 ( ; ) 其余的没有
◆◆◆◆◆◆注;在存储过程中最好不要出现有注释。。。。。。。
————————————————————————————————————↓↓↓↓↓↓↓↓↓ SQL语言 —— 权限设置 ↓↓↓↓↓↓↓↓↓↓↓———————————————————————————————————————
SQL权限设置;
为什么要有?
在每一个项目中数据库权限是非常重要而谨慎的,
因为一个企业的数据都是存放在数据库的,
如果某一个不知名人士恶意操作数据库的数据
会导致不可预知性的后果,
所以在部署项目要考虑数据库的权限
是什么?
是MySQL数据库的一个控制机制。
作用;
用于控制每一个用户对数据的可操作性。。。。。。
提高数据库的数据安全性。。。。。。
存放;在MySQL数据库中有一个自带的名为 MySQL数据库 就是存放 数据库的用户信息等。。。
--------------------------↓↓↓↓↓↓↓↓↓ SQL语言 —— 设置MySQL数据库权限常用语句 ↓↓↓↓↓↓↓↓↓↓↓----------------------------------------------
SQL语言设置权限常用语句;
Use MySQL ---> 要先进入这个数据库,因为存放用户数据等。。。
1.Select * Form User; ---> 获取到所有用户,显示的密码是加密的
2.Update User Set Password=Password('密码') Where User='用户'
---> 修改密码
3.Grant ALL/SELECT权限等 On 可操作数据库名
---> TO '用户' @登录方式/lcoalhost/IP Identified By '密码'
---> 创建用户
4.Delete form User Where User='x'; ---> 删除用户
—————————————————————————————————↓↓↓↓↓↓↓↓↓ MySQL数据库使用 —— 小技巧 ↓↓↓↓↓↓↓↓↓↓↓———————————————————————————————————————
MySQL数据库使用小技巧;
1.将光标移动到语句内,按小F9则可以执行这条语句
◆◆◆注;如果是存储过程的语句要执行则必须要选择所有