数据库:其本意就是存储数据的仓库;
也可以理解为一种文件系统,知识用特殊的格式将数据保存起来,用户可以对数据中的数据进行增/删/改/查等操作
数据保存的方式:
保存到内存:
(优点:保存到堆内存,速度快.缺点:断电或者程序退出就,数据就清除了)
数据保存到普通文件:
优:可以持久的保存 缺:增删改查繁琐,且效率低
数据保存在数据库:
优 :永久保存,可以通过专门的sql语句操作数据库
对大量的数据信息进行管理,高效的数据处理
数据库管理系统:(DBMS:DataBacs Management System)
操作和管理数据库的大型软件,就是对数据库的创建/使用/维护,对数据库进行统一管理和控制,保证数据的安全性和完整性,用户通过数据库管理系统来对数据进行操作,访问数据库里的数据
管理系统有多个数据库,每个数据库有多个表
表中存放着数据
如图:
Mysql的介绍:
开源免费的数据库,已经被Oracle收购了
常用的数据库:Mysql ,Oracle
为什么要用Mysql呢?
答: 1>开源免费 2>功能足够强大,足以应付web应用开发
SQL语句:
sql概念: 结构化的查询语言,简称sql语句,(说白了就是对数据库操作的一种语言:sql语句)
作用:通过sql语句我们可以方便对数据库中的表,数据库,进行操作,sql语句是所有数据库的规范标准.
Mysql:有自己的mysql执行语句
Oracle:有自己的Oracle执行的语句
都有相同的共同点(好比:sql(普通话)/mysql(家乡话方言)/Oracle(特有方言))
SQL语句的分类:
DDL: 数据库定义语言 主要是操作数据库,数据表,表中的列
DML: 数据库操纵语言 主要是操作数据库中表中的数据,对数据进行增删改
DQL: 数据库查询语言 主要是操作数据库中表中的数据,对数据进行各种花式查询
DCL: 数据权限控制语言 主要是操作数据中的用户以及权限
TCL: 数据库事务控制语言 主要是操作数据的事务
重点:对DML和DQL的掌握
表的每一列的头:称为字段
表的每一行:称为每一条记录
DDL是操作 数据库,表,表中的列:
a.操作数据库
增:
创建一个数据库:
create database 数据库名;
创建一个数据库 指定编码:
create database 数据库名 character set gbk;
创建一个数据库,如果不存在创建
create database ifnot exists 数据名;
删:
drop database 数据库名;
drop database if exists 数据库名;
改:
alter database 数据库名default character set 字符集;
//修改数据库的编码
查:
show databases;//查询所有数据库
show create database 数据库名;//查看某一个数据库的信息
b.操作数据库中的表
在对表进行操作时 必须先选中数据库
a. select database(); 查看当前选中数据库
b. use 数据库名;
增:
创建一个新表******
create table 表名(
字段名 数据类型 [约束],
字段名 数据类型 [约束],
);
如:
create table student(
id int,
name varchar(20),
birthday date(没有逗号)
);
删:
droptable 表名;
droptable if exists 表名;
改:
renametable 表名 to 新表名;//修改表名
altertable 表名 character set 字符集;//修改表的字符集
查:
showtables;//查询当前数据库中所有的表
desc 表名;//查看某一张表的结构
showcreate table 表名;//查看某一张表的创建信息
快速创建一张结构一样的表:
create table 新表名 like 原表;
c.操作数据库表中的列
增:
altertable 表名 add 列名 类型;
删:
altertable 表名 drop 列名;
改:
altertable 表名 change 旧列名 新列名 类型;//修改列名
alter table 表名 modify 列名 新的类型;//修改数据类型
查:
desc 表名; 查看表的所有列
DML(重点掌握)******
作用: 对表中的数据 进行增删改
增:
全字段:
insert into 表名(字段1,字段2,字段3...) values(值1,值2,值3 ...);
省略格式:
insertinto 表名 values(值1,值2,值3 ...);
部分字段:
insert into 表名(字段1,字段3) values(值1,值3);
删:
deletefrom 表名; //全删
truncate表名; //摧毁这张表,创建一个新的空表
deletefrom 表名 where 字段名 = 值;//删除某一条符合条件的记录
面试题:
delete删除全部数据和 truncate 删除全部数据的区别:
a.delete是一条一条删,性能较低,不会重置自动增长值
b.truncate是先摧毁再重建,性能较高,会重置自动增长值
改:
update表名 set 字段名 = 值; //把所有记录的该字段值改成薪值
update表名 set 字段名 = 值 where 字段名=值;//按照要求修改某条记录的某个字段
update表名 set 字段1 = 值1,字段2 = 值2 where 条件;//按照要求修改
某条记录的多个字段
蠕虫复制:
快速先创建一张结构一样空表
createtable 新表名 like 要复制的表名;
快速复制一张表的所有数据
insertinto 新表名 select * from 要复制的表名;
DQL(重点掌握)******
作用:对表中的数据 进行各种花式查询
简单查询
标准格式:
select * from 表名;
a.只查询指定的几个字段
select 字段1,字段2from 表名;
b.给查询后的列 起个别名
select 字段1 [as] 别名1,字段2[as] 别名2 from 表名;
c.给查询的表 起个别名 (多表查询时,才有用)
select 字段1,字段2from 表名 as 表别名;
d.去重查询
select distinct 字段from 表;
面试的坑:
select distinct 字段1.字段2from 表;// 只有该记录的字段1 和 字段2 都相同,才算重复
select distinct *from 表;//只有两个记录完全一样,才算重复
e.计算查询
i.和固定值计算
SELECTmath*10 FROM student;
ii.两个列的值计算
SELECTmath+english FROM student;
条件查询
比较查询: > < >=<= = != <>
select * from 表名where 字段 > 值;
逻辑查询: and or not
select * from 表名where age >=10 and age <=20;
范围查询(集合查询)
seelct * from 表名where age between 10 and 20;
select * from 表名where age in (10,20,30,40,50,60,70,80,90,100);
模糊查询
select * from books where bookname like '天龙%';
在模糊查询中 _ 表示任意一个字符
在模糊查询中 % 表示任意多个字符
排序查询
a.单列排序
b.多列排序
聚合查询
分组查询
分页查询
三大范式
范式: 设计数据库表的规则好的数据库设计对数据的存储性能和后期的程序开发
1>原子性:每一列不可再拆分
2>一张表只描述一件事
3>从表的外键必须使用主表的主键
多表查询:分为内连接和外连接
内连接:分为隐式内连接和显示内连接
外连接:左外连接和右外连接
笛卡尔积就是左表和右表的的每条对数据的组合
含有没用的数据,所以是错误的