1、 什么是数据库
数据库是一个长期存储在计算机内的,有组织的、有共享的、统一管理的数据集合。
2、数据库的分类
数据库分为三种:层次式数据库、网络式数据库和关系型数据库,不同的数据库按不同的数据结构来联系和组织。
3、数据类型
常用的数据类型有:整数数据类型、浮点数数据类型、精确小数类型、二进制数据类型、日期/时间数据类型、字符串数据类型。
3、sql语言
对数据库进行查询和修改操作的语言叫做SQL。SQL的含义的是结构化查询语言(Structured Query Languate)。
4、MySQL的优势
MySQL的主要优势如下:
(1)速度:运行速度快
(2)价格:MySQL对大多数个人来说是免费的
(3)容易使用:与其他大型数据库的设置的和管理相比,其复杂成都较低,易于学习。
(4)可移植性:能够工作在众多不同的系统平台上,列如:Windows、Linux、Unix、MacOS等。
(5)丰富的接口:提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等语言的API。
(6)支持查询语言:M有SQL可以利用SQL语法和支持ODBC(开放式数据库连接)的应用程序。
(7)安全性和连接性:十分灵活和安全的权限和密码系统,允许给基于主机的验证。连接到服务器时,所有密码传输均采用加密形式,从而保证了密码的安全。并且由于MySQL是网络化的,因此可以在因特网上的任何地方访问,提高数据共享的效率。
5、存储引擎比较、
如果要提提交,回滚和崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB收个很好的选择。如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率;如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果。如果只有INSERT和SELECT操作,可以选择Archive引擎,Archive存储引擎支持高并发的插入操作,但是本身并不是事物安全的,Archive存储引擎非常适合存储归档数据,如记录日志信息可以使用Archive引擎。
使用哪一种引擎要根据需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求
,使用合适的存储引擎,将会提高整个数据库的性能。
6、常用的sql命令
修改表明:alter table 原表明 RENAME 新表明
修改字段数据类型:alter table 表名 MODIFY 字段名 字段类型
修改字段名称:alter table 表名 CHANGE 原字段名 新字段名 字段类型
添加新列:alter table 表名 ADD 字段名 数据类型 约束条件 [FIRST|(添加到第一列)|AFTER添加到指定列之后]
删除列:alter table 表名 DROP 字段名
调整字段的排列位置:alter table 表名MODIFY 字段 数据类型 FIRST|AFTER 字段
修改表的存储引擎:alter table 表名 ENGINE = 引擎名称
删除表的外键约束:alter table 表名 DROP FOREIGN KEY 关联表主键名
删除表:drop table 表名
注意:数据表之间存在外键关联的情况下,如果直接删除父表,结果会显示失败。原因是直接删除,将破坏表的参照完整性。如果必须要删除,可以先删除与它关联的子表,再删除父表,只是这样同时删除两个表中的数据,但有的情况下可能要保留子表,这时如果要单独删除父表,只需要将关联的表的外键约束条件取消,然后就可以删除父表。
7、MySQL数据类型
MySQL支持多种数据类型,只要有数值类型,日期/时间类型和字符串类型。
(1)数值数据类型:包括整数类型 TINYINT、SMALLINT、MEDIUMINT、INT 、BIGINT、浮点小数数据类型FLOAT和DOUBLE、定点小数类型DECIMAL。
(2)日期/时间类型:包括YEAR、TIME、DATA、DATATIME和TIMESTAMP。
(3)字符串类型:包括CHAR、VARCHAR BINARY 、VARBINARY、BLOB、TEXT、ENUM和SET等。
8、MySQL查询语句
MySQL 从数据库中查询数据的基本语句是select语句。
查询所有数据:select * from 表名;
查询指定列数据:select 字段1,字段2... from 表名;
查询指定记录: select 字段1,字段2... from where 查询条件;
between and 范围查询:select * from 表名 where 字段名 between 最小值 and 最大值;
in 限定范围查询:select * from 表名 where 字段 in (指定值1,指定值2);
liek匹配:select * from 表名 where 字段 like '%(任意长度字符)|_(一个下划线表示一个字符)'; PS:z%以z开头 %z以z结尾 %z%包含z
查询空值:select * from 表名 where 字段 is null ; 非空is not null;
and多条件查询:select * from 表名 where 条件1 and 条件2 and 条件2.......;
or多条件查询:select * from 表名 where 条件1 or 条件2 or 条件3......;
查询结果不重复:select distinct 字段名 from 表名;
排序:select * from 表名 order by 字段1,字段2 asc(升序)或者desc(降序);
先根据字段1指定方向排序,再根据字段2指定方向排序:select * from 表名 order by 字段1 排序方向,字段2 排序方向;
分组查询:,合并结果:select s_id,group_concat(字段) as 别名 from 表名 group by 字段 havig 限定条件;
使用函数查询:select 字段1,函数(字段) as 别名 from 表名 条件;
inner join 内部连接语法结构:select 字段1,字段2.... from 表1 inner join 表2 on 条件;
自连接语法结构:select 逻辑表1.字段1,逻辑表2.字段2 from 表1 as 逻辑表1,表2 as 逻辑表2 where 逻辑表1.字段n = 逻辑表2.字段n and 逻辑表.字段 = 值;
左连接语法结构:select 表1.字段1,字段2,字段3 from 表1 left outer join 表2 on 条件;
右连接语法架构:select 表2.字段,字段1,字段2..... from 表1 right outer join 表2 on 条件;
子连接语法结构:select 字段1,字段2.... from 表 where 条件1 and (子查询any|all|exusts|in)(子查询语句);
MySQL索引
索引的优点主要以下几点:
(1)创建唯一索引,保证数据唯一性。
(2)加快数据查询速度也是主要原因。
(3)加速表与表之间的连接。
(4)使用分组和排序子句进行数据查询时,可以减少查询中分组和排序的时间。
不利点:
(1)创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
(2)占磁盘空间。
(3)当对表中数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
MySQL的索引分类
普通索引和唯一索引:
(1)普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。
(2)唯一索引,索引的值必须是唯一的,但允许有空值,如果是组合索引,则列值的组合必须唯一,主键索引是一种特殊的唯一索引,不允许有空值。
单列索引和组合索引
(1)单列索引即是一个索引只包含单个列,一个表可以有多个单列索引。
(2)组合索引指在表的多个字段组合上创建索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。使用组合索引时遵循最左前缀集合。
全文索引:
(1)全文索引可以在char、varchar或者text类型的类型上创建。MySQL只有MyISAM存储引擎的时候支持全文索引。
设计索引时,应该考虑一下准则:
(1)索引并非越多越好。一个表中如果有大量索引,会影响insert、delete、update等语句的性能,因为表中数据更改时,索引也会进行调整和更新。
(2)避免对经常更新的表进行过多的索引,并且索引中的列尽可能少。对经常用于查询的字段应该创建索引,但要避免添加不必要的字段。
(3)数据量小的表最好不要用索引。由于数据比较少,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化效果。
(4)在条件表达式中经常用到的不同值较多的列上建立索引,在不同值少的列上不要建立索引。
(5)当唯一性是某种数据本身的特性时,指定唯一索引。使用唯一索引需能确保定义得列的数据完整性,以提高查询速度。
(6)在频繁进行排序或者分组(即进行group bu 或 order by 操作)的列上创建索引,如果待排序得列有多个,可以在这些列上建立组合索引。
MySQL的语法结构
创建索引语法结构:create table 表名(字段1,字段2.。。。)unique|index|dulltext index 索引类型(对应字段);
在已有的表添加索引:alter table 表名 add 索引类型 索引名(字段);
创建索引:alter 索引类型 索引名 on 表名(字段);
删除索引:alter table 表名 drop 索引类型 索引名;
删除索引:drop 索引类型 索引名 on 表名;、
单表创建视图:create view 视图名称(视图中的字段名1,字段2.。。) as select 字段1,字段2.。。。from 表名 where 条件;
多表创建视图:create view 视图名称(视图中的字段名,字段2.。。。) as select 字段1,字段2.。。。 from 表1,表2 where条件(也可以使用连接查询);
修改原有视图:create or replace view 视图名(字段。。。。) as select 字段1,字段2.。。。。 from 表1,表2 where 条件也(也可以使用连接查询);
alter 修改视图:alter view 视图名(字段名。。。) as 查询语句;
删除视图:drop view if exists 视图名;
点拨:MySQL中视图和表的区别及联系是什么?
两者之间关系:
(1)视图是已经编译好的sql语句,是基于sql语句的结果集的可视化得表,而表不是。
(2)视图没有实际的物理记录,而基本表有。
(3)表是内容,视图是窗口。
(4)表占用物理空间而视图不用占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但是视图只能用创建的语句来修改,
(5)视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些sql语句的集合。从安全的角度来说,视图可以防止用户接触数据表,因而用户不知道表结构。
(6)表属于全局模式中的表,是实表,视图属于局部模式的表,是虚表.
(7)视图的建立和删除只影响试图本身,不影响对应的基本表。
两者之间的联系:
视图是在基本表之上建立的表,它的结构和内容都来自基本表,它依据基本表存在而存在,一个视图可以对应一个基本表,也可以对应对个基本表。视图是基本表的抽象在逻辑意义上建立的新关系。
创建用户语法:
(1)crteate user '用户名'@'host' identified by '密码' ;ps:创建的用户无权限
(2)grant 权限(all是所有权限) on db.table (*.*表示所有) to '用户名'@'host' idetified by '密码' where grand option(赋予创建用户权限);
(3)删除用户:drop user ‘用户名'@'host';
(4)修改当前用户密码:set password = password('新密码');
(5)修改其他用户密码:set password for '用户名'@'host' identified by '新密码';
推荐使用grant语句修改密码:
(1)语法格式:grant usage on db.table to '用户名'@'host' identified by '新密码';
远程连接数据库,用户的host地址设置为%,远程连接命令:mysql -u用户名 -p密码 -h主机地址;
数据库备份命令:mysqldump -u 用户名 -p密码 数据库名称 > 文件保存路径.sql;
数据库某个表备份命令:mysqldump -u 用户名 -p密码 数据库名称 表名 > 文件保存路径.sql;
恢复数据:mysql -u用户名 -p密码 数据库名 < 数据库文件路径.sql;
MySQL性能优化:
(1)尽量使用具有唯一标示的字段进行查询。
(2)如果是字符串,能用=号的尽量使用=号,不要过多的使用like语句。
(3)连接查询中不要使用子查询,全部使用连接查询(内连接\左连接\右连接\自连接)
(4)对经常查询的表的某列/多列建立索引,提高查询效率。
(5)对数据库进行分区,分表。
(6)搭建数据库集群、分布式数据库。
(7)对数据库进行读写分离。
(8)提高服务器硬件处理能力。
(9)根据硬件配置设置MySQL服务的配置文件my.ini/my.cnf.