目录
数据库基本知识
关系型数据库
关键字说明
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(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是一种c/s结构的软件(c/s结构即客户端/服务器结构,要想访问服务器必须经过客户端,通常情况下,服务器是一直运行的,而客户端在需要的时候运行)
交互方式:
1.客户单连接认证:连接服务器,认证身份
2.客户端发送SQL指令
3.服务器接收SQL指令,然后处理SQL指令,接着返回操作结果
4.客户端接收操作解果并显示操作结果
5.断开连接(释放资源)
MySQL断开连接的方式有三种:exit、quit、\q
MySQL的服务器对象分为四层:系统(DBMS)->数据库(DB)->数据表(Table)->字段(field)
根据操作的对象,将SQL操作分为三类:库操作、表操作、数据操作
库操作:对数据库的操作
例如:创建一个新的数据库,基本语法如下:create database 数据库名 [库选项];
注意:创建数据库时数据库名不能用关键字和保留字,如果必须使用,则必须加上``
库选项用来约束数据库,分为两个选项:字符集设定和校对集设定
字符集设定:charset/character set + 具体的字符集(数据存储的编码格式),常用的字符集有GBK和UTF8
校对集设定:collate + 具体的校对集(数据比较的规则)
在MySQL中,注释的方式有两种:--、#
执行创建数据库的SQL语句之后,会发生什么?
其中,校对集依赖字符集,字符集发生改变则校对集一定会发生改变
查看数据库
查看所有数据库:show databases;
查看部分数据库(模糊查询):有两种匹配模式:"_"代表匹配一个字符,"%"代表匹配多个字符
例:show databases like 'my%';
show databases like 'mydatabas_';
注意:如果数据库名中包含"_",需要在查看时加入一个"\"进行转义;
查看数据库的创建语句
show create database mydatabase;
更新数据库
数据库的名字不能修改
数据库的修改仅限数据库的库选项:字符集和校对集(校对集依赖字符集)
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)
alter table my_student change num stuID varchar(10);
#更改学生表中的num字段名为stuID,并将其数据类型更改为varchar(10)
alter table 表名 drop 字段名; #删除数据表中的指定字段
删除数据表
drop table 表名1,表名2,......; #支持删除多个表
新增数据
一、给全表字段添加数据(插入一行数据),要求插入的数据顺序和数据表中的字段顺序一致,并且数据中的非数值字段必须使用' ',例如:insert into 表名 values(值列表1),(值列表2),......; #支持同时插入多条数据
二、给部分字段添加数据,要求指定需要插入的字段列表,字段列表出现的顺序不一定要与表中字段顺序相同,但是必须要与指定的字段顺序相同
insert into 表名 (字段列表) values(值列表1),(值列表2); #支持同时插入多条数据
查看数据
查看所有数据
select * from 表名 [where条件]; #查看所有信息
查看指定字段信息
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服务器、数据库服务器,三个部分都有自己的字符集,当三个部分的字符集不一致时,就会产生乱码问题
解决方案:三码合一,但在实际操作中不能实现,因为浏览器的字符集是无法改变的