mysql数据库

永久性保存数据的仓库。

MysQL称为关系型数据库

什么是关系型

所谓关系型数据库,基于关系模型建立的数据!

关系模型:二维表

 

mysql数据 是 关系型数据库!

 

何谓关系型(关系模型),利用关系(二维表),去描述实体信息,与 实体之间的联系 的数据库架构就是 关系型数据!

 

所谓关系:二维表!

学生表

学号

姓名

年龄

教室表中所属ID

Itcast1001

王小明

38

1

Itcast1002

王宝强

20

2

Itcast1003

梅超风

30

3

 

教室表

ID

教室号

所属班级

1

305

PHP25期

2

210

PHP24期

3

311

JavaEE48期

 

 

关系型数据的基本概念

关系,二维表

行,记录,一行就是一条记录。

列,字段,一列就是一个字段。

SQL:结构化查询语言,操作关系型数据库的语言!SQL是一门编程语言并且它是强类型的编程的语言。

 

操作MYSQL基本流程

什么数据库系统,mysql 就是数据库系统!

数据库系统 最基本应该由:

数据系统 = 数据库(数据主体部分) +  数据管理系统(操作数据的工具)

DBS(DataBase System) = DB(Database) + DBMS(Database Managenemt System)

 

MySQL是基于C/S架构的

客户端/服务器端架构    一对一模式

 

 

 

 

 

 

 

操作mysql,就一定:通过操作mysql客户端,向mysql服务器发出指令,从而完成操作!

 

 

安装mysql时,自动携带一个命令行的客户端!mysql。

利用该客户端,向服务器发送指令,然后等待执行结果即可!

 

 

通过黑窗口启动或者停止mysql服务:

启动服务:net start mysql

 

停止服务:net stop mysql

 

通过Window的服务来管理Mysql服务器

 

 

 

使用黑窗口来作为Mysql客户端

先在键盘上面按下:win+R  然后

mysql.exe   -h(主机名)  -P(端口号)  -u(用户名)  -p(密码)

 

msyql服务器端的基本结构体系

 

 

 

数据库服务器 -> 库 -> 表 -> 字段(数据)

 

完成数据的操作,先建立数据的结构(由库到表再到字段)

 

 

 

SQL:大体分成:DML(数据管理语句,数据操作 增删改查),DDL(数据定义语句,数据结构的控制语句,表操作和库操作)

库操作,DDL

创建,create

(create,几乎所有的结构 都是用该语法完成)

create  database 库名 [库选项]

 

 

 

注意的问题:

库选项,只有 字符集,校对集的概念!

 

每个库,会对应一个数据目录

 

存放在当前mysql的总的数据库目录内

 

参考 mysql的配置文件得到该目录:

 

 

数据库选项:

 

 

 

数据库名的问题

大小写问题,取决于mysql服务器,所在的操作系统!(建议是,认为区分)

 

特殊名称,关键字,特殊字符等!默认是不可以的!

 

但是,可以使用 反引号 将 名称 包裹起来,告知服务器,此处一个名字,而不是特殊操作!

 

中文等都可以作为标识符(库名),需要同样反引号!(多字节字符,还需要注意字符集的问题)

 

 

查询(看看有哪些库,库的基本结构),show

查询已有的数据库名字

show databases;

 

show databases likes;

like 关键字 用于过滤多个数据库!

 

可以使用 通配符(通用匹配符,可以匹配多个字符)

% 匹配任意字符的任意次数(包括0次)的组合!

 

_ 匹配任意一个字符

 

通配符 是与 like 关键字 一起使用!

 

注意如需要匹配 特定的通配符,则需要对通配符转义,使用反斜杠\完成转义!

 

查看某个数据库的定义

show create database 库名;

 

 

修改,alter

alter database 数据库名

只能修改 数据库选项

 

 

 

删除,drop

drop database数据库名

 

 

 

删除数据库后那么对应的存放数据库的的文件夹也同样被删除!

 

if not exists, if exists

 

在  create  与 drop 时,创建和删除时,有两个额外的操作:

 

create database if not exists

如果不存在则创建

 

 

drop database if exists

如果存在 ,则删除

 

 

create  show  alter   drop  对数据库进行操作

 

 

表操作,DDL

表本身,与表结构的操作!

创建,create table

create table 表名 (

字段的定义

) [表选项];

 

 

在创建表之前一定要选择指定的数据库:

use 库名;

 

 

其中表名,一定先要确定数据库!因此一个典型的表名是由两部分组成:

所在库.表名

test.itcast test库内itcast表

itcast.stu itcast库内的stu表

 

但是我们可以设置默认数据库,如果不指定则使用默认数据库(当前数据库)

use 数据库名。选择默认数据库!

在使用 表名 但是没有指明其所在数据库时,默认数据库才会起作用!

 

 

 

其中字段的部分

字段才是最终的数据的载体(与变量的概念是类似的,都是基本保存数据的),SQL的是强类型,字段的类型是固定的,提前定义好的!

因此,在定义字段时,至少要字段名 和 字段类型!

两种最基本的mysql数据类型(int, varchar,varchar必须指定最大长度字符为单位)

 

表选项部分

典型的常用的表选项有:

字符集(校对集),表引擎。

 

 

查看,show,desc

查看所有的表有哪些

show tables like ‘模式

 

 

查看具体的建表语句

show  create  table  table_name

 

在mysql的命令行客户端,如果数据过多,不容易展示!

可以使用 \G 作为语句结束符!

 

 

查询表结构

desc  表名

desc  describe的简写

 

 

修改,alter table

修改表选项

alter  table  table_name  [新选项]

 

改表名

rename  table 原表名  to  新表名;

 

注意,表名可以由库名.表名形式的!

因此,可以跨库修改表名:只要在表名前增加 库名即可

 

 

修改表结构,表内字段

增加字段

alter  table  table_name  add字段定义  [字段位置]

 

 

使用关键字 after

 

使用关键字,first

 

删除字段

alter  table  table_name  drop  column  column_name;

 

 

 

 

修改已有字段(修改字段定义)

alter  table  table_name  modify  column  column_name  新的定义!


可以修改位置

 

字段改名

alter  table  table_name  change原字段名  新字段名  新字段定义!

注意,不是纯粹的改名,而是需要在修改定义的同时改名!

 

 

删除,drop table

drop  table  table_name

 

 

drop table if exists

create table if not exists!

 

 

 

 

 

数据操作,DML

基本的操作

增加,创建,插入,insert

insert  into 表名 (字段列表) values (与字段相对的值列表)




不一定要一次性插入所有字段,或者按照原始的字段顺序插入:

 

但是:

字段与值的数量一定要匹配:

 

特别的:

如果所有的值都按照字段的出现顺序都插入的话,可以省略字段列表部分!

 

注意:数值类型,不需要增加引号! 而字符串类型都需要出现引号内(放置单引号)!(但是 数值型,可以出现引号内)

 

查询,检索,选择,select

select 字段列表 from 表名 [where 条件表达式]

其中 字段列表可以使用 * 表示 所有字段!

 

 

关于字段列表:

也应该够用就可以!

 

 

 

 

关于条件表达式,默认是没有,表示永远为真!

但是,很少出现没有条件的情况!

 

 

为了突出,应该所有的语句都有查询条件!即使没有条件,我也强制增加一个

 

 

 

 

 

删除,delete

delete from 表名 [where 条件];

关于条件,可以省略。表示永远为真

 

注意,删除是不可逆的。要避免没有条件的删除!

 

 

修改,更新,update

update 表名 set 字段1=新值1, 字段n=新值n where 条件

关于条件,可以省略。表示永远为真。

 

修改指定的字段

在修改和删除记录的时候一定要加指定的条件!

 

字符集

 

字符集,描述 可见到的图形,在存储和传输时 使用的编码 称之为字符集!

指的是:

图形 与 编码 之间的对应关系!

 

 

数据存储的编码

数据是存储在服务器端的!究竟是以哪种编码保存的,怎么决定?

数据是最终要映射(保存)到字段的层面上!因此决定数据的编码,也是最终由字段来决定!

 

-- 创建表给字段来指定字符编码  

-- 在MSQL配置文件中 有字符编码设置的

-- 在创建数据库也可以指定字符编码

-- 在创建表也可以指定字符编码

-- 在定义字段的时候也可以指定其字符编码

 

 

确定数据的存储编码是由以下的方案完成的:

1, 先看 字段的编码!如果存在则确定完毕!

2, 如果字段没有设置编码,查看表的编码,如果有,则确定数据编码!

3, 如果表没有编码,查看库的编码,如果有,则确定数据编码!

4, 如果库也没有编码,则有服务器程序确定!

 

 

 

 

典型的编码:gbk,utf8!

 

 

 

 

客户端操作,查询的编码

 

在客户端与 服务器端交互时,存在两个重要的编码:

1, 客户端发送数据的编码

2, 客户端接收到服务器数据编码!

 

可以通过 show variables like character_set_% 展示以 character_set开头变量,其中就有上面的两个值:

 

 

 

在往Mysql服务器写入汉字的时候 报错:

 

 

 

使用 set 变量名 = 变量值的形式更改变量值!

 

 

 

 

 

 

 

 

set names gbk,就是一个快捷操作,将上面两个配置同时更改成目标编码!

 

set names gbk|utf8 取决于,客户端所能接受的编码!

 

 

整体流程:

 

 

 

set names gbk|utf8。

 

校对集,collate

指的是 字符之间的比较关系!

 

a  B  c

or?

B a c

 

 

 

可以被 校对集改变:

利用 show collation; 查看到所有的校对集!

 

 

校对集,依赖于字符集

校对集,指的是,在某个字符集下,字符的排序关系应该是什么,称之为校对集!

 




典型的后缀:

_bin 二进制编码层面直接比较:

_ci 忽略大小写(大小写不敏感)比较

_cs 大小写敏感比较