一,数据库概述
1.什么是数据库?
-
数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合.
-
文件系统,数据的仓库
2.数据库管理系统?
-
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。
-
软件
-
数据库=数据的集合+数据库软件
注意:通常情况下,经常会用数据库来表示他们使用的数据库软件,这经常会引起混淆,确切的说,数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。
3.常见的关系型数据库
-
MYSQL :开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费.
-
Oracle:收费的大型数据库.Oracle公司的产品.Oracle收购SUN公司,收购MYSQL.
-
DB2:IBM公司的数据库产品,收费的.银行系统中.
-
SQLServer:MS公司.收费的中型的数据库.
-
SyBase:已经淡出历史舞台.提供了一个非常专业数据建模的工具PowerDesigner.
-
SQLite: 嵌入式的小型数据库,应用在手机端.
-
和java相关的数据库: mysql,oracle
二,sql概述
1.什么是sql?
-
SQL:Structure Query Language。(结构化查询语言),通过sql语法操作数据库
-
SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。
-
各数据库厂商(mysql,oracle,Sql Server)都支持ISO的SQL标准。 普通话
-
各数据库厂商在标准的基础上做了自己的扩展。 数据库的方言
2.sql的分类
-
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
CREATE、 ALTER、DROP
-
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
INSERT、 UPDATE、 DELETE
-
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
grant
-
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。---重点
SELECT
三,对数据库的CRUD
1,创建数据库
1.1语法
create database 数据库名 [character set 字符集][collate 校对规则]
字符集(charset):是一套符号和编码。
校对规则(collation):是在字符集内用于比较字符的一套规则,
2.查看数据库
2.1查看所有的数据库
-
show databases;
2.2查看数据库的定义
-
show create database 数据库名
3.删除数据库
-
drop database 数据库名;
4.修改数据库
-
alter database 数据库名 character set 字符集;
注意:
- 是utf8,不是utf-8
- 不是修改数据库名
5.其它操作
- use 数据库名; 切换数据库
- select database(); 查看正在使用的数据库
注意:
-
在创建表之间一定要制定数据库. use 数据库名
四,对表的CRUD
1.创建表
1.1语法
create table 表名(
列名 类型 约束,
列名 类型 约束,
列名 类型 约束
);
int 字段;
字段(列名) int;
1.2 类型
-
整型 int——
点型: float, float(5,2)--> 999.99, -999.99
-
字符串: char(10); 固定长度,最大可以放10个字符 . 'aa ', 手机号码: 11位
varchar(10);可变长度,最大可以放10个字符. 'aaa'
-
文件: BLOB 二进制
注意: 在公司,存文件是把文件放在服务器(电脑)上,存放文件的路径.
-
时间类型
date: yyyy-MM-dd; datatime:日期和时间; timeStamp: 时间戳
1.3 约束,
-
即规则,类型集合里面的泛型 List<String> list ;
-
作用:保证用户输入的数据保存到数据库中是正确的
约束种类:
- not null; 非空
- unique;唯一约束, 后面的数据不能和前面重复
- primary key;主键约束(非空+唯一); id:作为数据的唯一标识,通常给id int类型设置主键约束,auto_increment null
- auto_increment;自动增长列
id类型
- 通常给id int类型设置主键约束,auto_increment
- 通常给id设置为varchar类型,UUID
1.4练习
-
创建一张学生表(含有id字段,姓名字段,性别字段. id为主键自动增长)
2.查看表
2.1查看所有的表
show tables;
2.2查看表的定义结构
desc 表名;
3.修改表
3.1语法
- 增加一列;alter table 表 add 字段 类型 约束;
- 修改列的类型约束; alter table 表 modify 字段 类型 约束 ;
- 修改列的名称,类型,约束;alter table 表 change 旧列 新列 类型 约束;
- 删除一列; alter table 表名 drop 列名;
- 修改表名 ; rename table 旧表名 to 新表名;
4.删除表
drop table 表名;
五,对表里面数据的CRUD
1.插入数据
insert into 表(列,列..) values(值,值..);
insert into 表 values(值,值....)
注意:
- 没有赋值的列,系统自动赋为null
- 列名与列值的类型、个数、顺序要一一对应。
- 值不要超出列定义的长度。
- 如果插入空值,请使用null
- 插入的日期和字符串,使用引号括起来。
命令行插入中文数据报错:
- 关闭服务, net stop mysql
- 修改配置文件 my.ini中客户端的编码为gbk
- 重新打开命令行,开启服务, net start mysql
2.更新记录
2.1语法
update 表 set 字段 = 值 ,字段 = 值 [where 条件]
3.删除记录(表还在)
3.1语法
delete from 表 [where条件];
truncate table 表;
区别:
- DELETE 删除表中的数据,表结构还在;删除后的数据可以找回
- TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。删除的数据不能找回。执行速度比DELETE快。
4.查询记录
4.1语法
select [列名,列名] [*] [聚合函数][distinct 字段] from 表名 [WHERE --> group by -->having--> order by]
4.2.去重查询 (distinct 字段)
-
把价格重复的给筛选
select dinstinct price from product;
4.3别名查询 (字段 as 别名, as可以省略)
-
查询商品名称和商品价格,商品价格通过别名‘价格’来显示
4.4运算查询(+,-,*,/等)
-
把商品名,和商品价格+10查询出来
4.5条件查询
注意:
1.between...and...: 包含临界值 eg: between 3000 and 6000相当于: 3000<=price<=6000
2.模糊查询,like和通配符一起使用:
% ;多位(0~n) _ ;一位
4.6排序; order by 列名 asc(默认) desc
4.7聚合函数(--->聚集函数)
聚合函数是用来做纵向运算的函数
- count(*|字段);统计指定列不为NULL的记录行数
- sum();计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0
- max();计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
- min();计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
- avg();计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0
4.8分组 (group by 列)
-
根据商品类别分组,统计不同商品类别的个数
-
根据商品类别分组,统计不同商品类别的总价格
注意:
-
凡和聚合函数同时出现的列名,一定要写在group by 之后
4.9分组后筛选(having)
- having是分组后筛选,不能离开group by 单独存在
- 有having一定有group by,有group by 不一定有having
where和having的区别
- 1.having是在分组后对数据进行过滤.where是在分组前对数据进行过滤
- 2.having后面可以使用聚合函数(统计函数)where后面不可以使用聚合函数
- 3.WHERE是分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
顺序: select...from...where...group by...having...order by