一、理解数据库系统
数据库系统(Database system)= 数据库管理系统(DBMS,Database Management System)+ 数据库(DB,Database)
- 数据库(DB):即仓库,存储了一系列有组织的数据。
- 数据库管理系统(DBMS):数据库是由DBMS创建和操作的容器。
其中数据库管理系统(DBMS)可分为两类:
- 基于共享文件系统的DBMS,包括Microsoft Access 和FileMaker等,用于桌面用途,通常不用于高端或更关键的应用;
- 基于客户机-服务器的DBMS,包括MYSQL、Oracle以及Microsoft SQL Server等。
数据库基本构成(根据后端课程PPT整理):
- 一个数据库包含众多的表,在每个表中存放数据,且每个表都有自己的名字,表名具有唯一性。
- 表中具有一些特性,这些特性定义数据如何在表中存储,类似Java中的“类”。
- 表由一个或多个列组成(我们也成为字段),类似Java中的“属性”。
- 表中的数据是按行存储的,每一行类似Java中的“对象”。
具体实现为:
name | age | work | salary |
---|---|---|---|
Sharon | 20 | Student | 0 |
Jack | 30 | programmer | 30,000 |
二、MySQL
(一)简介
由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。MySQL是一个多用户、多线程的关系型数据库管理系统。 工作模式是基于客户机/服务器结构。目前它可以支持几乎所有的操作系统,同时也可以和php完美结合。
简单的来说 ,MySql是一个开放的、快速的、多线程的、多用户的SQL数据库服务器。
(二)MySQL语法规范
- 不区分大小写
- 每句话用 ; 或 \g 结尾
- 各子句一般分行写
- 关键字不能缩写也不能分行
- 用缩进提高语句的可读性
(三)简单操作
- 查询现有的数据库:
show databases;
- 新建数据库:
create database 数据库名称;
// 可通过show databases;查询数据库是否建立成功
- 进入数据库并进行简单操作:
use 数据库名称;
//我们可以顺便查询一下该数据库下的表
show tables;
- 在数据库中创建表:
use 数据库名称;
create table 表名(
//列名 字符格式 约束
);
- 查看或删除表:
//查询表的结构
desc 表名;
//删除表
drop table 表名;
- 插入一条数据或是多条数据:
insert into 表名 (想要插入数据的列) values (数据,中间用 , 隔开);
- 插入多条数据:
insert into 表名 (想要插入数据的列) values (数据,中间用 , 隔开),(数据),(数据),……;
- 通过具体实例感受创建表及数据的过程:
//引入数据库
use myjoiner;
//创建表
create table student(
id varchar(30),
age int,
name varchar(30),
birthday date);
//插入一条数据
insert into student(id,age,name,birthday) value(100,20,'Sharon','20010409');
//插入多条数据,注意此处我未插入id的值
insert into student(id,age,name,birthday) values(21,'Jack','20000503'),(20,'Branda','20010317'),(19,'Mary','20020709');
(四)更多操作…
该图是对上述实例的实现(此处后三个id为NULL),以下语句将根据该表student进行操作。
- 选择全部列的数据
SELECT * From student;
- 选择特定的列
SELECT age,name From student;
- 查询某范围
SELECT name From student WHERE age>=20 OR id>=103;
- 模糊查询
//搜索以S开头的name
SELECT name From student WHERE name LIKE 'S%';
更多用法请点击此处:mysql中like的用法
- 对数据排序
//从小到大排列
SELECT * From student ORDER BY age ASC;
//从大到小排列
SELECT * From student ORDER BY age DESC;
//如果没有ASC和DESC就默认是从小到大,且空值最小
//在对id进行排列的基础上,再考虑age的顺序
SELECT * From student ORDER BY id,age;
- AVG,MAX,MIN及SUM函数
//可以得到age的平均值,最小值,最大值以及四位同学的总和
SELECT AVG(age),MAX(age),MIN(age),SUM(age) From student;
- 计算某一数值出现的次数
//计算age=20的次数,对于此表student则返回2
SELECT count(*) From student WHERE age=20;
- 分组函数
//返回的是age列:20,21,19;即将相同的值归到一组
SELECT age From student GROUP BY age;
- 过滤分组:HAVING
HAVING类似于WHERE,但是不同点在于:WHERE在聚合前先筛选记录,也就是说作用在GROUP BY和HAVING前,而 HAVING子句在聚合后对组记录进行筛选。 例如:
SELECT name From student WHERE age>=20;
SELECT id,age From student GROUP BY id HAVING age>=20;
更多讲解请点击此处:mysql having的用法
- 多表间的查询(在此不提供表的具体内容)
//进行两个表间的不同列或范围的选择
SELECT name,age From table1 WHERE name='Sharon';
UNION
SELECT id,name,birthday From table2 WHERE id=102;
//进行两个表间相同列或范围的选择.如果表中列名相同,需要加‘table1.' 'table2.' 前缀(即表名前缀) ,如果列名不相同,则不需要前缀
SELECT table1.id,table2.name,birthday From table1,table2;
- 有关JOIN在此不做更多详述啦,奉上一篇超喜欢的博客 mysql的几种join
- 使用ON判断范围
HAVING类似于WHERE,但是不同点在于:ON在JOIN后判断范围。例如:
SELECT age,name From table1 JOIN table2 ON table1.age=table2.age;
- 3种分页查询方法
- limit m,n查询
//查询第m+1至m+n页,若m=0则可省略m
SELECT * From table1 limit m,n;
- limit m查询
//查询第m+1页至第n页
SELECT * From dept WHERE deptno>m ORDER BY deptno asc limit n;
//查询第m-n页至第m-1页
SELECT * From dept WHERE deptno<m ORDER BY deptno desc limit n;
- 以上两种方法混合使用
此处参考了Mysql的三种分页方法
- 子查询,即SELECT的嵌套
SELECT name From table1 where age in (
SELECT age From table2 WHERE id=100);
- insert的子插入(无需values)
//插入某几行列
insert into table1(id,name,age)
SELECT id,table2_name,age From table2;
//插入所有列
insert into table1
SELECT * From table2 WHERE age>==20;
- 更新数据
UPDATE student SET age=30 WHERE name='Sharon';
- 删除数据
//若无WHERE,则删除表中所有数据
DELETE From student WHERE name='Sharon';
暂时就先写这么多叭。