数据库学习笔记(一)

目录

数据库基本知识

关系型数据库

关键字说明

SQL

MySQL

MySQL服务器对象

基本的SQL操作

数据库操作

数据表操作

数据操作

中文数据问题

数据库校对集

乱码问题


数据库基本知识

数据库的定义

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

数据库:高效存储和处理数据的介质(介质分为两种,内存和磁盘)

数据库的分类

数据库基于存储介质的不同分为了两类:关系型数据库(SQL)和非关系型数据库(NOSQL:Not Only SQL)

关系型数据库:大型数据库(Oracle、DB2)、中型数据库(MySQL、SQL-Server)、小型(access)

非关系型数据库:memcached、mongodb,redis

两种数据库的区别

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

非关系型数据库:不安全(运行在内存上,掉电丢失)、效率高

关系型数据库

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

关系模型:一种建立在关系上的模型,关系模型包括以下三个方面:数据结构、SQL指令集、完整性约束

数据结构:数据存储的问题,在关系型数据库中,使用二维表进行数据的储存

SQL指令集:所有的SQL语句构成了SQL指令集

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

关系型数据库的设计

在需求分析中找到一类数据(实体),将一类数据设计成一张二维表

二维表是由表头和数据区构成的,表头存放的是数据的字段名,数据区存放的是实际存储的数据单元

二维表:(行,列)

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

实际案例:

分析一个教学管理系统

①分析其中的实体:教师、学生、教室

②分析实体中应该存放的信息:

教师:姓名、性别、年龄、工资

学生:姓名、性别、年龄、学号、成绩

教室:教室编号、班级名称

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

实体间的联系:例如每个学生都有姓名、学号、性别、学号......

姓名 性别 年龄 学号
张三 20 1001
李四 21  
王晶晶   1003

实体内部的联系:第二行的所有数据,都是在描述张三

实体内部的约束:第二列,只能存放学生的性别

由上图可以直观的看到,即使表格中没有存放数据,系统仍要其分配相应空间,这就是关系型数据库浪费资源的原因

实体与实体之间的联系:每个学生都有自己的班级、每个班级中有多个学生(一对多)

学生表

姓名 性别 年龄 学号
张三 20 1001
李四 21 1002
王晶晶 18 1003

 教室表

教室名称 教室编号
数据库 15#101
嵌入式 15#102

要想将两个实体表关联起来,就需要在学生表中添加一个新的字段----教室信息,这个字段将指向唯一一个教室

如下表所示

姓名 性别 年龄 学号 教室
张三 20 1001 15#101
李四 21 1002 15#101
王晶晶 18 1003 15#102

关键字说明

数据库: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、update等

DCL:Data Control Language,数据控制语言,主要是负责权限管理(用户),代表指令有grant、revoke等

SQL是关系型数据库的操作指令,它是一种约束但不强制,不同的数据库(Oracle、MySQL)内部可能有一些细微区别

MySQL

MySQL是一种c/s结构的软件(c/s结构即客户端/服务器结构,要想访问服务器必须经过客户端,通常情况下,服务器是一直运行的,而客户端在需要的时候运行)

 

交互方式:

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

数据库学习笔记(一)_第1张图片

2.客户端发送SQL指令

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

4.客户端接收操作解果并显示操作结果

数据库学习笔记(一)_第2张图片

5.断开连接(释放资源)

MySQL断开连接的方式有三种:exit、quit、\q

MySQL服务器对象

MySQL的服务器对象分为四层:系统(DBMS)->数据库(DB)->数据表(Table)->字段(field)

基本的SQL操作

根据操作的对象,将SQL操作分为三类:库操作、表操作、数据操作

数据库操作

库操作:对数据库的操作

例如:创建一个新的数据库,基本语法如下:create database 数据库名 [库选项];

注意:创建数据库时数据库名不能用关键字和保留字,如果必须使用,则必须加上``

库选项用来约束数据库,分为两个选项:字符集设定和校对集设定

字符集设定:charset/character set + 具体的字符集(数据存储的编码格式),常用的字符集有GBK和UTF8

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

在MySQL中,注释的方式有两种:--、#

数据库学习笔记(一)_第3张图片

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

  1. 在数据库系统中,会增加对应的数据库信息;
  2. 会在保存数据的文件夹的data目录下创建一个对应的文件夹;数据库学习笔记(一)_第4张图片
  3. 每个数据库文件夹下都有一个opt文件:保存了数据库的库选项;

    其中,校对集依赖字符集,字符集发生改变则校对集一定会发生改变

查看数据库

查看所有数据库:show databases;

查看部分数据库(模糊查询):有两种匹配模式:"_"代表匹配一个字符,"%"代表匹配多个字符

例:show databases like 'my%';

数据库学习笔记(一)_第5张图片

show databases like 'mydatabas_';

数据库学习笔记(一)_第6张图片

注意:如果数据库名中包含"_",需要在查看时加入一个"\"进行转义;

查看数据库的创建语句

show create database mydatabase;

数据库学习笔记(一)_第7张图片

 更新数据库

数据库的名字不能修改

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

alter database 数据库名 [库选项];

当数据库的字符集被更改了之后,其校对集也会被更改

删除数据库

drop database 数据库名;

执行drop命令之后,会将数据库存储对应的文件夹中的数据库信息全部删除(级联删除:文件夹内部的数据全部删除),操作不可逆

数据表操作

表和字段是密不可分的

新增数据表
 

create table [if not exits] 表名(
字段名 数据类型,
字段名 数据类型        __最后一行不加,
)[表选项];

if not exits:如果表名不存在,则新建一个数据表,否则下面的创建语句不执行

表选项:控制表的表现

        字符集:charset/character set 具体字符集

        校对集:collate 具体校对集

        存储引擎:engine 具体的存储引擎(innodb和myisam)

修改数据表表选项

alter table my_student charset = GBK;    #将数据表my_student的字符集改为gbk

alter table my_student modify number char(10);        #将数据表的num字段的数据类型改为char(10)

数据库学习笔记(一)_第8张图片

alter table my_student change num stuID varchar(10);

#更改学生表中的num字段名为stuID,并将其数据类型更改为varchar(10)

数据库学习笔记(一)_第9张图片

alter table 表名 drop 字段名;        #删除数据表中的指定字段

删除数据表

drop table 表名1,表名2,......;        #支持删除多个表

数据操作

新增数据

一、给全表字段添加数据(插入一行数据),要求插入的数据顺序和数据表中的字段顺序一致,并且数据中的非数值字段必须使用' ',例如:insert into 表名 values(值列表1),(值列表2),......;    #支持同时插入多条数据

二、给部分字段添加数据,要求指定需要插入的字段列表,字段列表出现的顺序不一定要与表中字段顺序相同,但是必须要与指定的字段顺序相同

insert into 表名 (字段列表) values(值列表1),(值列表2);        #支持同时插入多条数据

查看数据

查看所有数据

select * from 表名 [where条件];        #查看所有信息

数据库学习笔记(一)_第10张图片

查看指定字段信息

select 字段列表 form 表名 [where条件];

更新数据

update 表名 set 字段 = 值 [where 条件];

删除数据

delete from 表名 [where条件];

中文数据问题

MySQL基本上能够识别所有的字符集,但是以utf8作为默认的和客户端通信的字符集

可以使用set character_set_client = gbk或者set names gbk;        #可以更改其默认编码

将默认编码更改为gbk之后,就不会出现服务器与客户端通信无法正常进行的问题

数据库校对集

校对集是数据比较的方式

校对集分为三种格式:

一、二进制比较(_bin),取出二进制位,对每个二进制位进行比较,区分大小写;

二、大小写敏感(_cs),区分大小写(不常用);

三、大小写不敏感(_ci),不区分大小写;

当数据进行比较时校对集才会生效,在设置校对集时,数据表中必须没有数据,如果表中已经有了数据,再对表的校对集进行修改则修改无效

乱码问题

web乱码的原因

一个动态的网站由三部分组成:浏览器、web服务器、数据库服务器,三个部分都有自己的字符集,当三个部分的字符集不一致时,就会产生乱码问题

解决方案:三码合一,但在实际操作中不能实现,因为浏览器的字符集是无法改变的

你可能感兴趣的:(MySQL)