MySQL新手入门


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓↓↓↓ 数据库 ↓↓↓↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


    数据库;
        为什么要有?
                当使用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则可以执行这条语句
    
                          ◆◆◆注;如果是存储过程的语句要执行则必须要选择所有        
                          
                                                                                                              

发布了103 篇原创文章 · 获赞 34 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/Su_Levi_Wei/article/details/104814345