六天带你玩转Mysql笔记---第一天

六天带你玩转Mysql笔记---第一天

 

1.数据库的基础

1) 什么是数据库

2)数据库分类

3) 不同的数据库阵营中的产品有哪些

4)两种数据阵营的区别

1.1关系型数据库

1.1.1什么是关系型数据库

1.1.2关系型数据库的设计

1.2关键字说明

1.3SQL

1.4 Mysql数据库

1.5 Mysql服务器对象

2.SQL基本操作

2.1库操作:对数据库的增删改查

2.1.1新增数据库

2.1.2查看数据库

2.1.3更新数据库

2.1.4删除数据库

3表操作

3.1新增数据表

3.2查看数据表

3.3修改数据表

3.3.1修改表本身

3.3.2修改字段

3.4删除数据表

4.数据操作

4.1新增数据

4.2查看数据

4.3更新数据

4.4删除数据

5.中文数据问题

6.校对集

第一步:创建不同校对集表

第二步:插入数据

第三步:查看数据


1.数据库的基础

1) 什么是数据库

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

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

2)数据库分类

数据库基于存储介质的不同,可分为两类:

关系型数据库(SQL)和非关系型数据库(NoSqQL)

3) 不同的数据库阵营中的产品有哪些

关系型数据库:

l 大型:OracleDB2

l 中型:SQL-SERVERMysql

l 小型:accdss

非关系型数据库:memcachedmongodbredis(同步到磁盘)

4)两种数据阵营的区别

关系型数据库:安全(保存磁盘基本不丢失),符合人的思维习惯,容易理解

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

 

1.1关系型数据库

1.1.1什么是关系型数据库

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

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

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

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

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

 

1.1.2关系型数据库的设计

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

二维表:行和列

表头

字段名1

字段名2

数据单元

数据1

数据2

 

案例分析:分析一个教学系统,讲师负责教学,教学生,在教师教学生

(1)找出系统中所存在的实体:讲师表,学生表,班级表

(2)找出实体中应该存在的数据信息

a) 讲师:姓名,性别,年龄,工资

b) 学生:姓名,性别,学号,学科

c) 班级:班级名字,教师编号

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

 

*实体内部联系:每个学生都有姓名,性别,学号,学科信息

姓名

性别

学号

学科

年龄

陈明

Ictast0001

PHP

20

陈晶晶

Ictast0002

PHP

 

王威

 

Ictast0003

UI

 

第二行的所有字段,都是在描述陈明这个学生(内部联系);第二列只能放性别(内部约束)

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

*实体与实体之间的联系:每个学生肯定属于某个班级,每个班级一定有多个学生(一对多)

学生表

姓名

性别

学号

学科

年龄

陈明

Ictast0001

PHP

20

陈晶晶

Ictast0002

PHP

 

王威

 

Ictast0003

UI

 

 

班级表

班级名称

教室编号

PHP0810

B205

PHP0710

A203

UI0710

B330

如何将学生表和班级表关联起来?

解决方案:在学生表中增加一个班级字段俩指定班级(必须能唯一指定一个班级信息)

姓名

性别

学号

学科

年龄

班级名称

陈明

Ictast0001

PHP

20

PHP0810

陈晶晶

Ictast0002

PHP

 

PHP0810

王威

 

Ictast0003

UI

 

UI0710

 

1.2关键字说明

1)数据库:database

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

DBS = DBNS + DB

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

DBA:Database Adminstrator数据库管理员

3)行/记录row/record本质是一个东西:都是指表中的一行(一条记录)

行:是从结构角度出发

记录:是从数据结构出发

4)列/字段column/field本质是同一个东西

 

1.3SQL

1SQL:Structured Query Language结构化查询语言(数据以查询为主:99%是在查询操作)

2SQL是关系型数据库的操作指令,SQL是一种约束,但不强制:不同的数据库产品(如Oraclemysql)内部可能会有一些细微的区别。

3SQL分为三个部分

u DDL:Data Defination Lanuage,数据定义语言,用来维护存储数据的结构(数据库,表)代表指令:createdropalter

u DML: Data Manipulation Language 数据操作语言,用来对数据进行操作(数据表中的内容),代表指令:insertdeleteupdate等;其中DML内部有单独进行了一次分类:DQL(Data Query Language:数据查询语言,如select)

u DCL:Data Control Language,数据控制语言,主要负责权限管理(用户),代表指令:grantrevoke等。

 

1.4 Mysql数据库

1Mysql数据库是一种c/s结构的软件:客户端/服务器,若想访问服务器必须通过客户端(服务器一种运行,客户端在需要的时候运行)

2)交互方式

1.客户端连接认证:连接服务器,认证身份:mysql.exe -hPup

2.发送SQL指令

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

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

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

 

1.5 Mysql服务器对象

1)没有办法完全了解服务器内部的内容:只能粗略的去分析数据库服务器的内部结构。

2)将mysql服务器内部对象分成四层:系统(DBMS->数据库(DB->数据表(Table->字段(field

 

2.SQL基本操作

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

2.1库操作:对数据库的增删改查

2.1.1新增数据库

1Create database数据库名字平[库选项]

2)库选项:用来约束数据库,分为两个选项

u 字符集设定charset/character set 具体字符集(数据存储的编码格式)

               常用字符集:CBKUTF8

u 校对集设定:  collate具体校对集(数据比较的规则)

3)数据库名是英文名

Create database mydatabasecharset utf8

4)数据库名是中文名

Set names gbk

Create database 中国charset utf8

 

2.1.2查看数据库

1)查看所有数据库show databases;

2)查看指定部分数据库:模糊查询

show databases likepattern     -- pattern是匹配模式

%:表示匹配多个字符

_:  表示单个字符

3)查看数据库的创建语句:show create database 数据库名

 

2.1.3更新数据库

1)数据库名字不可以修改

2)数据库修改仅限库选项:字符集和校对集(校对集依赖字符集)

3Alter database数据库名字[库选项];  

Charset/characterset [=]字符集

Collate校对集

 

2.1.4删除数据库

1Drop database数据库名字

2)在对应的数据库存储的文件夹内:数据库名字对应的文件夹也被删除(级联删除:里面的数据表全部被删除)

 

3表操作

3.1新增数据表

Create table[if not exists]表名(

字段名字数据类型,

字段名字数据类型  --最后一行不需要逗号

[表选项]

 

1If not exists:如果表名不存在,那么就创建,否则不执行创建代码(检查功能)

2)表选项:控制表的表现

字符集:charset/character set具体字符集(保证表中数据储存的字符集)

校对集:collate具体校对集;

储存引擎: engine具体的存储引擎(innodbmyisam

(3)没有选择数据库时的错误提示

 六天带你玩转Mysql笔记---第一天_第1张图片

任何一个表的设计都必须指定数据库

 

方案1:显式地指定表的所属

 六天带你玩转Mysql笔记---第一天_第2张图片

 

方案2:隐式地指定表的所属数据库:先进入到某个数据库环境,然后这样创建的表自动归属到某个指定的数据库。

进入数据库环境:use数据库名字

六天带你玩转Mysql笔记---第一天_第3张图片 

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

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

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

 

3.2查看数据表

1)查看所有表:show tables;

2)查看部分表:show table likepattern

3)查看表的创建语句:show create table表名;

4)查看表结构:

查看表中字段信息:Desc/describe/show columns from表名;

六天带你玩转Mysql笔记---第一天_第4张图片 

Field---字段名  

Type---数据类型  

Null---列属性:是否允许为Null()

Key---索引:索引类型(PRI主键,UNI唯一键等)

Default---列属性:大部分字段默认为Null(空)

Extra---列属性:扩充(额外的),描述不下了

 

3.3修改数据表

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

3.3.1修改表本身

(1)修改表名:rename  table老表名 to新表名

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

Alter table表选项[=]值;

 

3.3.2修改字段

字段操作包括:新增,修改,重名,删除

(1)新增字段:

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

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

First:第一个位置

After 字段名:在该字段名之后,默认是最后一个字段之后

(2)修改字段:

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

(3)重名字段:

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

(4)删除字段:

alter table表名drop字段名;

 

3.4删除数据表

Drop table表名1,表名2........;  --可以一次删除多张表

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

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

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

 

4. 数据操作

4.1新增数据

方案1:给全表字段插入数据,不需要指定字段列表,需要数据的值出现顺序必须与表中设计的字段出现的顺序一致。凡是非数值数据,都需要使用引号(建议单引号)包裹。可以一次性插入多条记录

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

方案2:给部分字段插入数据,需要选定字段列表:字段列表出现的顺序与字段的顺序无关。但是值列表的顺序必须与选定的字段顺序一致。

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

 

4.2查看数据

Select */字段列表from表名[where条件];

 

4.3更新数据

Update表名set字段=[where条件];  --建议都有where

注:更新不一定成功,有影响的才成功。

 

4.4删除数据

Delete from表名[where条件];

 

5. 中文数据问题

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

 

 

(1)查看服务器的所有字符集:show character set;

(2)查看服务器默认对我处理的字符集:

Show variables likecharacter_set% ;

六天带你玩转Mysql笔记---第一天_第5张图片 

Character_set_client:服务器默认的客户端字符集

Character_set_connection:连接层字符集

Character_setdatabase:当前所在数据库的字符集

Character_set_results:服务器默认的给外部数据的字符集

 

表中出现乱码分析1

问题根源:客户端数据只能是GBK,而服务器认为是UTF8

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

set character_set_client = gbk;

六天带你玩转Mysql笔记---第一天_第6张图片 

 

 

 

 

 

表中出现乱码分析2

六天带你玩转Mysql笔记---第一天_第7张图片 

查看数据,中文为乱码?

问题根源:数据来源是服务器,解析数据的是客户端(客户端只识别gbk),但是服务器给的数据是utf8

解决方案:修改服务器给客户端的数据字符集为GBK

set character_set_results = gbk;

六天带你玩转Mysql笔记---第一天_第8张图片 

六天带你玩转Mysql笔记---第一天_第9张图片 

中文显示正常!

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

set names字符集

 注:修改Character_set_clientCharacter_set_connectionCharacter_set_results

(4)connection连接层:是字符集转变的中间者,如果统一了效率更高,不同意也没问题。

 

6. 校对集

校对集:数据比较的方式

1)校对集有三种格式:

u _binbinary,二进制比较,取出二进制位,一位一位比较,区分大小写。

u _cscase sensitive 大小写敏感,区分大小写。

u _cicase insensitive 大小写不敏感,不区分大小写。

2)查看数据库所支持的校对集:Show collation;

3)校对集应用:只有当数据产生比较的时候,校对集才会生效。

第一步:创建不同校对集表

校对集:utf8_bin

create table my_collate_bin(

name char(1)

)charset utf8 collate utf8_bin;

校对集:utf8_general_ci

create table my_collate_ci(

name char(1)

)charset utf8 collate utf8_general_ci;

第二步:插入数据

insert into my_collate_bin values('a'),('A'),('B'),('b');

insert into my_collate_ci values('a'),('A'),('B'),('b');

第三步:查看数据

select * from my_collate_bin order by name;

select * from my_collate_ci order by name;

六天带你玩转Mysql笔记---第一天_第10张图片

 

你可能感兴趣的:(六天带你玩转Mysql笔记)