数据库基础知识整理
前言:本章节属于数据库基础入门,知识体系不难,但是需要多敲代码,多练习,增强记忆和对SQL语言的理解,需要自己动手写出自己风格的思维导图,形成自己的理解风格及代码风格.理解SQL语言需要从DOS命令窗口手敲代码练习开始.敲代码练习只是进入学习的第一步,不要自我感觉良好,要用代码的风格表现自己的优秀.
一 数据库简介(从数据存储的方式来理解):
1.数组/集合:可以对数据进行临时性存储,当程序结束的时候,数据就被清空了.
2.文件(IO流):可以对数据进行永久性存储,但是不方便用户对数据进行精细化管理.
3.数据库:其实就是一个存储数据的仓库,其本质是一个文件系统,可以有规律的对数据进行存储,方便用户进行增删改查(CURD注:单词为缩写)的操作.(注:数据库才是实际开发中,我们存储数据的地方.)
二 常见数据库系统:
1.oracle:是Oracle公司产品,是大型的收费的数据库;
2.db2:是IBM公司的产品,是大型的收费的数据库;
3.SQLServer:是微软公司产品,是中型的数据库;
4.MySQL : 在oracle收购之后6.x版本开始收费,之前的版本是免费的;
5.SQLite:是小型的嵌入式数据库,应用在客户端开发中,比如安卓.
三 数据库系统MySQL的安装与卸载:
这个需要掌握,自己生存的依赖工具之一:
1.安装:首先关闭电脑自带的防火墙,彻底退出安全软件,根据电脑系统选择安装32位/64位系统;安装路径不要直接选择安装在盘符下并且不要出现空格/中文字符/特殊字符等.
2.卸载:卸载之前要对DATA数据进行备份,采用软件自带的卸载工具或者从电脑的控制面板中卸载,切记不要选用直接删除文件夹的方式;
3.容易出现的问题:如果是安装不成功,可以选择卸载重新装,或者换一个安装文件夹.如果一直是安装不成功,可能和系统有关,建议重新更换系统.如果电脑系统是一键Ghost安装的系统,极易发生安装不成功的情况.系统选择纯净版为佳.(建议Win7旗舰版 Win10专业版)
四 DB()数据库)/DBS(数据库系统)/DBMS()数据库管理系统)之间的关系:
简而言之:DBS(数据库系统)通常由DB(数据库)、DBMS(数据库管理系统)和软件组成。
DB (数据库)、DBS(数据库系统)、DBMS(数据库管理系统)说明:
1、DB (数据库):Database;
2、DBMS(数据库管理系统):Database Management System;
3、DBS(数据库系统):DataBase System.
五 什么是关系型数据库:
简言之:关系型数据库指的是实体与实体之间的关系.可以采用ER模型图进行描述.(注:ER模型图-Entity Relational Model 实体联系图).
六 如何登陆MySQL:
登陆前提是:查看MySQL服务是否开启.
查看方式一:我的电脑--右键--管理--服务和应用程序--服务--查找mysql服务
查看方式二: win + 字母R --services.msc -- 回车-- 查看MySQL服务
开启或者关闭MySQL服务:
方式一: 手动开启或者关闭.
方式二:(在DOS命令窗口中输入即可)
net start mysql //开启MySQL服务
net stop mysql //关闭MySQL服务
登陆方式一:Win+R--cmd--mysql -u root -p ---回车---出现entry password:---输入密码---回车进入--出现welcome界面.(在-u和root/root和-p之间存在空格).
登陆方式二:Win+R--cmd--mysql -uroot -p密码---回车,直接进入MySQL服务器
七 SQL语句认识:
SQL语句:对数据库(DBMS)进行交互访问(操作)的一种语言.(SQL-Structured Query Language: 结构化查询语言,用来操作DBMS).
备注:数据库是文件系统,使用标准SQL语句对数据库进行操作,标准SQL语句,在MySQL里面使用语句,在oracle、db2都可以使用这个语句.
SQL 语句分类:共四大类:DDL/DML/DCL/DQL
第一类:DDL (Data Definition Language数据定义语言)
* 创建数据库,创建数据库表
* 关键字create drop alter
第二类:DML (Data Manipulation Language数据操纵语言)
* 对表中的记录进行增加 修改 删除操作
* 关键字 insert update delete
第三类:DCL (Data Control Language数据控制语言)
* 数据库的编程的语言
第四类:DQL (Data Query Language数据查询语言)
* 对表中的记录进行查询的操作
* 关键字 select from where
八 SQL对数据库的操作(CURD):
1.C--增:create
采用默认码表创建数据库:create database 数据库名;
Eg:create databae exam; (数据库中默认存在test数据库).
采用指定码表创建数据库:create database 数据库名 character set '字符集名’ ;
Eg:create database Test character set ‘utf8’;
create database exam character set ‘gbk’;
注:MySQL中安装时选择的默认码表是’utf8’国际通用码表.创建数据库是未指定码表,默认是utf8.
2.U-改:update
修改指定数据库的码表
alter database 数据库名 character set '字符集名';
Eg:alter database Test character set ‘gbk’;
3.R-查:read
查看所有的数据库:
show databases;
查看指定的某个数据库(查的是该数据库的字符集)
show create database 要查看的数据库名;
Eg:show database Test;
show database exam;
4.D-删:drop
删除指定的数据库
drop database 数据库名;
5.使用指定的数据库:use
使用指定的数据库
use 数据库名;
九 SQL对数据库表的操作:
1.C--增:create
create table 数据表名(
字段名 数据类型(长度) [约束],
字段名 数据类型(长度) [约束],
字段名 数据类型(长度) [约束]
);
Eg:创建表user,字段id name password gender .
案例:
create table user(
Id int,
name vachar(20),
password vachar(20),
gender vachar(6)----------------------最后一行字段末尾没有;号.
);------------------------括号外面有一个;号.
约束讲解:
约束:
作用: 用来保证数据的完整性和安全性.
分类:
主键约束: primary key //auto_increment
唯一约束: unique
非空约束: not null
需求: 创建一个用户表(users):
create table users(
uid int,
username varchar(20),
password varchar(20),
salary double
);
添加约束之后的数据库表:
create table users2(
uid int primary key auto_increment,
username varchar(20),
password varchar(20),
salary double
);
MySQL的数据类型:
1.字符串型
VARCHAR、CHAR
* 当创建表时候,使用字符串类型,name varchar(40),指定数据的长度
* varchar和char的区别
** varchar的长度是可变的,比如 name varchar(5),存值a ,直接把a存进去
** char的长度是固定的,比如 name char(5),存值b,把b存进去,后面加很多空格
2.大数据类型
BLOB、TEXT
* 使用这个类型可以存储文件,一般开发,不会直接把文件存到数据库里面,存文件的路径
3.数值型
TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
* 对应java里面
byte short int long float double
4.逻辑性
BIT
* 类似java里面的boolean
5.日期型
DATE:用于表示日期 1945-08-15
TIME:用于表示时间 19:10:40
下面的两个类型可以表示日期和时间
DATETIME:手动添加时间到数据表里面
TIMESTAMP:自动把时间添加到表里面
2.U-改:alter
给数据表添加一列:
alter table 数据表名 add列名 列的类型 约束;
修改字段类型长度和约束
alter table 表名 modify字段名 类型(长度)约束;
修改字段名(列名):
alter table 表名 change旧字段名 新字段名 类型(长度)约束;
删除字段:
alter table 表名 drop字段名;
修改表名:
rename table 旧表名 to新表名;
修改表的字符集:
alter table 表名 character set字符集;
3.R-查:read
查看所有的数据表:
show tables;
查询指定的数据表(表结构)
desc 数据表名;
4.D-删:drop
删除指定的数据表
drop 数据表名;
十 SQL对数据表中的数据进行操作:
注意:
1. 值的个数必须和列的个数对应.
2. 值的类型和列的类型也必须对应.
3. 如果是数字类型可以直接写,其他类型用' '括起来,eg:’aaa’.
4. SQL语句不区分大小写.
5. SQL语句的结束标记是:分号;
6. 进行删除和修改操作之前,一定一定一定要备份.
1.C-增:
添加单条数据:
格式:
insert into 数据表名(列名1,列名2,列名3...) values(值1,值2,值3);
示例:
insert into users2(uid,username,password,salary) values(1, 'zs','123',1000);
insert into users2(username,password,salary) values('zs','123',1000);
insert into exam values(null,"张三",100,89,59);
批量添加:
insert into users2(username,password,salary) values('zl','111',6000),('tq','222',6000),('hb','333',6000);
如果添加的是中文, 有可能会添加不成功,原因是因为: DOS控制台是GBK码表,我们装MySQL的时候用的是UTF8,如何解决呢?
方案一: 临时解决.
set names 'gbk';
方案二: 永久解决.
修改 my.ini中的信息.
//将client的码表改为: gbk.
2.U-改:
update 数据表名 set列名1=值,列名2=值where 条件;
3.R-查:
基本的查询:
select * from 数据表名;
带条件的查询:
1. 算术运算符.
>, < ,>=, <=, =, !=(或者可以写作<>)
2. 逻辑运算符
and, or, not
3. 区间筛选
between 值1 and值2 //包含值1和值2这两条数据
4. 固定值筛选
in (值1,值2,值3);
5. 模糊查询
like '占位符';
%: 占n个位置.
_: 占1个位置.
4.D-删:
delete from 数据表名 where条件;
聚合函数:
sum()
max()
min()
avg()
count() //一般用于统计该表中有多少条数据.
补充案例:
create table user (
id int,
username varchar(40),
chinese int,
english int
)
* insert into user values(1,'lucy',100,30);
insert into user values(2,'mary',60,80);
insert into user values(3,'jack',90,20);
(1)查询user表里面的所有的数据
select * from user;
(2)查询user表里面用户名和语文成绩
select username,chinese from user;
(3)查询user表里面id=2的数据
select * from user where id=2;
(4)别名
* as 别名
select username as u1,chinese as c1 from user;
(5)distinct,去除表里面重复记录
* 语句 select distinct * from表名;
(6)where子句
第一,运算符 < > >= <=
* 练习:查询user表里面语文成绩大于60的所有的人员
select * from user where chinese > 60;
第二,in:在范围内
* 练习:查询user表里面英语成绩是80、90的人员的信息
select * from user where english in (80,90);
第三,and:在where里面如果有多个条件,表示多个条件同时满足
* 练习:查询user表里面语文成绩是100,并且英语成绩是30的人员的信息
select * from user where chinese=100 and english=30;
第四,得到区间范围的值
* 练习:查询user表里面语文成绩在70-100之间的值
写法一,select * from user where chinese >=70 and chinese <=100;
写法二,select * from user where chinese between 70 and 100;
第五,like:模糊查询
* 练习:查询user表里面username包含a的人员信息
select * from user where username like '%a%';
(7)查看当前的运行的数据库
select database();
(8)对表中查询的记录排序order by
* order by写在select语句的最后
第一,升序 order by 要排序字段 asc(asc可以省略,默认的情况下就是升序)
* 练习:对user表里面查询的数据,根据语文成绩进行升序排列
select * from user order by chinese asc;
第二,降序 order by 要排序字段 desc
* 练习:对user表里面的英语成绩进行降序排列
select * from user order by english desc;
----------------------------------------------------------------------------------------------
分组查询:关键字: group by
案例: 已知:创建一个商品表: product
create table product(
pid int primary key auto_increment,
pname varchar(20),
price double
);
insert into product values(null,'冰箱',2000),
(null,'冰箱',1000),
(null,'冰箱',1500),
(null,'洗衣机',2000),
(null,'电视机',3000),
(null,'洗衣机',1000),
(null,'电视机',10000);
1. 统计每类商品的个数.
select pname,count(*) from product group by pname;
2. 统计每类商品的总金额.
select sum(price) from product group by pname;
3. 统计每类商品的总金额,并且总金额大于4000
select pname,sum(price) sp from product group by pname having sp>4000;
4. 统计每类商品的总金额,并且总金额大于4000,然后按照总金额进行降序排列.
select pname,sum(price) sp from product group by pname having sp>4000 order by sp desc;
5. 统计每类商品的总金额,并且总金额大于2000,然后按照总金额进行降序排列,只统计单价在1500(包括)以上的商品.
select pname,sum(price) sp from product where price>=1500 group by pname having sp>2000 order by sp desc;
注意:
一个SQL语句中,各个语句体的位置:
select 列1,列2.. from表名 where分组前的条件筛选 group by分组的列 having分组后的条件筛选 order by排序的字段;
如果是分组前的条件筛选: 用where.
如果是分组后的条件筛选: 用having.
--------------------------------------------------------------------------------------------
习题:
1. where语句和having语句的区别是什么?
where语句用于做分组前的条件筛选,后边不能跟聚合函数.
having语句用于做分组后的条件筛选,后边可以跟聚合函数.
2. delete from 表名 和 truncate table表名 删除表之间有什么区别?
delete from 表名:只删除表中的数据, 对表结构没有任何影响. //主键接着往后+1,属于DML语句,可以和事务结合使用.
truncate table 表名:相当于把该表删除,然后创建一个和该表一模一样的表. //主键会重置(1),然后存储属于DDL.
结束语:本篇文章是总结了JavaWeb 数据库基础第一课内容,参考引用的有其他大神的知识点和案例内容,属于整理内容,为了表达对引用内容的尊重,故文章分类为 翻译 非原创.希望我们在学习的过程中要做到"能思 能写 能练",学习过程中要注意思考和练习,拒绝"只看不练的假把式",不要做很勤奋,做笔记很多但是就是不会的"劣质勤奋者".在不断的学习过程中形成自己的代码风格和思考风格,当然这种风格是良好有效的 而不是繁琐无效死钻牛角尖型.