MySql数据库服务器-总结及理解

258 阅读12分钟
                                   MySql数据库服务器

一。服务器:

      1.服务器是一种软件,不是硬件,不是计算机。
  2.不同服务器负责调用不同的文件类型

二。表文件,数据库,数据库服务器

      1.表文件:

           1) 表文件是以".frm"结尾一种文件
	   2) 存在于服务端计算机硬盘上
	   3) 以数据行形式进行数据存储的文件

      2.表文件结构:
                           student.frm

              标题行   sid      sname     sex    age   home

	  数据行   10       mike      男     23    河南
	           
		   20       allen     女     22    河北


      3.数据库:

          开发人员将用于存放表文件的文件夹称为【数据库】

      4.数据库服务器

          一种专门对表文件进行调用和管理的软件

三。SQL命令:

       1.全称,Struct  Query  Language, 结构化查询编程语言

   2.作用,用户通过SQL命令向数据库服务器发送请求,用于对
           表文件进行调用管理
       3.特点,SQL语法结构与中国人日常用语结构非常相似,包含主谓宾

四。数据库服务器分类:

        1.关系型数据库服务器
           管理的表文件彼此之间往往具有隶属关系特征,可以完整
       描述一段数据,但是在查询时由于涉及数据较多,因此查询
       速度并不理想
     

    2.非关系数据库服务器【HashMap(key-value)】
         
       管理表文件都是独立,无法描述一段完整的数据
       但是由于每次查询的大数据较少,因此查询速度非常快

五。关系型数据库服务器分类:

        1. 甲骨文公司: Oracle , MySql
    
    2. 微软公司  : SqlServer pk MySql

六。MySql服务器启动与关闭:

         1.通过windows系统帮助启动与关闭MySql服务器

       [开始]--->输入命令【services.msc】进入到windows系统服务器管理窗口

         2.以【管理员身份】通过DOS窗口输入命令,要求MySql服务器启动与关闭

       ***如果需要在DOS窗口中向mysql服务器发送命令,必须配置path环境变量
         path= C:\Program Files (x86)\MySQL\MySQL Server 5.5\bin

           ***配置完毕后
           DOS窗口:  net start mysql           启动mysql服务器
	              net stop  mysql           关闭mysql服务器
           ****如果不是以管理员身份来输入上述命令,此时得到【错误5】提示

七。登录MySql服务器命令

           1.命令格式:  mysql -u用户名  -p密码

八。数据库管理:

           1.MySql服务器管理数据库位置:C:\ProgramData\MySQL\MySQL Server 5.5\data

       2.查看所有的数据库名   show databases;

       3.创建一个数据库       create database 数据库名;

       4.删除一个数据库       drop database 数据库名;

九。表文件管理:

           1. 查看指定的数据库下所有的表文件名
                                 USE  数据库名;
				 show tables;

           2.在指定的数据库下创建表文件
                                 use  数据库;
				 create table 表文件名(
				     字段名  数据类型名,
				     字段名  数据类型名  #最后一个字段不要以","
				 
				 )

           3.删除一个表文件
                                drop table 表文件名;

           4.查看表文件字段信息
                                show  create table 表文件名;

           5.为表文件添加字段
                                alter table 表文件名  add  新字段名  数据类型名;

           6.删除表文件字段
                                alter table 表文件名  drop 字段名;

十。表文件数据行管理:

           1.插入命令: 负责要求MySql服务器向指定的表文件添加数据行

                     insert into 表文件名(字段名1,字段名2,字段名3)
		     values(值1,值2'值3');



           2.查询命令: 负责要求MySql服务器将指定的表文件数据行展示

                     select  *  from 表文件名;

           3.删除命令:负责要求MySql服务器将指定的表文件数据行删除

                     delete  from 表文件名; #删除表文件中所有的数据行

		     delete  from 表文件名  where 判断条件; #将满足条件的数据行进行删除

           4.更新命令:负责要求MySql服务器将指定的表文件数据行更新

                      update 表文件名 set 字段名=值,字段名2=值 ;将所有数据行指定字段的值赋值新值

		      update 表文件名 set 字段名=值,字段名2=where 判断条件; 将满足条件的数据行字段信息更新

十一。高级插入命令:

           1.一次性向表文件插入多行数据
                  INSERT INTO 表文件名(字段1,字段2,字段3)
		  values
		  (值1,值2,值3),
		  (值10,值20,值30);

           2.简化版插入命令。如果插入数据时每一个字段都能赋值,此时插入命令不需要指定
         字段名,插入值顺序此时需要与表文件字段顺序保持一致

	          insert into 表文件名 values(值1,值2,值3)

           3.数据行备份命令:可以将表A中数据行复制到表B,(表A与表B字段结构完全一致)

                  insert into B  select  * from A

十二。表文件备份命令: 将表文件A进行一份备份,备份生成的表文件B

                     create table B select * from A

十三。mysql服务器字符串类型:

  1.分类: varcharchar

  2.区别:【面试】

           varchar(m): 定长可变字符串

                   定长: 当前字段可以存储的字符个数是固定的

		           ename  varchar(3)  # 3表示ename字段可以存储3个英文字符或则3个中文
                       可变: ename字段在硬盘上存储字符空间可以根据实际情况进行【缩小】
		            ename varchar(3)
			    insert into test1 values('abc')  #硬盘  【a】【b】【c】
			    insert into test1 values('ef')   #硬盘  【e】【f】

          char(m):    定长不可变字符串

                  定长: 当前字段可以存储的字符个数是固定的
		         sex char(1)    #1表示sex字段可以存储1个英文字母或则1个中文
                      不可变:
		          sex字段在硬盘上存储字符空间是固定的

			  sex char(3)
			  insert into test1 values('abc')   【a】 【b】 【c】
			  insert into test1 values('ef')    【e】 【f】 【空格】

			  针对char类型字段进行数据读取时,MySql服务器自动将字符串中【结尾处
			  空格去掉】

                       如果插入字符串以空格结尾,不要添加到由char类型修饰的字段

十四: 约束:

       1.非空约束: 要求管理的字段不能存储null2.唯一性约束:要求管理的字段存储值不能有重复,但是可以存储null3.主键约束:  管理主键字段,要求主键字段内容不能为null同时也不能出现重复值

   4.外键约束:   管理外键字段,要求外键字段的值应该来自于关联的一方表中主键字段的值
                                但是可以存储nullALTER TABLE 多方表
		  ADD CONSTRAINT  外键约束对象名  foreign key(外键字段名)
		  REFERENCES  一方表(主键字段)

十五。索引(index)

      1.查询速度问题:
                 由于表文件存放数据行会随着时间推移,会越来越多。
		 where命令在执行时需要对表文件所有数据行进行遍历
		 所以时间越久,数据行越大,where命令执行时消耗时间就会不断增加

      2.索引作用:
                 在表文件数据行增加时候,不会大幅度降低查询语句执行效率
		 

      3.索引工作原理:
                  数据1 【100,80,45,50,90,200,17】  17
		  数据2 【17,45,50,80,90,100,200】  17
		  分别从两组数据得到最小值,通过实验发现
		  从【数据2】得到最小值消耗时间相对较少
		  从【数据1】进行判断判断时
		  首先,将数据进行一次排序
		  然后,根据排序顺序定位最小值
		  由于【数据2】事先排好了顺序。因此直接
		  从第一位抓取数据,避免排序过程,因此执行效率高

		  索引工作原理,事先将字段中内容进行排序,在WHERE
		  命令进行定位时,避免对表中所有的数据行进行遍历
		  将会提升查询速度

      4.索引管理:

                 1)将字段内容交给某个索引进行管理

		   create index 索引名  on 表名(字段)

                     2)查询表文件关联的索引

		    show index from 表名
		    ***在为表文件绑定【主键约束】,【唯一性约束】,【外键约束】时
		       mysql服务器自动将当前字段数据进行排序并交给指定索引管理

                     3)删除表文件指定索引
		    DROP INDEX 索引名 ON 表名

十六。执行计划(explain)

         1.命令格式:   explian  查询语句

     2.命令作用:  展示当前查询得到结果是否通过索引来进行定位
                    DBA通过执行计划了解在本次查询过程,是否使用预先创建好的索引

         3.执行计划对于查询语句执行效率判断

                     1)在执行计划中,通过type属性展示查询语句执行效率
		     2)执行效率分类:[慢----快]

		         ALLWHERE对表文件所有数据行进行遍历,才得到了查询结果
			      这种级别查询语句,随着数据行增加导致执行速度大幅度
			      降低(DBA来说,极力避免这种级别查询)

                             type:WHERE对表文件所有数据行进行遍历,只不过在SELECT
			      抓取字段内容时,从索引中抓取。
			      这种级别虽然在抓取数据速度有所提升,但是依然面对
			      随着数据行增加导致执行速度大幅度(DBA来说,极力避免这种级别查询)

			      select * from emp ;   # all
			      create index ename_index on emp(ename)
			      select ename from emp; #type,此时对于查询速度提升是非常微小

                             range:WHERE不会对表文件数据行进行遍历,而是直接从索引得到
			       定位的数据行行数,将大幅度提升查询效率。
			       这是DBA进行SQL优化时要保证最低级别。但是这种级别存在[不稳定性]
			       当字段内容发生变化时,导致索引失效
			        explain select * from emp where sal<=1000  # all         14

				create index sal_index on emp(sal)

				explain select * from emp where sal<=1000 # range        2

				****mysql服务器如果发现从索引得到数据行行数达到了表文件总行数
				    1/3时,此时考虑运行成本问题此时放弃使用索引
				    explain select * from emp where sal<=1250 # all      14
			       
                              ref:   WHERE不会对表文件数据行进行遍历,而是直接从索引得到
			         定位的数据行行数,同时在这种情况根据定位条件一次只能
				 得到一个数据行,属于比较稳定执行效率.DBA努力达到的优化
				 程度

                              const: 根据主键字段上索引进行定位,是执行效率最快的。但是
			         在实际使用过程中,几乎不会被用到的。

十七:视图

   1.定义:
            是MySql服务器中一个对象,用于存储查询语句。
	目的提供查询语句使用效率,避免在多处地方
	重复性开发相同查询语句

   2.命令:

            1)将查询语句交给一个视图对象管理

	   CREATE VIEW  视图对象名  AS  查询语句

            2)通过视图对象调用管理查询语句

	   select *  from 视图对象名
    3.额外功能:
          视图对象存储一个查询语句,同时视图对象拥有对
	  当前查询语句关联的表文件操作能力

	 1)通过视图对象对关联表文件数据行进行插入
	 2)通过视图对象对关联表文件数据行进行删除
	 3)通过视图对象对关联表文件数据行进行更新

    4.视图作用:【面试】

          1)提高了查询语句复用性,避免了在多处地方重复进行查询语句开发行为

	  2)隐藏业务中涉及表关系,开发人员通过视图进行操作时是不会知道其具体
	     操作的表

十八。存储引擎:

    1.定义:
         是MySql服务器对应表文件内容管理方式。目前MySql服务器主要采用
	 INNODB,MyIsam

    2.管理命令:


          1)查看MySql服务器支持存储引擎种类

	     show engines;

              2)修改MySql服务器默认存储引擎

	   C:\Program Files (x86)\MySQL\MySQL Server 5.5\my.ini下
	   default-storage-engine=INNODB  进行修改 myIsam

              3)设置表文件依赖存储引擎

	    show create table 表名;

	    alter table 表名  engine=存储引擎

     3.MyIsam存储引擎特征:


          1.在对表文件内容进行修改时,不会进行备份操作。
	    提高操作执行效率,但是在操作完毕后无法取消本次操作

              2.MyIsam存储引擎 使用三个文件存储表文件信息

	     test1.frm : 存储表文件字段信息
	     test1.myd : 存储表文件数据行信息
	     test1.myi : 存储表文件字段关联的索引信息

     4.INNODB存储引擎:

          1.在对表文件内容进行修改时,首先进行一次备份。
	    在进行操作,因此执行效率相对较慢。
	    但是在执行完毕后,由于有备份存在,可以使用
	    备份取消当前操作,增加数据安全性

              2.INNODB存储引擎,使用一个文件存储表文件信息

	     test1.frm: 存储表文件字段信息
	                存储表文件数据行信息
			存储表文件字段关联的索引信息 

十九:事务(transaction)

    1.介绍:
        事务是MySql服务器提供一个管理对象,用于对当前表文件备份进行管理


    2.使用:

        start transaction; #通知MySql服务器提供一个事务对象,这个事务对象对接下来操作产生所有备份进行管理

	delete from emp where deptno=30 # 生成emp.bak

	delete from dept where deptno=30 #声明dept.bak

	rollback;   #通知mysql服务器将本次操作中所有备份信息覆盖到表文件,来取消本次操作

	commit;     #通知mysql服务器将本次操作中生成所有备份信息进行删除,称之为提交操作