数据库: 存储数据的介质。
数据库的发展史:
第一代数据库: 层次模型,网状模型。
层次模型和网状模型都是属于导航结构。
第二代数据库: 关系型数据库。
表和表之间都是独立的,他们是通过公共字段进行关 联的。
优点: 查询表数据时效率高,对于数据的约束强。
缺点: 当进行多表查询的时候,效率较低。
数据库系统(DBS)是由数据库(DB)+数据库管理系统(DBMS)组成的。
老何有话说: 关系型数据库管理系统(RDBMS) relationship(关系)
SQL语言 structured query language(结构化查询语言),他是所有关系型数据库共用的语言。
数据库服务器的开启和关闭:
通过服务选项对数据库开启和关闭。
通过cmd命令提示符对数据库服务器开启和关闭。
数据库的四种客户端:
mysql自带的客户端。(只能够登陆自己本地的超级管理账号)
mysql的网页客户端(phpMyadmin)。
mysql的可视化界面客户端(mysql-front,navicat)。
mysql的cmd客户端。
-h 主机
-P 端口号
-u 用户名
-p 密码
如果登陆的是自己本地的主机,-h可以省略不写,如果登陆的是3306端口号,-P可以省略不写。
如果密码想以暗文的模式进行登陆,-p以后直接回车,再进行输入密码,这时候,密码就会以暗文的模式进行输入。
数据库的基本原理。
数据库管理系统管理多个数据库,数据库对应多张表格,每个表格从结构上划分,分为行和列,如果从数据上进行划分,分为记录和字段。
数据冗余:
数据表格中字段的重复部分称之为冗余。
如果想减少冗余,那么我们可以创建一个关联表。减 少冗余的代价是表和表之间关联增加,降低查询的效率。
冗余只能够减少,不能够避免。
数据的完整性: 数据的正确性+数据的准确性。
数据的操作:
增加一个数据库
create database [if not exists] 数据库名称 [charset=字符集][collote=校验级];
数据库的起名:
1. 只能由字母,数字和下划线组成
2. 不能够用纯数字起名
3. 不能以关键词作为数据库的名称
如果起名不符合以上要求,那么需要在数据库名称的左右两边加上一个反引号(`)
创建一个数据库就相当于在data文件夹的下面创建一个文件夹,刚刚新建完数据库以后,文件夹中只有一个后缀名是opt的文件,里面是数据的字符集,以及数据库的校验级。
可以通过打开my.ini,搜索datadir,可以找到data文件的位置。
查询一个数据库
show databases;
安装完数据库以后,数据库管理系统会自带4个 数据库。
information_schema : 存储的表数据,表索引等等 内容。
performance_schema : 存储的是数据库的一些 性能参数。
mysql : 存储的是一些用户信息。
test : 测试用的数据库,给用户试手练习 的。
查询创建数据库的语句:
show create database 数据库名称
修改一个数据库:
alter database 数据库名称 charset=字符集编码;
删除一个数据库
drop database 数据库名称
表的操作
创建一个表:
create table [if not exists] 表名(
字段名称 数据类型 [not null] [default] [primary key][auto_increment][unique key][comment],
字段名称 数据类型 [not null] [default] [primary key][auto_increment][unique key][comment],
字段名称 数据类型 [not null] [default] [primary key][auto_increment][unique key][comment]
)[charset=字符集编码][engine=引擎]
表和对应文件的关系:
由引擎决定,如果是默认的innodb引擎,那么就是一对一的关系,创建的是一个frm文件,代表表结构,表索引和表数据都是存储在data文件夹中的ibdata1中。
MYI : 表索引
MYD : 表数据
innodb的优点:
1. 不容易产生垃圾碎片
2. 支持存储结构,触发器等内容
3. 更新操作时效率高
myisam的优点:
1. 易操作,方便
2. 查询时效率高
查询表格的语句:
show tables 显示所有的表格
show create table 表名\G 显示创建表格的语句
desc 表名 显示表结构
修改表格:
增加一个字段:
alter table 表名 add 字段名 数据类型 附加属性
alter table 表名 add 字段名 数据类型 附加属性 frist
alter table 表名 add 字段名 数据类型 附加属性 after 字段名
修改一个字段:(modify , change)
alter table 表名 modify 字段名 数据类型 附加属性
alter table 表名 change 字段名 新字段名 数据类型 附加属性
删除一个字段:(drop)
alter table 表名 drop 字段名
修改引擎:
alter table 表名 engine=引擎
重命名表格:
alter table 表名 rename to 新表名
删除表格:
drop table [if exists] 表名
对于数据的操作:
新增一条记录:
insert into 表名(添加字段) value(值)
1. 添加字段的顺序和插入值的顺序必须要一一对应
2. 添加字段的顺序和原表中字段的顺序不需要一一对应
3. 如果添加字段的数量正好等于表格中字段的数量,那么添加字段可以省略不写
4. 如果给自动增长列添加一个自动增长的值,那么赋值为null
5. 如果给带有默认值的字段添加一个默认值,那么赋值为default
修改记录:
update 表名 set 字段名=值 [where 条件]
删除记录:
delete from 表名[where 条件]
查看记录:
select 字段1,字段2 from 表名
如果需要查看所有字段的值,那么可以直接用*代替
字符集编码:
show character set 查看数据库中所有的字符集
字符集编码在数据存储时或者数据传输时需要使用。
数据存储时使用字符集编码:
创建数据库和创建表格时,可以对数据库,表格,字段进行字符集设置。
数据传输时使用字符集编码:
cmd客户端的字符集编码是gbk,并且不能够修改。
使用 show variables like ‘character_set_%’可以查看字符集编码设置的相关信息,重点关注client和results
client 服务器端接收客户端数据时的字符集编码
使用set character_set_client=gbk可以将其修改为gbk,这样默认值为中文或者插入中文数据不会报错。
results 服务器返回给客户端数据的字符集编码
使用 set character_set_results=gbk 可以将其修改为gbk,这样返回中文数据时,不会出现一个乱码的问题。
set names gbk ,可以同时修改client,results,connection三者的字符集编码。
set是属于会话模式,每当退出mysql时,重新登陆时会自动还原,所以每次登陆数据库时,第一时间输入一个set names gbk。