1.oracle数据库(大型) ------oracle甲骨文
2.DB2数据库(大型) ------IBM
3.sqlserver(中型) ------微软
4.MySQL(小型) ------oracle
持久化技术
1.IO
2.数据库
数据库:就是一个文件系统,通过标准SQL语言操作文件系统中数据 ---- 用来存放软件系统的数据
关系型数据库
1.卸载
1.查找数据文件的位置
因为数据文件与安装文件可能不在一个位置
删除数据库后可以不会将数据文件删除
datadir=""
2.正常删除数据库
在控制面板jiangmysql删除
3.删除数据文件
4.将mysql遗留文件删除
2.安装
mysql数据库的默认端口3306
1.关于编码
选择utf8
2.目录配制环境变量path
3.设置root密码
测试是否成功
cmd------>mysql -u root -p 回车
输入密码
如果看到 mysql 成功
3.重置mysql密码
1.在运行中输入 services.msc 停止mysql服务
2.在cmd下输入 mysql --skip-grant-tables 启动服务器 光标不动(不要关)
3.新打开cmd 输入mysql -u root -p
use mysql;
update user set password=password('abc') WHERE User='root' ;
4.关闭两cmd 任务管理器中结束mysql进程
5.在服务管理页面 重启mysql服务
mysql -h 主机名 -p 端口 -u用户名 -p
输入密码
如果自己电脑安装了mysql服务器
mysql -u root -p
数据库中表中的一个字段相当于一个属性
一个记录相当于一个类的对象
sql结构化查询语句
sql非过程性语言
sql分类(四种)
DDL 数据定义语言 用来定义数据库 表等
DML 数据操纵语言 update insert delete
DCL 数据控制语言 用户权限事务处理
DQL(重点) 数据查询语言 select
create database 数据名;
CHARACTER SET:知道数据库采用的字符集
COLLATE:指定数据库字符集的比较方式
create database 数据库名 character set 编码集 collate 校验;
create database 数据库名 character set="utf8" collate="utf8_general_cl";
` ` `
### 2.使用数据库
```sql
use 数据库名称
drop database 数据库
show databases; //查看所有数据库
show create database 数据库名称 ; //查看指定数据库
alter database 数据库名 character set="编码集" collate="校验"
select database();
创建一个名称为mydb1的数据库.
create database mysql;
创建一个使用utf8字集的mydb2
create database mydb2 character set="utf8" ;
创建一个使用utf8字符集,并带校对规则的mydb3数据库
create database mydb3 character set="utf8" collate="utf_general__cl";
create table 表名(
字段名称1 类型,
字段名称2 类型,
..........
字段名称n 类型
)
create table 表名(
字段名称1 类型,
字段名称2 类型,
..........
字段名称n 类型
) character set=编码 collate=校验
与java中的类型对比
Java类型 mysql类型
整型
byte| short |int |long TINYINT| SMALLINT INT | BIGINT
boolean boolean
true/false
字符串(字符) varchar char
char与varchar的区别
varchar 可变`字符串 "hello"
char 不可变 "hello"
日期 日期
java.util.Date date -----2010-10-10
java.sql.Date datetime--2010-10-10 11:11:11
java.sql.Time time 11:11:11
java.sql.TimeStamp timestamp 15852156486
小数
float float
double double
decimal
数据库中的大数据
在数据库中的大数据使用 IO
InputStream/OutPutStream------------blob
Reader/Writer ------------text
---------------------------
date 日期
time 时间
timestamp 时间戳
datetime 日期时间
示例:创建一个类
create table student(
id int,
name varchar(10),
birthday date,
chinese decimal(5,2) [总共5位数,小数点后面2为]
)
show tables;
show create table student;
1.创建 create database 库名 character set="utf8" collate="utf8_general_ci";
2.删除 drop database 库名
3.查看 show database; show create database 库名;
4.修改数据库编码 alter database 库名 character set="" collate="";
5.切换数据库 use 库名;
6.查看当前使用的数据库 select database();
create table 表名(
字段名 类型
) character set="" collate="";
int
varchar char
float double decimal
text blob
date datetime
desc 表名;
show tables;
show create table 表名;
表的约束一共有六种
约束用来保证数据有效性和完整性
主要介绍三种
主键有两个特点:非空 唯一
id int primary key auto_increment, //mysql字段自动增长:auto_increment
//sqlserver自动增长:identity(1,1)
//oracle自动增长 sequence序列
name varchar(5) not null unique, //不为空,且唯一
alter table 表名 add 字段 类型;
alter table users add birthday date;
alter table 表名 modify 字段 类型 ;
alter table users modify birthday datetime;
alter table 表名 drop 字段;
alter table users drop birthday;
alter table users change 旧字段名称 新字段名称 类型;
alter table users change birthday entry_date date;
alter table 表名 character set=字符集;
rename table 表名 to 新表名
rename table users to emp;
alter table 表名 drop primary key;
主键不能自动增长
create table users(
id int primary key auto_increment,
name varchar(20),
birthday date,
)
select * from 表名; 查看表中的数据
基本格式1
insert into 表名(字段,...) values(值);
insert into users(id,name,birthday) values (1,'Tom','1990-1-1');
注意:只有数值类型可以不使用引号,其他类型必须要单引号;
基本格式2
如果是对表中所有字段添加操作
insert into 表名(字段名) values(值1,...);
基本格式3
可以对指定字段进行添加操作
insert into 表名(字段名) values(值,...) ;
insert into users(id,name) value (1,'james');
如果表中的某个字段是auto_increment ,添加时可赋值为null,这样会自动增长
插入中文纪录
insert into users values(null,'张三');
错误原因:mysql client 采用默认字符集
修改编码
1.控制台命令行.
show variable like 'character%';
修改客户端编码
set character set_client =gbk;//输入时编码正确
修改结果编码集
set character_set_result=gbk;//查看时编码正确
2.修改配置文件. my.ini
在my.ini文件中找到
[client]
port=3306
[mysql]
default-character-set=编码
这样修改后对
character_set_client
character_set_results
character_set_connection
编码进行修改
这三个是针对客户端
基本格式:
update 表名 set 字段=值;
一般情况下会加上where条件,如果不加,是对整个字段赋值
update 表名 set 字段1=值2,字段2=值2... where id=1,id=2;
delete from 表名 where 条件
如果不加条件,相当于删除表中的所有数据
delete是删除记录的,不能删除某一列数据
只能删除表中内容的,而不能删除表结构
面试题:
delete.drop,truncate区别
1.detelete,truncate是用来删除表中数据,而drop是删除表结构
truncate 是先将表结构删除,再重新创建表结构.
2. delete 是受事务控制的,可恢复(DML)
truncate不受事务控制,不可恢复(DDL)
3.delete可以对指定数据进行删除
truncate 只能删除所有数据
drop table 表名
truncate table 表名
select 字段 from 表名;
select * from 表;代表查询表中所有字段值,不建议用
如果支队某几个字段进行查询
select 字段1,字段2,... from 表名.
distinct 用来消除重复值
1.在select 语句可以对查询的字段进行运输
2.可以使用as给字段起别名(as可以省略)
查询学生三科成绩,显示时,显示姓名与三科总成绩.
select name as '姓名' ,(Chinese+math+English)/3 as '平均分' from student;
select name,Chinese,math+10,English from student;
查询时可以使用where子句进行过滤查询
where 经常使用的运算符
1.关系运算符 > < <= >= = <>或!=
select name,Chinese,math,English from student where Chinese in(85,95);
2.in
3.逻辑运算符 and or not
4.is null 判断空 is not null 判断非空
5.like 模糊查询
6.between ...and...
相当于 大于 and 小于
注意 between后是小值 and后面是大值
查询语文成绩在80-90之间的
select * from student where Chinese<=90 and Chinese>=80;
select *from student where Chinese between 80 and 90;
查询姓张的人的信息
select * from student where name like '张%'
查询姓名为关某某的人的信息
select * from student where name like '张_' (只找一个)
%匹配多个字符
_匹配一个字符
排序:
select 字段 from 表名 where 条件 order by 字段 asc|desc;
asc 升序
desc 降序
注意order by 位于语句的最后
select * from student order by Chinese desc;
select id,name,Chinese,math,English,Chinese+math+English as total from student order by Chinese+math+English desc;
select count(*) from 表名;
查看表中的记录条数
如:
统计一个班共有多少个学生?
select count (name) from student;
统计一个班语文成绩大于90的学生有多少个?>
select count(*) from student where Chinese>90;
统计总分大于260的认输有多少个?
select count(*) ,Chinese+math+English from student where Chinese+math+English>260;
统计符合条件的列的总和
聚集函数当某一字段的值为null时,会自动转换为0
而如果null与其它值做+运算,结果为null.
mysql中有一个函数ifnull
ifnull(English,0)
求所有学生的总成绩如果成绩为null,按0取
select sum(ifnull(Chinese,0)+ifnull(math,0)+ifnull(English,0)) from student;
练习
统计一个班的数学总成绩?
select sum(math) from student ;
统计一个班的语文,数学,英语各科总成绩
select sum(Chinese),sum(math),sum(English) from student;
统计一个班的语文平均分
select sum(Chinese)/count(Chinese) from student;
平均值
select avg(math) fromstudent;
求一个班的总分平均分
select (sum(Chinese)+sum(math)+sum(English))/count(*) from student;
select avg (Chinese+math+ifnull(English,0)) from student;
max/min
求列中最大值/最小值
练习:
求班级最高分和最低分
select max(Chinese+math+English) as '最高分', min(Chinese+math+English) as '最低分' from student;
在数据外面对数据库内容进行备份
cmd > mysqldump -u 用户名 -p 数据库名 > 文件名.sql
首先要创建出数据库,然后进入数据库,在数据库内部进行
source 文件名.sql //在mysql内部使用
在外部对数据库进行恢复也必须先把数据库创建出来
mysql -u 用户名 p 数据库名<文件名.sql //在cmd下使用
在实际开发中,表与表之间是存在关系的,也就是说,表与表之间存在关联
关联分为几种:
例如 人与身份证
假设 人具有 姓名 年龄
身份证 身份证号
1对1关系怎样关联数据?
在任意一方只要添加一个字段来描述关联关系
例如:员工与部门
假设:员工有信息: 员工信息 员工工资
部门信息: 部门名称 部门地址
一个员工属于一个部门,一个部门可以有多个员工
1对多关系怎样关联数据?
在多的地方添加1的一方的地段信息
例如:老师与学生
老师属性 姓名
学生属性 姓名
多对多关系怎样关联数据?
会产生一张中间表,用来描述多对多关系.
使用外键约束,可以保证数据完整性
笛卡尔积
多表关联sql
select* from 表1,表2;
select * from emp,dept;
怎样消除笛卡尔积
将要查询的两种表的关联数据进行等式比较.
select * from 表1,表2 where 表1,字段=表2,字段;
select * from emp inner join dept where emp.dept_id=dept.id;