从零开始学Java-09 数据库基础

数据库基础

什么是数据库

数据库是存储和管理书记的仓库
我们常说的数据库是:关系型数据管理系统,即数据库服务器

Java与数据库

应用程序:向数据库请求数据,并显示结果
数据库服务器:存储数据

一、 SQL概述

1、什么是SQL

结构化查询语言:Structured Query Language
作用:客户端使用SQL 来操作服务器
标准:IOS制定,对DBMS的统一操作方式

2、sql语法

  • sql语句可以在当行或者多行书写,已分号结尾
  • 可以使用空格和缩进增强语句的可读性
  • MYSQL不区分大小写,建议使用大写

3、语句类型

DDL:数据定义语句,用于定义数据库对象、库、表、列等
create、drop、alter,修改:库、表结构
DML:数据操作语言,原来定义数据库记录:
insert,delete,update
DCL:数据库控制语言,用来定义访问权限 和安全级别
DQL:数据库查询语句,查询数据
select

4、数据类型

  • int :整形
  • double:浮点型;double(6.2) 表示最多6位,其中必须两位小数
  • decimal:浮点型;不会出现精度缺失
  • char :固定长度字符串类型
  • varchar:可变长度字符串类型
  • text(clib):字符串文本类型
  • data:日期类型,格式为:yyyy-MM-dd
  • time: 时间类型,格式为:hh:mm:ss
  • timestamp: 时间戳类型

二、语句

1、库

show database;
CREATE DATABASE 【xxx】;
user 【xxx】;

//指定数据库的编码
ALTER ADTABASE [xxxx] CHARACTER SET utf-8
//删除数据库
DROP DTABASE [if exist] [xxx]

2、表

2.1 DDL 定义数据库和表
//建表
CREATE TABLE (IF NOT EXISTS) 表名(
列名 列类型,
列名 列类型,
...
列名 列类型
)

SHOW TABLES;//显示所有表
SHOW CREATE TABLE 【表名】;//查看指定表的建表语句
DESC 【表名】;//查看表结构
drop table 【表名】;//删除表

//修改表名
ALTER TABLE 【表名】;
//添加列
	ALTER TABLE 【表名】 ADD(
	列名 列类型,
	...
	)
//修改列类型
ALTER TABLE 【表】 MODIFY 【列】 列类型
//修改列名
ALYER TABLE 【表】 CHANGE[【原列名】 【新列名】 列类型
//删除列
ALTER TABLE 【表】 DROP 【列】
//修改表名
ALTER TABLE【表原名】RENAME TO 【新表名】

TRUNCATE TABLE 【表名】;先DROP表。再create 表,且无法回滚
2.2 DML 操作数据库
INSERT INTO 【表名】(列名1,列名2,.....)
			  VALUES(列值1,列值2,....)

UPDATE【表名】SET
			列名1=列值1,
			列名2=列值2,
			...
			where 条件

DELETE FROM 【表名】(where 条件)
2.3 DCL数据控制

一个项目创建一个用户,一个项目对应着一个数据库
这个用户只能对应这个数据库的权限

1、创建用户
CREATE USER 用户名@IP地址 IDENTIFIED BY '密码‘;//用户在指定ip上登录
CREATE USER 用户名@’%‘ IDENTIFIED BY '密码‘;//用户在任意ip上登录

2、给用户授权
GRANT 权限1,权限2, .... ON 数据库.* TO 用户名@IP地址 
>权限、用户、数据库
>给用户分派在指定的数据库上的指定的权限
>GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE.SELECT ON mydb1.* TO 用户@IP地址
>GRANT ALL ON mydb1.* TO 用户@IP地址

3、撤销授权
REMOVE 权限1,....,权限n ON mydb1,* from 用户名@IP地址

4、查看权限
SHOW GRANTS FOR 用户名@IP地址

5、删除用户
DROP USER 用户名@IP地址
2.4 DQL 数据查询语句
select * from  【table】 
-- 列运算
 1. 数量类型的可以做四则运算
  select a*2 from table;
 2. 字符串类型可以做连续运算
 select  concat('str',a) from table;
 3. 转换nul
select IFNULL(a,0)+1000 from table; 
 4. 别名
select distinct 列1 as xxx from 【table】

-- 条件控制
--- 条件查询
=,>,< ,in,bentween等
---模糊查询
like "_"  下划线 匹配一个字符,% 匹配0-N个任意字符

--升序 asc 降序 desc

--聚合函数:某列的运算
count:总行数
MAX  :最大值
MIN : 最小值
SUM:总数
AVG:平均数

--分组查询
group by

--limit a,b    从第a条开始 总共查b条

三、MySQL

1、备份和恢复

1)、 导出SQL脚本
  • 数据库连接根据导入导出
  • mysqldump -u用户名 -p密码 数据库名称>生成的脚本文件路径: mysqldump -uroot -p123 mydb1> c:\mydb1.sql
2)、 恢复
  • ①不要登录mysql 在cmd控制台下,

  • 先删除mydb1库,再创建mydb1库

  • mysql -uroot -p123 mydb1<c:\mydb1.sql

  • ②进入mysql数据库,

  • source c:\mydb1.sql

2、主键

  • 非空、唯一:当表的某一列被指定为主键后,该列就不能为空,不能重复
create table s(
sid char(10) primary key,
name varchar(20)
);

create table s(
sid char(10) ,
name varchar(20),
primary key(sid)
);

alter table s add primary key(sid);
//删除主键: alter table s drop primary key;
  • 主键自增长:由于主键非空唯一,常指定主键类型为整型,自增长来保证非空唯一
create table s(
sid char(10) primary key auto_increment,
name varchar(20)
);
alter table s change sid sid int auto_increment
//删除主键: alter table s drop primary key;
  • 非空
建表的时候对字段设置  not null
  • 唯一
建表的时候对字段设置  unique

3、外键

  • 外键必须是另一表的主键的值
  • 外键可以重复
  • 外键可以为空

4、多表查询

去除 笛卡尔积

  1. 合并结果集

要求被合并的表中,列的类型和列数相同
union 去除重复行
union all 不去除重复行

  1. 连接查询
  • 内连接
方言(当前数据库支持):select * from t1,t2 where t1.xx = t2.xx;
标准: select * from t1 inner join t2 on ti.xx = t2.xx
自然: select * from  t1 natural join t2 
  • 外连接
左外:左表无论是否满足条件都查,右表满足条件查,不满足条件为null
select * from  t1 left outer join t2 on t1.xx = t2.xx
自然: select * from  t1 natural left outer join t2 on t1.xx = t2.xx

右外:右表无论是否满足条件都查,左表满足条件查,不满足条件为null
select * from  t1 right  outer  join t2 on t1.xx = t2.xx
自然:select * from  t1 natural right outer join t2 on t1.xx = t2.xx

全链接:可以使用union来实现
  • 子查询:查询中还有查询(多个select 关键字)

where后 作为条件
from后作为表

select * from t1 where t1.cid  in (select id from c ) 

select *  from (select * from t2 where id =3  ) t2 where 

以上为个人学习总结,如有错漏,希望能得到沟通以及指正,非常感谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值