本文共 16588 字,大约阅读时间需要 55 分钟。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓↓↓↓ 数据库 ↓↓↓↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 数据库; 为什么要有? 当使用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则可以执行这条语句 ◆◆◆注;如果是存储过程的语句要执行则必须要选择所有
转载地址:http://gomxi.baihongyu.com/