数据库
数据库
长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据的“仓库”,用于保存、管理数据。
电子文件柜:
- 用户可以对文件中的数据进行新增、截取、更新、删除等操作
- 存储大量数据,存储结构便于管理和访问
- 可以有效保障数据一致性、完整性、降低数据冗余
- 可以满足应用的共享和安全方面的要求
- 故障恢复,防止数据被破坏
关系型数据库(RDBMS):MySQL、Oracle、SQLServer、SQLite、DB2
非关系型数据库(NOSQL):Redis、MongoDB
DBMS
数据库管理系统(Database Management System):数据管理软件,科学组织和存储数据、高效地获取和维护数据
MySQL
特点:
免费、开源数据库 ;小巧、功能齐全;使用便捷;可运行于Windows或Linux操作系统;可适用于中小型甚至大型网站应用
MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。
关系数据库,是建立在关系模型基础上的数据库 ,关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。
注释:
- 单行:–注释内容 或 #注释内容(MySQL特有)
- 多行注释:/* 注释内容 */
MySQL的运行机制
-
连接器(Connectors&Connection Pool)
通过客户端、服务器通信协议与MySQL建立连接。MySQL 客户端与服务端的通信方式是 “ 半双工 ”。对于每一个MySQL的连接,时刻都有一个线程状态来标识这个连接正在做什么。
通讯机制:
全双工:能同时发送和接收数据,例如平时打电话。
半双工:指的某一时刻,要么发送数据,要么接收数据,不能同时。例如早期对讲机。
单工:只能发送数据或只能接收数据。例如单行道。 -
连接池:管理缓冲用户连接,线程处理等需要缓存的需求
-
SQL 接口:数据管理语言和数据定义语言、存储过程、视图、触发器等。
接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL接口
-
解析器:SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。
主要功能:
a. 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的;例如将 select * from tablename where 1=1;分解为select、*、from、tablename、where 、1=1,并去解析。
b. 如果在分解构成中遇到错误,那么就说明这个SQL语句是不合理的。
-
**查询优化器:**SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是“选取-投影-联接”策略进行查询。
例: select uid,name from user where gender = 1;
a. 先根据where语句进行选取,而不是先将表全部查询出来以后再进行gender过滤
b. 先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤
将这两个查询条件联接起来生成最终查询结果。
-
缓存:
如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等。
-
存储引擎:是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色的一个地方。
Mysql的存储引擎是插件式的。它根据MySql AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)。
现在有很多种存储引擎,各个存储引擎的优势各不一样,最常用的MyISAM,InnoDB,BDB。
-
默认下MySql是使用MyISAM引擎,它查询速度快,有较好的索引优化和数据压缩技术。但是它不支持事务。
-
InnoDB支持事务,并且提供行级的锁定,应用也相当广泛。 也支持自己定制存储引擎,甚至一个库中不同的表使用不同的存储引擎,这些都是允许的
-
验证安装:
net start mysql :启动mysql服务
mysql -h服务器地址 -u用户名 -p密码 :登陆
show databases; :显示db列表
use 数据库名; :使用指定数据库
show tables; :显示table列表
update user set password=password(‘新密码’) where user=‘用户名’;
flush privileges; :修改登录密码
? 命令名 :显示命令帮助
安装后:
my.ini、配置path、开启数据库服务
SQLyog管理工具
可手动操作、管理MySQL数据库的软件工具
连接数据库
打开MySQL命令窗口:在DOS命令行窗口(cmd.exe)输入-----目录\ mysql\bin------可设置环境变量
连接数据库语句: mysql -h 服务器主机地址 –u 用户名 -p用户密码
mysql -http -u root -p
结构化查询语句SQL分类
名称 | 解释 | 命令 |
---|---|---|
DDL (数据定义语言) | 定义和管理数据对象, 如数据库,数据表等 | CREATE、DROP、ALTER |
DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | INSERT、UPDATE、DELETE |
DQL (数据查询语言) | 用于查询数据库数据 | SELECT |
DCL (数据控制语言) | 用来管理数据库的语言,包括管理权限及数据更改 | GRANT、COMMIT、ROLLBACK |
命令行操作数据库
-
创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名;
-
删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
-
查看数据库
SHOW DATABASES;
-
使用数据库
USE 数据库名;
创建数据表
- 显示表结构
desc 表名
- 显示表创建语句
show create table 表名
CREATE TABLE [ IF NOT EXISTS ] `表名` (
`字段名1` 列类型 [ 属性 ] [ 索引 ] [注释] ,
`字段名2` 列类型 [ 属性 ] [ 索引 ] [注释] ,
… …
`字段名n` 列类型 [ 属性 ] [ 索引 ] [注释]
) [ 表类型 ] [ 表字符集 ] [注释] ;
反引号用于区别MySQL保留字与普通字符而引入的
create DATABASE if not EXISTS myschool;
USE myschool;
create TABLE if not EXISTS `subject`(
`subjectNo` int(11) not NULL PRIMARY KEY comment '课程编号',
`subjectName` VARCHAR(50) not NULL COMMENT '课程名称',
`ClassHour` int(4) COMMENT '课时'
)CHARSET=utf8mb4 COMMENT '测试表';
列类型:
规定数据库中该列存放的数据类型
分为:数值类型、字符串类型、日期和时间型数值类型、NULL值
1.数值类型:
类型 | 说明 | 取值范围 | 存储需求 |
---|---|---|---|
tinyint | 非常小的数据 | 有符值: -27 ~ 27-1 无符号值:0 ~ 28-1 | 1字节 |
smallint | 较小的数据 | 有符值: -215 ~ 215-1 无符号值: 0 ~ 216-1 | 2字节 |
mediumint | 中等大小的数据 | 有符值: -223 ~ 223-1 无符号值: 0 ~ 224-1 | 3字节 |
int | 标准整数 | 有符值: -231 ~ 231-1 无符号值:0 ~ 232-1 | 4字节 |
bigint | 较大的整数 | 有符值: -263 ~263-1 无符号值:0 ~264-1 | 8字节 |
float | 单精度浮点数 | ±1.1754351e -38 | 4字节 |
double | 双精度浮点数 | ±2.2250738585072014e -308 | 8字节 |
decimal | 字符串形式的浮点数 | decimal(m, d) | m个字节 |
2.字符串类型:
类型 | 说明 | 最大长度 |
---|---|---|
char[(M)] | 固定长字符串,检索快但费空间, 0 <= M <= 255 | M字符 |
varchar[(M)] | 可变字符串 0 <= M <= 65535 | 变长度 |
tinytext | 微型文本串 | 28–1字节 |
text | 文本串 | 216–1字节 |
3.日期和时间型数值类型
类型 | 说明 | 取值范围 |
---|---|---|
DATE | YYYY-MM-DD,日期格式 | 1000-01-01~ 9999-12-31 |
TIME | Hh:mm:ss ,时间格式 | -838:59:59~838:59:59 |
DATETIME | YY-MM-DD hh:mm:ss | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 |
TIMESTAMP | YYYYMMDDhhmmss格式表示的时间戳 | 197010101000000 ~2037年的某个时刻 |
YEAR | YYYY格式的年份值 | 1901~2155 |
4.NULL值
- 理解为“没有值”或“未知值”
- 不要用NULL进行算术运算,结果仍为NULL
数据字段属性:
-
UNSIGNED
无符号的
声明该数据列不允许为负数
-
ZEROFILL
0填充的
不足位数的用0来填充,如 int(3),5则为 005
-
AUTO_INREMENT
自动增长的,每添加一条数据,自动在上一个记录数上加1
通常用于设置主键,且为整数类型
可定义起始值和步长
-
NULL 和 NOT NULL
默认为NULL,即没有插入该列的数值
如果设置为NOT NULL,则该列必须有值
-
DEFAULT
默认的
用于设置默认值
例如,性别字段,默认为“男”,否则为“女”;若无指定该列的值,则默认为“男”的值
数据字段注释:
comment
CREATE TABLE [ IF NOT EXISTS ] `test` (
`id` int (11) UNSIGNED COMMENT '编码号'
)COMMENT='测试表';
表类型:
MySQL的数据表的类型:MyISAM、InnoDB 、HEAP、BOB、CSV等
常见的MyISAM与InnoDB类型:
-
使用MyISAM: 节约空间及相应速度
-
使用InnoDB: 安全性,事务处理及多用户操作数据表
名称 | MyISAM | InnoDB |
---|---|---|
事务处理 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 较大,约2倍 |
CREATE TABLE 表名(
#省略一些代码
) ENGINE = MyISAM
/*或者*/
CREATE TABLE 表名(
#省略一些代码
) ENGINE = InnoDB
表字符集:
可为数据库、数据表、数据列设定不同的字符集
- 创建时通过命令来设置,如
CREATE TABLE 表名(
#省略一些代码
)CHARSET = utf8mb4;
-
如无设定,则根据MySQL数据库配置文件my.ini
(Windows系统)中的参数设定,如:character-set-sever = utf8
索引:
数据表的存储位置
MySQL数据表以文件方式存放在磁盘中:
-
包括表文件、数据文件以及数据库的选项文件
-
位置:MySQL安装目录\data下存放数据表。目录名对应数据库名,该目录下文件名对应数据表
注意:
-
InnoDB类型数据表只有一个*.frm文件,采用表空间的概念来管理数据表。数据文件为上一级目录的 ibdata1 文件
-
xp存储位置:C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\data\数据库名
-
Win7存储位置:C:\ProgramData\MySQL\MySQL Server 5.5\data\数据库名
InnoDB的ibdata1文件位置在安装时指定的路径或默认位置
-
-
MyISAM类型数据表对应三个文件:
*.frm – 表结构定义文件
*.MYD – 数据文件
*.MYI – 索引文件
修改数据表
修改表:
-
修改表名
ALTER TABLE 旧表名 RENAME AS 新表名
-
添加字段
ALTER TABLE 表名 ADD 字段名 列类型 [ 属性 ]
-
修改字段
ALTER TABLE 表名 MODIFY 字段名 列类型 [ 属性 ] ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列类型 [ 属性 ]
-
删除字段
ALTER TABLE 表名 DROP 字段名
删除数据表:
DROP TABLE [ IF EXISTS ] 表名
- IF EXISTS 为可选,判断是否存在该数据表
- 如删除不存在的数据表会抛出错误
DB、DBS、DBMS之间有什么关系?
DB、DBS、DBMS三者的关系是:
-
DBS(数据库系统)包括DB(数据库)和DBMS(数据库管理系统)。
-
数据库系统是一个通称,包括数据库、数据库管理系统、数据库管理人员等的统称,是最大的范畴。
1、DBMS和DB的关系:DBMS数据库管理系统(databasemanagementsystem)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库(DB)。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库(DB)中的数据。
2、DBS和DB的关系:数据库系统DBS(Data Base System,简称DBS)是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。它通常由软件、数据库(DB)和数据管理员组成。