Java学习笔记12

数据库简介

数据库(DataBase,DB):指长期保存在计算机的存储设备上的,按照一定规则组织起来,可以被各种用户或应用共享的数据集合

数据库管理系统(DataBase ManageMent System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理的控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据

数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的

数据库:存储、维护和管理数据库的集合

三大范式

第一范式:无重复的列

当关系模式R的所有属性都不能再分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了

第二范式:属性完全依赖与主键【消除部份子函数依赖】

如果关系模式R满足第一范式,并且R的所有非主属性都完全依赖与R的每一个候选关系属性,称R满足第二范式,简记为2NF。第二范式要求数据库表中的每个实例或行必须可以被唯一的区分。
实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。这个唯一属性被称为主关键字或主键、主码

第三范式:属性不依赖于其他非主属性【消除传递依赖】

设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF。第三范式要求一个数据库表中不包含已在其他表中已包含的非主关键字信息

mysqld --initialize --console初始化数据库

SQL语言(CRUD)

create、read、update、delete

SQL语句的分类

  1. DDL(Data Definition Language):数据定义语言,用类定义数据库对象:库、表、列等
  2. DML(Data Manipulation Language):数据操作语言,用来定义数据库记录增删改
  3. DCL(Data Contorl Language):数据控制语言,用来定义访问权限和安全级别
  4. DQL(Data Query Language):数据查询语言,用来查询记录

DDL操作数据库

1. 创建

编码方式为gb2312,utf-8,gbk,iso8859-1
用于创建数据库

1. CREATE DATABASE 数据库名

2. CREATE DATABASE 数据库名 CHARACTER SET 编码方式

3. CREATE DATABASE 数据库名 CHARACTER SET 编码方式 COLLATE 排序规则

2. 查看数据库

查看当前数据库服务器中的所有数据库

SHOW DATABASES

查看创建的数据库的具体定义信息

SHOW CREATE DATABASE

3. 修改数据库

ALTER DATABASE 数据库名 CHARACTER SET 编码方式

4. 删除数据库

DROP DATABASE 数据库名

5. 其他语句

查看当前使用的数据库

SELECT DATABASE()

切换数据库

USE DATABASE()

DDL操作表

创建新表

CREATE TABLE 表名(
	列名1 数据类型 [约束],
	列名2 数据类型 [约束],
	列名3 数据类型 [约束]
);

!!!表名,列名是自定义,多列之间使用逗号间隔,最后一列的逗号不能写

常用数据类型:

1. int:整形
2. double:浮点型:例double(5,2)表示最多5位,其中必须有2位小数,默认支持四舍五入
3. char:固定长度字符串类型
4. varchar:可变长度字符串类型
5. text:字符串类型
6. blob:字节类型,保存文件信息
7. date:日期类型,yyyy-MM-dd
8. time:时间类型,hh:mm:ss
9. timestamp:时间戳类型yyyy-MM-dd hh:mm:ss 会自动赋值
10. datetime:日期时间类型 yyyy-MM-dd hh:mm:ss

其他表操作

删除表

DROP TABLE 表名

查看当前数据库中所有的表

SHOW TABLES

查看表的字段信息

DESC 表名

增加列:在上面员工表的基本上再增加一个image列

ALTER TABLE 表名 ADD 旧例名 新列名 新数据类型

列名修改

ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型

练习

表名 card
列名 数据类型
cardid int
cardnum varchar(20)
regDate date

需求:

  1. 创建该表
  2. 将card表名修改为CardInfo
  3. 添加delDate(注销时间)列
  4. 将cardnum改为varchar(30)
  5. 删除regDate列
  6. 删除cardInfo表

DML操作

DML是对表中的数据进行增删改操作

  1. 插入操作
INSERT INTO 表名(字段名1,字段名2) VALUES(值1,值2)
1. 多个列和多个值之间用,隔开
2. 列名要和列值一一对应
3. 非数值的列值要加单引号
4. 当给所有列添加数据时,可以省略字段名
5. 如果插入空值,请使用null
6. 插入的日期和字符一样,都使用引号引起
  1. 删除操作
DELETE FROM 表名
或
TRUNCATE TABLE 表名

delete删除,表结构还在,删除后的数据可以找回
truncate删除,直接drop表,然后再创键同样的一个新表,数据不能找回,但是执行速度比delete快
3. 修改操作

UPDATE 表名 SET 列名1=列值1,列名2=列值2 WHERE 条件

UPDATE 表名 SET 列名1=列名1+列值1 WHERE 条件     在原有数据的基础上,增长列值1

SQL的运算符

  1. 算数运算符
+、-、*、/、%
  1. 赋值运算符
= 赋值方向从右向左
  1. 逻辑运算符
and(并且)、or(或者)、not(非)
  1. 关系运算符
>、<、>=、<=、!=、=、<>

DCL操作

创建用户

CREAT USER 用户名@指定ip IDENTIFIED BY 密码

CREAT USER 用户名@客户端ip IDENTIFIED BY 密码-----指定ip才能登陆

CREAT USER 用户名@% IDENTIFIED BY 密码---任意ip都能登录

用户授权

GRANT 权限1,权限2(例如insert) ON 数据库名.* TO 用户名@IP;----给指定用户授予指定数据库的指定权限

GRANT ALL on *.* TO 用户名@IP;---给指定用户授予所有数据库所有权限

用户权限查询

SHOW GRANDS FOR 用户名@IP

撤销用户权限

REVOKE 权限1,权限2 ON 数据库名.* FROM 用户名@IP

删除用户

DROP USER 用户名@IP

DQL数据查询

数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端
查询返回的结果集是一张虚拟表

SELECT 列名 FROM 表名 WHERE->BROUP BY->HAVING->ORDER BY	条件
  1. where:限定条件/行条件
  2. group by grouping_columns:对结果分组
  3. having codition:分组后的行条件
  4. order by sorting_columns:对结果分组
  5. limit offset_start,row_count:结果限定

简单查询

SELECT 列名或* FROM 表名 

条件查询

在查询时使用where子句,查询满足where子句的数据
WHERE子句可以使用如下关键字:

=、!=、<>、<、<=、>、>=、BETWEEN...AND; IN(set); IS NULL; AND; OR; NOT;
!= 语句查询时 可以简化为 NOT IN
例如:
select * from stu where id!=1001 or id !=1002 or id!=1003
-------------->>>>>>
select * from stu where id NOT IN(1001,1002,1003)

同理=和IN 在查找时有时也可以替换使用

between...and 和>= + <=的区间查询也能替换

模糊查询

模糊查询需要使用关键字LIKE

语法:列名 like  ' 表达式 ' //表达式必须是字符串
通配符:
_ 下划线:任意一个字符
% 百分号:任意0-n个字符
例如:
查询姓名姓高并且由三个字组成的学生
select * from stu where sname LIKE '高__'(这里是两个下划线)

字段控制

1. 去除重复记录:
SELECT DISTINCT 列名 FROM 表名

2. 查看两个数值类型字段之和:
SELECT *, 列1 + 列2 FROM 表名

3. 将null值转化为0:
SELECT *, IFNULL(列名,0) FROM 表名

4. 别名:
SELECT * AS 别名 FROM 表名

排序

基本语法

ORDER BY 列名 asc或desc
asc:升序
desc:降序

多列排序

查询所有数据,按 列1 降序排序,如果列1相同,则按照列2升序排序
SELECT * FROM 表名 ORDER BY 列1 DESC,列2 ASC

聚合函数

聚合函数是用来做纵向运算的函数

COUNT(列名):统计指定列不为NULL的记录行数
MAX(列名):计算指定列的最大值,如果指定列是字符串类型,使用字符串排序运算
MIN(列名):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
SUM(列名):计算指定列的数值和,如果指定列类型不是数值类型,计算结果为0
AVG(列名):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0

group_by

当需要分组查询的时候,需要使用GROUP BY子句。
如果查询语句中有分组操作,则select后面能添加的只能是聚合函数和被分组的列名

SELECT 被分组的列,聚合函数 FROM 表名 GROUP BY 被分组的列
SELECT 被分组的列,聚合函数 FROM 表名 GROUP BY 被分组的列1,被分组的列2

HAVING子句

having必须跟在group by语句后

例:
SELECT 列名,SUM(列名) FROM 表名 GROUP BY 列名 HAVING SUM(sal) > 9000

having和where的区别

  1. having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
  2. having后面可以使用分组函数(统计函数),where后面不可以使用分组函数
  3. where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组;而having是对分组后的数据进行约束

limit

用来限定查询结果的起始行以及总行数

limit  开始下标  显示条数
或
limit  显示条数,默认从0开始

DQL总结

数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端

查询返回的结果集是一张虚拟表
*表示所有列

1. SELECT 要查询的列名称
2. FROM 表名称
3. WHERE 限定条件//行条件
4. GROUP BY grouping_columns //对结果分组
5. HAVING condition //分组后的行条件
6. ORDER BY sorting_columns//对结果分组
7. LIMIT offset_start ,row_count //结果限定

使用开发工具实现数据库操作

Navicat

SQLYog(小海豚)

DQL总结

数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端

查询返回的结果集是一张虚拟表
*表示所有列

1. SELECT 要查询的列名称
2. FROM 表名称
3. WHERE 限定条件//行条件
4. GROUP BY grouping_columns //对结果分组
5. HAVING condition //分组后的行条件
6. ORDER BY sorting_columns//对结果分组
7. LIMIT offset_start ,row_count //结果限定

使用开发工具实现数据库操作

Navicat

SQLYog(小海豚)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值