mysql基础介绍

   日期:2020-09-09     浏览:107    评论:0    
核心提示:mysql学习数据库学习分为三个阶段:基础阶段:mysql数据库的基本操作(增删改查),以及一些高级操作(视图,触发器,函数,存储过程等)优化阶段,如何提高数据库效率,如索引,分表等部署阶段:如何搭建真实的环境系统,如服务器集群,负载均衡等数据库基础什么是数据库?数据库:database,存储数据的仓库数据库:高效的存储和处理数据的介质(介质主要是两种:磁盘和内存)数据库的分类?数据库基于存储介质的不同:进行了分类,分为两类:关系型数据库(SQL)和非关系型数据库

mysql学习

数据库学习分为三个阶段:

  1. 基础阶段:mysql数据库的基本操作(增删改查),以及一些高级操作(视图,触发器,函数,存储过程等)

  2. 优化阶段,如何提高数据库效率,如索引,分表等

  3. 部署阶段:如何搭建真实的环境系统,如服务器集群,负载均衡等

数据库基础

  1. 什么是数据库?

    数据库:database,存储数据的仓库

    数据库:高效的存储和处理数据的介质(介质主要是两种:磁盘和内存)

  2. 数据库的分类?

    数据库基于存储介质的不同:进行了分类,分为两类:关系型数据库(SQL)和非关系型数据库(NoSQL)

  3. 关系型数据库

    ​ 大型: Oracle,DB2

    ​ 中型: SQL-SERVER, Mysql等

    ​ 小型: access等

    非关系型数据库: memcached,mongodb,redis(同步到磁盘)

  4. 两种数据库的区别?

    关系型数据库:安全(保存磁盘基本不可能丢失),容易理解,比较浪费空间(二维表)

    非关系型数据库:效率高,不安全(断电丢失)

关系型数据库

  1. 什么是关系型数据库?

    关系型数据库:是一种建立在关系模型(数学模型)上的数据库

    关系模型:一种所谓建立在关系上的模型,关系模型包含三个方面:

    ​ 数据结构:数据存储的问题,二维表(有行和列)

    ​ 操作指令集合:所有SQL语句

    ​ 完整性约束:表内数据约束(字段与字段),表与表之间约束(外键)

  2. 关系型数据库的设计?

    关系型数据库:从需要存储的数据需求中分析,如果是一类数据(实体)应该设计成一张二维表:表是由表头(字段名:用来规定数据的名字)和数据部分组成(实际存储的数据单元)

    二维表:行和列

    表头 字段名1 字段名2
    数据单元 数据1 数据2

    关系型数据库:维护实体内部,实体与实体之间的联系

    关系型数据库的特点之一:如果表中对应的某个字段没有值(数据),但是系统依然要分配空间:关系型数据库比较浪费空间

关键字说明

数据库:database

数据库系统:DBS(Database System):是一种虚拟系统,将多种内容关联起来的称呼

DBS = DBMS + DB

DBMS:Database Management System 数据库管理系统,专门管理数据库

DBA: DataBase Administrator,数据库管理员

行/记录:row/record,本质是一个东西:都是指表中的一行(一条记录):行是从结构角度出发,记录是从数据角度出发

列/字段:column/field,本质是一个东西

SQL

SQL:Structured Query Language,结构化查询语言

SQL分为三个部分

  • DDL:Data Definition Language,数据定义语言,用来维护存储数据的结构(数据库,表),代表指令:create,drop,alter等
  • DML:Data Manipulation Language,数据操作语言,用来对数据进行操作(数据表中的内容),代表指令:insert,delete,updata等;其中DML内部又单独进行了一个分类:DQL(Data Query Language:数据查询语言,如select)
  • DCL:Data Control Language,数据控制语言,主要是负责全县管理(用户),代表指令:grant,revoke等

SQL是关系型数据库的操作指令,SQL是一种约束,但不是强制,不同数据库可能内部有一定区别;

Mysq1数据库是一种c/s结构的软件:客户端/务端,若想访问服务器必须通过客户端(服务
器一直运行,客户端在需要使用的时候运行)
交互方式

  1. 客户单连接认证:连接服务器,认证身份:

  2. 发送SQL指令

  3. 服务器接收SQL指令:处理SQL指令:返回操作结果

  4. 客户端接收结果:显示结果

  5. 断开连接(释放资源:服务器并发限制)

    exit quit \q

Mysql服务器对象

没有办法完全了解服务器内部的内容:只能粗略的去分析数据库服务器的内部的结构
将mysq1服务器内部对象分成了四层:系统DBMS)一数据库(DB)数据表(Table)→字段(field)

SQL基本操作

基本操作:CRUD
将SQL的基本操作根据操作对象进行分类, 分为三类:库操作, 表操作(字段) , 数据操作

库操作

对数据库的增删改查.

新增数据库

基本语法
Create database 数据库名字 【库选项】;

库选项:用来约束数据库,分为两个选项
字符集设定:charset/character set具体字符集(数据存储的编码格式)
校对集设定:collate具体校对集(数据比较的规则)

其中:数据库名字不能用关键字(已经被使用的字符)或者保留字(将来可能会用到的)

如果非要使用关键字或者保留字,那么必须使用反引号(``)

当创建数据库的SQL语句执行之后, 发生了什么?

  1. 在数据库系统中,增加了对应的数据库信息
  2. 会在保存数据的文件夹下:Data目录, 创建一个对应数据库名字的文件夹
  3. 每个数据库下都有一个opt文件:保存了库选项(校对集依赖字符集)

查看数据库

  1. 查看指定部分的数据库:模糊查询
    Show databases like ‘pattern’;pattern是匹配模式
    %:表示匹配多个字符
    _ :表示匹配单个字符

要注意%和_作为搜索字符需要进行转义

  1. show create database mydatabase 数据库在执行SQL语句之前会优化语句,保存的是优化之后的语句

更新数据库

数据库名字不可以修改.
数据库的修改仅限库选项:字符集和校对集(校对集依赖字符集)
Alter database 数据库名字 [库选项] ;
Charset/character set [=] 字符集
Collate 校对集

删除数据库

所有的操作中:删除是最简单的

Drop database 数据库名字

表操作

新增数据表

Create table[if not exists] 表名(
字段名字 数据类型,
字段名字 数据类型 --最后一行不需要逗号
)[表选项];
If not exists:如果表名不存在, 那么就创建, 否则不执行创建代码:检查功能
表选项:控制表的表现
字符集:charset/character set 具体字符集; --保证表中数据存储的字符集
校对集:collate 具体校对集;
存储引擎:engine 具体的存储引擎(innodb和myisam)

当创建数据表的SQL指令执行之后, 到底发生了什么?

1.指定数据库下已经存在对应的表

2.在数据库对应的文件夹下,会产生对应表的结构文件(跟存储引擎有关系)

会有.frm文件,就是表的结构文件

查看数据表

show tables;

show tables like ‘pattern’ 如果要使用模糊查询,最好指定前面的内容,不然索引会失效,导致查询效率变低

show create table 表名; \g等价于; \G将查到的 结构旋转90度变成纵向

desc/describe/show columns from 表名; 查看表中的字段信息

修改数据表

表本身存在,还包含字段:表的修改分为两个部分:修改表本身和修改字段

修改表本身

表本身可以修改:表名和表选项

修改表名:rename 旧表名 to 新表名

修改表选项:字符集,校对集和存储引擎

alter table 表名 表选项 【=】值

修改字段

字段操作很多:新增,修改,重命名,删除

新增字段

alter table 表名 add[column] 字段名 数据类型 [列属性] [位置]

位置:字段名可以存放表中的任意位置

​ first:第一个位置

​ after:在哪个字段之后,after 字段名 默认的是在最后一个字段之后

修改字段:修改通常是修改属性或者数据类型

alter table 表名 modify 字段名 数据类型[属性] [位置]

重命名字段

alter table 表名 change 旧字段 新字段名 数据类型 [属性] [位置]

删除字段

alter table 表名 drop 字段名

删除数据表

drop table 表名1,表名2;–可以一次性删除多张表

当删除数据表的指令执行之后发生了什么?

1.在表空间中,没有了指定的表(数据也没有了)

2.在数据库对应的文件夹下,表对应的文件(与存储引擎有关)也会被删除

数据操作

新增数据

有两种方案

方案1:给全表字段插入数据,不需要指定字段列表:要求数据的值出现的顺序必须与表中

设计的字段出现的顺序一致:凡是非数值数据,都需要使用引号(建议是单引号)包裹

Insert into表名values(值列表) [,(值列表) ] ;–可以一次性插入多条记录

方案2:给部分字段插入数据,需要选定字段列表:字段列表出现的顺序与字段的顺序无关;

但是值列表的顺序必须与选定的字段的顺序一致.

Insert into表名(字段列表) values(值列表) [,(值列表) ] ;

查看数据

select */字段 from 表名

select */字段 from 表名 where 条件

更新数据

Update 表名 set 字段 = 值 [where 条件] --建议都有where:要不就是更新全部

删除数据

delete from 表名 [where 条件];

中文数据问题

中文数据问题本质是字符集问题.

计算机只识别二进制:人类更多是识别符号:需要有个二进制与字符的对应关系(字符集)

客户端向服务器插入中文数据:没有成功

原因:\xD5\xC5\xD4\xBD 代表的是汉字在当前编码(字符集)下对应的二进制编码转换成的十六进制:两个汉字 =》四个字节(GBK)

报错:服务器没有识别对应的四个字节:服务器认为数据是UTF 8, 一个汉字有三个字节:

读取三个字节转换成汉字(失败),剩余的再读三个字节(不够):最终失败.

所有的数据库服务器认为(表现)的一些特性都是通过服务器端的变量来保存:系统先读取自

己的变量,看看应该怎么表现.

//查看服务器到底识别哪些字符集

Show character set;

Show variables like ‘character set%’;

基本上:服务器是万能,什么字符集都支持

//既然服务器识别这么多:总有一种是服务器默认和客户端打交道的字符集

show variables like ‘character_set%’;

问题根源:客户端是GBK,服务器是UTF-8,产生矛盾

解决方案:修改服务器,默认的接受字符集为GBK

set character_set_client = gbk;

插入数据成功,但是显示的还是乱码

原因:数据来源是服务器,解析数据是客户端(客户端只识别GBK)

set chatacter_set_result = gbk

设置服务器对客户端的字符集的认识:可以使用快捷方式:set names 字符集

set names gbk; ====>character_set_client,character_set_result,character_set_connection = utf-8

connection 连接层,是字符集转变的中间者,如果统一效率更高

校对集问题

校对集:数据比较的方式

校对集有三种格式

_bin:binary, 二进制比较, 取出二进制位, 一位一位的比较, 区分大小写

cs:casesensitive, 大小写敏感, 区分大小写

_ci:case in sensitice, 大小写不敏感, 不区分大小写

查看数据库所支持的校对集:show collation;

校对集:必须在没有数据之前申明,否则会修改无效

web乱码问题

动态网站由三部分构成:浏览器,apache/tomcat,数据库服务器

解决乱码:统一编码

事实上不可能,因为浏览器是用户管理,后端进行处理

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服