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 大小写敏感比较