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.分类: varchar 与 char
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.非空约束: 要求管理的字段不能存储null值
2.唯一性约束:要求管理的字段存储值不能有重复,但是可以存储null值
3.主键约束: 管理主键字段,要求主键字段内容不能为null同时也不能出现重复值
4.外键约束: 管理外键字段,要求外键字段的值应该来自于关联的一方表中主键字段的值
但是可以存储null值
ALTER 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)执行效率分类:[慢----快]
ALL:WHERE对表文件所有数据行进行遍历,才得到了查询结果
这种级别查询语句,随着数据行增加导致执行速度大幅度
降低(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服务器将本次操作中生成所有备份信息进行删除,称之为提交操作