什么是数据库?
数据库是长期存储在计算机内部有结构,大量的,共享的数据集合。
长期存储:持久化存储
有结构:
类型:不仅可以存放数据,而且存放的数据是有类型的。
关系:存储数据与数据之间的关系
大量:大多数数据库都是文件系统的,也就是说存储在数据库中的数据实际上就是存储在磁盘文件
共享:多个应用程序可以通过数据库实现数据的共享
关系型数据库和非关系数据库
关系型数据库:采用了关系模型来组织数据的存储,以行和列的形式存储数据与数据的关系--将数据存储在表格中,可以通过建立表格与表格之间的关系来维护数据与数据之间的关系。
非关系数据库:采用键值对的模型来存储数据,只记录数据本身,不会记录数据与数据之间的关系·,在非关系型数据库中,利用其特点的存储结构来解决一些大数据应用的难题。
NoSQl(Not only SQL)代指非关系型数据库。
常见数据库产品
关系型数据库:
Mysql:MariaDB,Percona Server
PostgreSQL
Oracle数据库
SQL Server
Access
Sybase
达梦数据库
非关系型数据库:
面向检索的列式存储:
HaBase
BigTable
面向高并发的缓存存储Key-Value:
Redis
MemcacheDB
面向海量数据访问的文档存储
MongoDB
CouchDB
专业术语:
数据库:存储数据的集合,提供数据存储的服务。
数据:实际上指的是描述事物的符号记录。
数据库管理系统:是位于人与操作系统之间一层数据管理软件。
数据库管理员:负责数据库创建,使用及维护的专门人员。
数据库系统:数据库管理员,数据库系统及数据库组成的整个单元。
分类
DDL Data Definition Language 数据定义语言
用于完成对数据库对象(数据库,表,视图,索引等)的创建修改删除
DML Data Manipulation Language 数据操作语言
用于完成对数据表中的数据的添加,删除,修改操作
DQL Data Query Language 数据查询语言
用于将数据表中的数据查询出来
DCL Data Control Language 数据控制语言
用于完成事务管理等控制性操作
SQL基本语法
SQL指令不区分大小写
每条SQL表达式结束之后都以;结束
SQL关键词之前以空格进行分隔
SQL之间可以不限制换行(可以有空格的地方就可以有换行)
DDL操作
显示当前mysql中的数据库列表:
show databases
创建数据库:
create database xxx
创建前判断是否存在:
create database if not exists xxx
指定数据库编码:
create database xxx character set utf-8
显示指定数据库的创建语句
show create database xxx
修改数据库字符集:
alter database gyq character set gbk
删除数据库(同时会删除数据库中所有表和数据)
drop database if exists xxx
切换数据库:
use xxx
创建数据表:
CREATE TABLE students(
stu_num CHAR(10) NOT NULL UNIQUE,
stu_name VARCHAR(20) NOT NULL,
stu_age INT NOT NULL,
stu_gender CHAR(2) NOT NULL,
stu_tel CHAR(11) NOT NULL UNIQUE,
stu_qq VARCHAR(11) UNIQUE
);
显示表
SHOW tables
查询表结构
DESC students
删除表
DROP TABLE IF EXISTS xxx
修改数据表名
.ALTER TABLE students RENAME TO stus
修改数据表字符集
ALTER TABLE stus CHARACTER SET utf8
添加列
ALTER TABLE stus ADD stu_remark VARCHAR(200)
修改列名和类型
ALTER TABLE stus CHANGE stu_remark stu_info TEXT
修改列的数据类型
ALTER TABLE stus MODIFY stu_info VARCHAR(100)
删除列
ALTER TABLE stus DROP stu_info
MySQL数据类型
数值类型
tinyint:占用一个字节,-128-127,无符号:0-255
smallint:两个字节,-32768-32767,无符号:0-65535
mediumint:三个字节,-2^23-2^23-1,无符号:2^24-1
int :
bigint:
float:4字节,单精度
double:8字节,双精度
decimal:decimal(10,2)表示一共10位,小数位占两位
字符串类型
char:0-255字节,定长字符串,最多可以占255个字节,内容少于指定时自动以空白补齐
varchar:0-65535字节,可变字符串,指定最大长度()
tinyblob:0-255字节,存储二进制字符串
blob:0-65535字节,存储二进制字符串
mediumblob:0-1677215
longblob:0-4294967295
tinytext:0-255字节,文本数据
text:0-65535
mediumtext:0-1677215
longtext:0-4294967295
日期类型
在MySQL数据库中可以使用字符串来存储时间,但如果需要基于时间段进行查询操作,不方便
date:只能存放年月日,2022-01-22
time:只存时分秒,11:22:30
year:年份,2022
datetime:年月日时分秒,2022-06-66 11:22:55
timestamp:时间戳,20220506 111022
字段约束
保证数据有效性,完整性,正确性的手段
常见约束:
非空约束:not null 此列值必须提供
唯一约束:unique 在多条数据中此列值不能重复
主键约束:primary key 非空+唯一,唯一标识数据中的一条数据
声明主键的两种方法在列后+primary key或在表最后一行+primary key(列名)
在表创建之后添加主键约束:alter table xxx modify xxx primary key
联合主键:将数据表中的多列组合在一起作为主键:在表最后一行+primary key(列名1,列名2)
创建联合 组建
外键约束:foreign key 建立不同表之间的关联关系