1 数据库的基本概念
数据库就是存储和管理数据的仓库,其本质上就是一个文件系统,还是以文件的方式,将数据存储在电脑上。
数据存储方式的比较:
| 存储方式 | 优点 | 缺点 |
|---|---|---|
| 内存 | 速度快 | 只能临时存储数据 |
| 文件 | 数据可以永久存储 | 只能使用IO流操作文件,效率较低 |
| 数据库 | 可以永久存储数据,方便存储和管理数据 | 占用资源 |
从上面不难看出,使用数据库存储数据,用户可以非常方便的对数据库中的数据进行增删改查操作。
在开发中常见的数据库软件有:
| 数据库名 | 介绍 |
|---|---|
| MySql数据库 | 开源免费的数据库,一般主要用在中小型项目中 |
| Oracle数据库 | 收费的数据库,安全性较高 |
| DB2 | 收费型的超大型数据库,主要用于银行 |
| SQL Server | 微软公司的收费数据库,只能运行在windows系统上 |
2 数据库管理系统
数据库管理系统(DBMS)是一种操作和管理维护数据库的大型软件,而MySql就是一个数据库管理软件,安装MySql软件的电脑又被称为数据库服务器。
数据库管理系统的作用:建立、维护和使用数据库,对数据库进行统一的管理。
数据库管理系统、数据库以及表三者之间的关系:MySql中管理着很多数据库,一个数据库就对应一个实际应用,在每个数据库中又存在着多张表,每张表分别对应着各自的实际业务,表中存储的正是业务所需的数据。
数据库表:数据库是以表为单位进行数据的存储,并且每张表都会对应java中一个实体类,每个字段都有对应的数据类型。
3 SQL
SQL是结构化查询语言,是一种特殊的编程语言,是一种数据库查询和程序设计语言,用于存储数据以及查询、更新和管理关系型数据库系统。
SQL的作用:
- 是所有关系型数据库的统一查询规范,不同的关系型数据库都支持SQL
- 不同数据库之间的SQL会存在一些小差别
SQL语法格式:SQL语句可以单行或者多行书写,以分号结尾,需要注意的是SQL是不区分大小写的,一般关键字大写,数据库名和列名小写。(小建议在书写SQL语句是可以适当的缩进和空格,便于阅读)
在SQL中写注释的方式:
| 注释语法 | 说明 |
|---|---|
| --空格 | 单行注释 |
| /* */ | 多行注释 |
| # | MySql特有的单行注释 |
SQL可以细分为四大类:数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)以及数据控制语言(DCL),相关介绍见下表
| 分类 | 说明 |
|---|---|
| 数据定义语言 | 简称DDL,用来定义数据库对象:数据库,表,列等 |
| 数据库操作语言 | 简称DML,用来对数据库中表的记录进行更新 |
| 数据库查询语言 | 简称DQL,用来查询数据库中表的记录 |
| 数据库控制语言 | 简称DCL,定义数据的访问权限和安全级别及创建用户 |
在这里我们着重学习数据库操作语言DML和数据库查询语言DQL。
4 DDL操作数据库
创建数据库
有两种方式:
- create database 数据库名;创建指定名称的数据库
- create database 数据库名 character set 字符集; 创建指定名称的数据库,并且制定了数据库所使用的字符集
实例代码:
create database student;
create database student character set utf8;
查看数据库
| 命令 | 介绍 |
|---|---|
| use 数据库名; | 切换数据库 |
| select database(); | 查看当前正在使用的数据库 |
| show database; | 查看MySql中所有的数据库 |
| show create database 数据库名; | 查看数据库的定义信息 |
实例:
use student;
select database();
show databases;
show create database student;
修改数据库
修改数据库的字符集语法格式:alter database 数据库名 character set 字符集;
实例:
alter database student character set gbk;
删除数据库
删除数据库语法格式:drop database 数据库名;
实例:
drop database student;
5 DDL操作数据表
MySql中常见的数据类型有:
| 类型 | 说明 |
|---|---|
| int | 整形 |
| double | 浮点型 |
| varchar | 字符串型 |
| data | 日期类型,只有年月日(yyyy-MM-dd) |
注意在MySql中表示字符串类型的有varchar和char两种,两者之间的区别是:
- char是固定长度的,根据定义的字符串长度分配空间
- varchar不是固定长度的,会根据实际字符串的长度进行空间的分配
因此char类型适合存储长度固定的字符串,而varchar适合存储在一定范围内的,有长度变化的字符串。
创建表
创建表的语法格式:
create table 表名(
字段名称1 字段类型(长度),
字段名称2 字段类型 --最后一行不用加逗号
);
实例
use student;
create table category(
cid int,
cname varchar(20)
);
create table test1(
tid int,
tdate date
);
快速创建一个表结构相同的表(复制表结构)
语法格式:
create table 新表名 like 旧表名
实例
create table test2 like test1;
查看表
查看表有两种方式,语法格式是:
show tables; --查看当前数据库中所有表名
desc 表名; ---查看数据表的结构
实例:
show tables;
desc category;
删除表
删除表有两种方式,语法格式如下:
drop table 表名; --删除表
drop table if exists 表名; --判断表是否存在,存在就删除,否则就不执行任何操作
实例:
drop table test1;
drop table if exists test1;
修改表
修改表名的语法格式: rename table 旧表名 to 新表名;
实例:
rename table category to cat;
修改表的字符集的语法格式:alter table 表名 character set 字符集;
实例:
alter table cat character set utf8;
向表中添加列,关键字add,具体语法格式:alter table 表名 add 字段名称 字段类型;
实例:
alter table cat add cdesc varchar(20);
修改表中列的数据类型或长度,关键字modify,具体语法格式:alter table 表名 modify 字段名称 字段类型
实例:
alter table cat modify cdesc varchar(30);
修改表中列的名称,关键字change,具体语法格式:alter table 表名 change 旧列名 新列名 类型(长度);
实例:
alter table cat change cdesc desction varchar(50);
删除列,关键字drop,具体语法格式:alter table 表名 drop 列名;
实例:
alter table cat drop desction;
6 DML操作表中数据
SQL中的数据库操作语言DML用于对表中的数据进行增删改操作。
插入数据
想表中插入数据的语法格式:
insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2.....);
实例:
insert into student (sid, sname, sex, address) values (1,'孙悟空','男','花果山');--插入全部字段,将所有字段值写出来
insert into student values(2,'猪八戒','男','高老庄');--插入全部字段,不写字段名
insert into student (sid,sname,sex) values (3,'沙悟净','男');--插入指定字段的值
注意事项:
- 值与字段要一一对应,个数和数据类型都要相同
- 值的数据大小,必须在字段指定的长度范围内
- varchar char date类型的值必须使用单引括起来(不建议使用双引号)
- 插入空值时,可以不写或者插入null
- 当要插入指定字段的值,必须写上列名
更改数据
不带条件的修改数据,语法格式:
update 表名 set 列名 = 值;
带条件的修改数据,语法格式是:
update 表名 set 列名 = 值 [where 条件表达式:字段名 = 值];
使用具体实例:
update student set sex='女';
update student set sex='男' where sid=3;
update student set sex='女',address='北京' where sid=1;
删除数据
删除所有数据的语法格式:
delete from 表名
删除满足条件的数据,语法格式:
delete from 表名 [ where 字段名= 值 ]
实例:
delete from cat;
delete from student where sid=3;
注意删除表中的数据有两种方式:
- delete from 表名;这种方式不推荐,有多少记录就执行多少次删除操作,效率较低
- truncate table 表名;推荐这种方式,先删除整张表,然后再创建一张一模一样的表,效率较高
7 DQL查询表中数据
简单查询
查询不会对数据的数据进行修改,只是一种显示数据的方式,具体语法格式是:
select 列名 from 表名
实例
select * from emp;
select eid,ename from emp;
别名查询
别名查询可以将信息查询出来,并将列名改为中文别名,使用关键字 as
实例
select eid as '编号',
ename as '名字' from emp;
数据去重
将查询出来的数据中的重复部分删除,使用关键字 distinct
实例:
select distinct ename from emp;
条件查询
根据查询条件查询表中符合条件的数据,简单来说就是对表中的数据进行过滤,具体语法格式是:
select 列名 from 表名 where 条件表达式
由于用到了条件表达式,就需要介绍运算符,有比较运算符、逻辑运算符,详细介绍如下:
比较运算符
| 运算符 | 说明 |
|---|---|
| > < <= >= = < > != | 大于、小于、大于(小于)等于、不等于 |
| between ...and... | 显示在某一区间的值 |
| in(集合) | 集合表示多个值,是用逗号分隔 in中的每个数据都会作为一次条件,只要满足就显示 |
| like '%张%' | 模糊查询 |
| is null | 查询某一列为null的值,特别注意不能写成:=null这种 |
逻辑运算符
| 运算符 | 说明 |
|---|---|
| and && | 多个条件同时成立 |
| or || | 多个条件任意一个成立 |
| not | 不成立,取反 |
条件查询实例:
当使用模糊查询时,需要通配符的问题,关于通配符介绍如下:% 表示匹配任意个字符串,而_表示匹配一个字符
模糊查询实例:
select *
from emp where ename='孙悟八';
select *
from emp where salsry=2000;
select * from emp where salsry!=2000;
select * from emp where salsry>2000;
select *
from emp where salsry between 2000 and 8000;
select *
from emp where salsry=2000 or salsry=5000 or salsry=8000;
select *
from emp where ename like '孙%';
select * from emp where ename like '%悟_';
select *
from emp where dept_name is null;