1 数据库的介绍
1.1 数据库概念
数据库(存放数据的仓库)(DataBase,DB):长期存储在计算机内部有结构的,大量的,共享的数据集合。
- 长期存储:持久存储
- 有结构:类型:数据库不仅可以存放数据,而且存放的数据是有类型的(int,String);关系:存放数据与数据之间的关系
- 大量:大多数数据库都是文件系统的,存储在数据库中的数据实际上是存储在磁盘上的
- 共享:数据库可以作为中间媒介,多个应用可以通过数据库共享数据
1.2 关系型数据库和非关系型数据库
- 关系型数据库:采用关系模型来组织数据存储,以行和列形式(表格)存储数据并记录数据与数据之间的关系。------ 将数据存储在表格中,建立表格与表格之间的关联来维护数据之间的关系。
- 非关系型数据库:采用键值对模型来存储数据,它只完成数据的记录,不会记录数据之间的联系。----- 更加多样化,可扩展性强 NoSQL
1.3 常见数据库
- 关系型:MySql 免费使用 (MariaDB, Percona Seriver), PostgreSQL, Oracle (功能最强大但是代价高), SQL Seriver, Access, Sybase, 达梦
- 非关系型数据库:面向检索的列式检索(HaBase, BigTable),面向高并发的缓存存储 键值对(Redis, MemcacheDB), 面向海量数据的文档存储(MongoDB, CouchDB)
1.4 数据库术语
- 数据库管理系统(DBMS):位于用户与操作系统之间的一层数据管理软件
- 数据库系统管理员(DBA):负责数据库创建,使用和维护的专门人员
- 数据库系统(DBS):DB+DBMS+DBA
1.5 SQL 概述
SQL (Structured Query Language) :结构化查询语言,用于存取,查询和更新数据以及管理关系型数据库,根据SQL指令完成的数据库操作不同可以将SQL分为四类:
- DDL (Data Definition Language):数据定义语言,用于完成对数据库对象(数据表,视图,索引等进行管理)
- DML (Data Manipulation Language):数据操作/操纵语言,用于完成对数据表中的数据进行增删改等操作
- DQL (Data Query Language):数据查询语言,用于完成对数据表中的数据查询操作
- DCL (Data Control Language):数据控制语言,用于完成事务管理等操作
1.6 SQL 基本语法
- SQL指令不区分大小写
- 每条指令结束之后,都以分号结尾
- SQL关键字之间以空格进行分割
- SQL之间不限制换行,有空格就可以有换行
1.7 DDL
1.7.1 DDL-数据库操作
使用DDL语句创建数据库,查询数据库,修改数据库,删除数据库
-- 创建数据库
CREATE DATABASE db_test;
-- 如果当前数据库不存在,创建数据库
CREATE DATABASE if not EXISTS db_test;
-- 创建数据库时指定字符集,字符集:数据存储在数据库中采用的编码格式
CREATE DATABASE db_fmsc CHARACTER set utf8;
-- 查询数据库
SHOW DATABASEs;
-- 显式指定数据库的创建名称
SHOW CREATE DATABASE db_test;
-- 修改数据库的字符集
alter DATABASE db_test CHARACTER set gbk;
alter DATABASE db_test CHARACTER set utf8;
-- 删除数据库会删除当前数据库中所有表和数据
DROP DATABASE db_test;
-- 如果存在再进行删除
DROP DATABASE if EXISTS db_test;
-- 切换,使用数据库
use db_fmsc;
1.7.2 DDL数据表操作
char和varchar区别:char定长,不可变字符串(不够系统会自动补,不能少);varchar:可变字符串
-- 创建表,蓝色表示关键词
CREATE TABLE students(
stu_num CHAR(8) NOT NULL UNIQUE,
stu_name VARCHAR(50) NOT NULL,
stu_gender CHAR(2) NOT NULL,
stu_age INT NOT NULL,
stu_tel CHAR(11) NOT NULL UNIQUE,
stu_qq VARCHAR(11) UNIQUE
);
-- 查询数据表
show tables;
-- 查询表结构
desc students;
-- 删除数据表
drop table if EXISTS students;
-- 修改表名
ALTER TABLE students rename to stus;
ALTER TABLE stus rename to students;
-- 数据表默认字符集和数据库一致
ALTER TABLE students CHARACTER SET utf8;
-- 添加字段
ALTER TABLE students add stu_remark VARCHAR(200);
-- 修改字段名称和类型 stu_remark旧的字段名称,stu_desc新的字段名称
alter TABLE students change stu_remark stu_desc text;
-- 不修改字段名称,只修改类型
alter TABLE students MODIFY stu_desc VARCHAR(400);
-- 删除字段
ALTER TABLE students DROP stu_desc;
1.7.3 MySql 数据类型(数据类型:数据表中列支持存放的类型)
数值类型,在MySql中多种数据类型可以存放数据,不同类型存放数据范围或者形式不同
类型 | 内存空间大小 | 范围 | 说明 |
tinyint | 1byte | 有符号:-128-127 无符号:0-255 | 特小型整数(年龄) |
smallint | 2byte(16bit) | 有符号:-32768-32767 无符号:0-65535 | 小型整数 |
mediumint | 3byte | 有符号:-2^31-2^31-1 无符号:0-65535 | 中型整数 |
int/integer | 4byte | 整数 | |
bigint | 8byte | 大型整数 | |
float | 4byte | 单精度 | |
double | 8byte | 双精度 | |
decimal | decimal(10,2) 数值一共有10位,小数位为2位 |
字符类型,存储字符序列类型
类型 | 字符长度 | 说明 |
char | 0-255字节 | 定长字符串,如果定义为char(n)而实际中 长度小于n系统则会默认补全到n个’/u0000...‘ |
varchar | 0-65536 | 可变长度字符串 |
tinyblob | 0-255 | 二进制字符串 |
blob | 0-65536 | 二进制字符串 |
mediumblob | 二进制字符串 | |
longblob | 二进制字符串 | |
tinytext | 文本字符串 | |
text | 文本字符串 | |
mediumtext | 文本字符串 | |
longtext | 文本字符串 |
日期类型,在MySql数据库中,我们可以使用字符串来存储时间。但是如果要基于时间字段进行查询操作(查询在某个时间段内的数据)则不容易查询
类型 | 格式 | 说明 |
data | 2021-09-13 | 日期,只存储年月日 |
time | 11:12:13 | 时间,只存储时分秒 |
year | 2021 | 年份 |
datatime | 2021-09-13 11:12:13 | 存储年月日时分秒 |
timestamp | 20210913 111213 | 日期+时间(时间戳) |