MySQL零基础开始学

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.


















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值