MySql数据库服务器
1、服务器:
1、服务器是软件,不是硬件,不是计算机
2、不同服务器负责调用不同的文件类型
2、表文件,数据库,数据库服务器
1、表文件:
1)表文件是以“.frm"结尾的一种文件
2)存在于服务端计算机硬盘上
3)以数据行形式进行数据存储的文件
2、表文件结构:
student.frm
标题行: sid sname sex age home
数据行:10 Mike 男 20 河南
。。。。。
3、数据库:
开发人员将用于存放表文件的文件夹称为【数据库】
4、数据库服务器:
一种专门对表文件进行调用和管理的软件
3、SQL命令:
1、全称:struct query language 结构化查询编程语言
2、作用:用户通过SQL命令向数据库服务器发送请求,用于对表文件进行调用管理
3、特点:SQL语法结构与中国人日常用语结构非常相似,包含主调宾
4、数据库服务器:
1、关系型数据库服务器:
管理的表文件彼此之间往往具有隶属关系特征,可以完整描述一段数据
查询时由于涉及数据较多,因此查询速度并不理想
2、非关系型数据库服务器【HashMap(key-value)】:
管理表文件首饰独立,无法描述一段完整的数据
但是由于每次查询的大数据较少,因此查询速度非常快
5、关系型数据库服务器分类:
1、甲骨文公司:Oracle,MySQL
2、微软公司:SQLserver
6、MySQL服务器启动与关闭:
1、通过windows系统帮助启动与关闭mysql服务器
dos窗口输入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】提示
7、登录: mysql -uroot -p密码
1、查看所有的数据库: show databases;
2、创建数据库: create database test2;
3、删除数据库: drop database test2;
8、表文件管理:
1、查看指定的数据库下所有的表文件名:
use 数据库名;
show tables;
2、在指定的数据库下创建表文件:
use 数据库名;
create table 表文件名(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型 最后一个不加“,”
)
3、删除一个表文件:
drop table 表文件名;
4、查看表文件字段信息:
show create table Xinxi; (这个比较详细)
desc Xinxi; 查看表结构(这个比较直观)
5、为表文件添加字段
alter table 表文件名 add 新字段名 数据类型名;
6、删除表文件字段
alter table 表文件名 drop 字段名;
9、表文件数据行管理:
1、插入命令:负责要求mysql服务器向指定的表文件添加数据行
insert into 表文件名(字段名1,字段名2,varchar)
values(值1,值2, '单引号')
2、查询命令:负责要求mysql服务器将指定的表文件数据进行展示:
select * from 表文件名;
3、删除命令:负责要求mysql服务器将指定的表文件数据进行删除
delete from 表文件名; 删除全部数据
delete from 表文件名 where 判断条件; 将满足条件的数据进行删除
4、更新命令:负责要求mysql服务器将指定的表文件数据行更新
update 表文件名 set 字段名= 值,字段名2 = 值;
将所有数据行指定字段的值赋值新值
update xinxi set age = age+3;
所有age都加三
update 表文件名 set 字段名= 值 where 判断条件;
指定条件下数据行的更新
10、高级插入命令:
1、一次性向表文件插入多行数据:
insert into 表文件名(字段1,字段2,字段3)
values
(值1,值2,值3),
(值4,值5,值6);
2、简化版插入命令:
如果插入数据时每一个字段都能赋值,此时插入命令不需要指定字段名,
插入值顺序与表文件字段顺序保持一致
insert into 表文件名 values(值1,值2,值3);
注意:这里是values,不是value
3、数据行赋值命令,可以将表A中数据复制到表B(表A与表B字段结构完全一致)
insert into B select * from A;
12、表文件备份命令:
将表文件A进行一份备份,备份生成的表文件B
create table B select * from A;
13、逻辑运算;
and 与运算符 相当于java中的&&
or 或运算符 相当于java中的 ||
select * from emp where job= 'salesman' and sal > 1000;
14、mysql服务器字符串类型:
1、分类: varchar char
2、区别:
varchar(m): 定长可变字符串
定长:当前字段可以存储的字符个数是固定的,
ename varchar(3) # 3表示ename字段可以存储3个英文字符或者三个中文
可变:ename字段在硬盘上存储字符空间可以根据实际情况进行【缩小】
ename varchar(3)
insert into test1 values('abc') 硬盘 [a] [b] [c]
insert into test 1 values('ab') 硬盘 [a] [b]
char(m) : 定长不可变字符串
定长:当前字段可以存储的字符个数是固定的
sex char(1) 表示sex字段可以存储一个英文字母或一个中文
不可变:sex字段在硬盘上存储空间是固定的
insert into test1 values('abc') 硬盘 [a] [b] [c]
insert into test 1 values('ab') 硬盘 [a] [b] [空格]
针对char类型字段进行数据读取时,mysql服务器自动将字符串中结尾处空格去掉
如果插入的字符串以空格结尾,就不要将该字符串用char修饰,否则结尾的空格会被抹去
15、日期类型,时间类型
16、约束:
1、非空约束:要求管理的字段不能存储null值
2、唯一性约束:要求管理的字段存储值不能重复,但是可以储存null值
3、主键约束:管理主键字段,要求主键字段内容不能为null,同时也不能出现重复值
4、外键约束:管理外键字段,要求外键字段的值应该来时于关联一方表中字段的值
可以存储null值
(修改表)alter table 多方表
add constraint(约束的意思) 外键约束对象名 foreign key(外键字段名称)
reference 一方表(主键字段)
17、索引(index)
1、查询速度问题:
由于表文件存放数据行会随着时间推移,会越来越多
where命令在执行时对表文件多有数据行进行遍历
所以时间越久,数据行越大,where命令执行时消耗时间就会不断增加
2、索引作用:
在表文件数据行增加的时候,不会大幅度降低查询语句执行效率
3、索引的工作原理:
数据1【100,60,45,23,57,12,200】 12
数据2 【12,23,34,45,56,67,78】12
分组得到最小值:12
从数据二种消耗时间较少
数据1,先进行排序,然后根据排序位置,定位最小值
数据2,由于事先排好了顺序,直接从第一位抓取数据,因此效率高
原理:事先将字段中内容进行排序,在where命令进行定位时,避免对表中所有的数据进行遍历
将会提升查询速度
4、索引管理:
1)将字段内容交给某个索引进行管理
create index 索引名 on 表名 (字段)
2)查询表文件关联的索引
show index from 表名
在为表文件绑定【主键约束】,【唯一性约束】,【外键约束】时
mysql服务器自动将当前字段数据进行排序并交给指定索引管理
3)删除表文件中指定的索引
drop index 索引名 on 表名
18、执行计划
1、命令格式:explain 查询语句
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, 此时对于查询速度提升非常渺小
rang:
where 不会对表文件数据行进行遍历,而是直接从索引得到定位的数据行行数
将大幅度提升查询效率
这是DBA进行SQL优化时保证的最低级别,但是这种级别存在不稳定性
当字段内容发生变化时,导致索引失效
explain select * from emp where sal < 1000 是ALL 14条记录筛选
create index sal_index on emp #range 2
mysql服务器如果发现从索引到数据行行数达到了表文件总行数的1/3时
此时考虑运行成本问题,放弃使用索引
explain select * from emp where sal <= 1250 #all 此时索引失效
ref:
where 不会对表文件数据行进行遍历,而是直接从索引得到定位的数据行行数
同时在这种情况根据定位条件一次只能得到一个数据行,属于比较稳定执行效率
DBA努力达到的优化程度
const :
根据主键字段上的索引进行定位,是执行效率最快的,但是实际使用过程中,几乎不会被用到
19、视图:
1、定义:
是mysql服务器中的一个对象,用于存储查询语句
目的提供查询语句使用效率,避免在多处地方重复性开开发相同查询语句
提高了查询语句的使用率,降低了开发难度
2、命令:
1)将查询语句交给一个视图对象管理
create view 视图对象名 as 查询语句
2)通过视图对象调用管理查询语句
select * from 视图对象名
3、额外功能:
视图对象存储一个查询语句,同时视图对象拥有对当前查询语句关联的表文件操作能力
1)通过视图对象对关联表文件数据行进行插入
2)通过视图对象对关联表文件数据行进行删除
3)通过视图对象对关联表文件数据行进行跟新
4、视图作用【问答】
1)提高了查询语句复用性,避免了在多处地方重复进行查询语句开发行为
2)隐藏业务涉及表关系,开发人员通过视图进行操作时是不会知道其具体操作的表
20、存储引擎:
1.定义:
是mysql服务器对应表文件内容管理方式,目前mysql服务器主要采用,INNOB,MyIsam
2、管理命令:
1)查看mysql服务器支持存储引擎种类:
show engine(引擎)
2)修改mysql服务器默认存储引擎
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
default-storage-engine=INNODB
直接修改
default-storage-engine=myisam
3) 设置表文件依赖存储引擎
show create table 表名;
alter table 表名 engine = 存储引擎名字
4)Myisam存储引擎特征:
1、在对表文件内容进行修改时,不会进行备份操作
提高操作执行效率,但是在操作完毕后无法取消本次操作
2、MyIsam存储引擎,使用三个文件存储表文件信息
test1.frm : 存储表文件字段信息
test1.myd : 存储表文件数据行信息
test1.myi : 存储表文件字段关联的索引信息
5)InnoDB存储引擎
1、在对表内容进行修改时,首先进行一次备份,在操作时,执行效率相对较慢
但是在执行完毕后,由于有备份存在,可以使用备份取消当前操作,增加数据安全性
2、InnoDB存储引擎,使用一个文件存储表文件信息
test.frm: 存储表文件字段信息
存储表文件数据行信息
存储表文件字段关联的索引信息
21、事务:
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服务器将本次操作中生成所有备份信息进行删除,称之为提交操作
版权声明:本文为qq_44707513原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。