数据库简介

数据库

SQL

MySQL数据库

数据库

数据库就是一个文件系统,访问数据的时候需要通过标准的SQL语言来完成。

关系型的数据

保存的实体与实体之间的关系。(用户、商品、订单)

常见的数据库

Oracle 公司Oracle(甲骨文)数据产品,收费的大型的数据库。
MySQL 开源的,被Oracle收购了,小型的数据库。5.x版本免费,6.x收费了。
SQLServer 微软的,收费的中型的数据库。
DB2 IBM公司收费的大型的数据库。
SyBASE PowerDigener软件(非常牛)

MySQL的简介

  1. 卸载(卸载最干净的方法)
    * 找到MySQL的安装路径,找到my.ini的配置文件。
    * basedir=“C:/Program Files (x86)/MySQL/MySQL Server 5.5/” 安装的路径
    * datadir=“C:/ProgramData/MySQL/MySQL Server 5.5/Data/” MySQL存储数据的路径
    * 通过控制面板卸载MySQL
    * 找到上面的两个路径,删除就ok了。
  2. 安装
    * 安装路径不要有中文
    * MySQL默认端口是3306,不要修改。
    * 设置MySQL的编码集(采用UTF-8的编码)
    * 要把黑窗口的勾勾选上。
    * 设置用户名的密码:两行都是密码,第一行是密码,第二行是确认密码。
    * 安装完成。
  3. 访问:
    cmd > 输入命令 mysql -u root -p 回车
    输入密码 回车
  4. 密码重置
    1.停止mysql服务:
    services.msc 进入到服务界面
    2.在cmd>输入一个命令:
    mysqld --skip-grant-tables (开启一个mysql服务,不需要进行认证.)
    3.新打开一个cmd窗口
    mysql -u root -p 不需要输入密码.就可以进入.
    4.输入命令 show databases;查看数据库,输入命令 use mysql;使用mysql数据库。
    5.修改密码的语句:
    update user set password=password(‘root’) WHERE user=‘root’;
    6.将两个窗口都关闭.
    7.任务管理器中结束(mysqld)进程.
    8.重启mysql服务

MySQL之间的关系(看图)

总结:一个数据库的服务器中有多个数据库,一个数据库中有多个表,
每个表有多个字段。字段和Java中类的属性是对应的。
每一条记录对应是一个Java实例对象。
sql

SQL语句

  1. SQL的简介
    * Structured Query Language, 结构化查询语言
    * 非过程性的语言
    * 过程性的语言:我下一条语句,需要依赖上一条或者上几条语句。
    * 非过程性的语言:写一条语句,就会执行一个结果。
    * Oracle开发PL/SQL,只能在Oracle使用。
    * SQL Server、Sybase的T-SQL
  2. SQL语言分类
    * DDL(数据定义语言)
    * 创建数据库、创建表
    * DML(数据操纵语言)
    * 插入数据(insert) 修改数据(update) 删除数据(delete)
    * DCL (数据控制语言)
    * if else
    * DQL(数据查询语言)
    * 查询数据 select
  3. 数据库(CURD – 增删改查)
    a. 创建数据库
    语法:create database 数据名称; 创建一个数据了。
    create database 数据库名称 character set 编码 collate 校对规则;
    校对规则:和编码是成对出现的。
	创建一个名称为mydb1的数据库。
		create database mydb1;
	创建一个使用utf8字符集的mydb2数据库。
		create database mydb2 character set 'utf8';
	创建一个使用utf8字符集,并带校对规则的mydb3数据库。
		create database mydb3 character set 'utf8' collate 'utf8_bin';

b. 查看数据库 show databases;
查询数据库的定义 show create database 数据库;
show create database mydb2;
c. 删除数据库 drop database 数据库名称;

	查看当前数据库服务器中的所有数据库
		show databases;
	查看前面创建的mydb2数据库的定义信息
		show create database mydb2;
	删除前面创建的mydb1数据库
		drop database mydb1;

d. 修改数据库
语法:alter database 数据库 character set 编码 collate 校对规则;

	 练习:查看服务器中的数据库,并把其中某一个库的字符集修改为gbk
		alter database mydb2 character set 'gbk';

e. 其他的操作
切换数据库 use db_name;
查看当前使用的数据库 select database();
4. 表(table)(CURD – 增删改查)
语法
create table 表名(
字段1 类型(长度) 约束,
字段2 类型(长度) 约束,
字段3 类型(长度) 约束,
字段4 类型(长度) 约束
);
注意
* 表名小括号,后面要有分号。
* 每一行字段后面要有逗号,但是最后一行没有逗号。
* 数据的类型后面有长度,如果是字符串类型,长度必须加。如果其他类型可以不加。默认长度。int 默认长度11

public class User{
	int id;
	String name;
	String pass;
	String eamil;
	String nikename;
}
  1. 数据的类型
    字符串型
    VARCHAR、CHAR
    * varchar和char区别:
    * varchar(经常使用) 长度是可变的。 name varchar(8) 存入数据hello,但是如果存入helloworld报错了。
    * char 长度不可变的。 name char(8) 存入的数据hello,如果不够用空格补全。
    * 效率高:char效果。
    大数据类型(一般不用
    BLOB、TEXT
    BLOB:二进制文件
    TEXT:字符
    数值型
    TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
    逻辑型 对应boolean
    BIT
    日期型
    DATE、TIME、DATETIME、TIMESTAMP
    * date 只包含日期
    * time 只包含时分秒
    * datetime和timestamp包含日期和时分秒区别:
    * datetime需要手动录入时间。
    * timestamp不传入数据,默认选择当前系统时间。
	创建表的练习
		create table employee(
			id int,
			name varchar(20),
			gender varchar(10),
			birthday date,
			entry_date date,
			job varchar(100),
			salary double,
			resume text
		);
  1. 约束(单表)
    主键约束
    * 标识标记该条记录。 通过primary key声明主键。(默认唯一、非空)
    * auto_increment 数据库维护主键。自动增长。
    唯一约束
    * 值是唯一的。使用unique声明
    非空约束
    * 值不能为空 not null

使用desc 表名; 查看表的信息
show tables ; 查看当前库内所有表名
show create table 表名; 查看建表语句和字符集

7. 删除表
drop table employee;
8. 修改表
alter table 表名 add 字段 类型(长度) 约束; – 添加字段
alter table 表名 drop 字段; – 删除字段
alter table 表名 modify 字段 类型(长度) 约束; – 修改类型或者约束
alter table 表名 change 旧字段 新字段 类型(长度) 约束 – 修改字段的名称
rename table 表名 to 新表名; – 修改表名
alter table 表名 character set utf8; – 修改字符集

在上面员工表的基本上增加一个image列。
	alter table employee add image varchar(20);
修改job列,使其长度为60。
	alter table employee modify job varchar(60);
删除gender列。
	alter table employee drop gender;
表名改为user。
	rename table employee to user;
修改表的字符集为utf8
	alter table user character set utf8;
列名name修改为username
	alter table user change name username varchar(30);
  1. 数据(CURD – 增删改查)
    添加数据
    * insert into 表名 (字段1,字段2,字段3…) values(值1,值2,值3…); 有几列就插入多少的值。
    * insert into 表名 values(值1,值2,值3…); 插入所有的列
    * 注意
    * 数据与字段的类型相同。
    * 字段长度需要控制。
    * 字符串或者日期类型需要使用’’
    * 解决中文乱码的问题
    [client]
    port=3306
    [mysql]
    default-character-set=gbk
    * 修改完需要重新启动服务。
    sql
  2. 修改语句 update
    * 语法: update 表名 set 字段=值,字段=值… [where ]
    * 如果没有where条件,默认更新所有的记录。
    * 有where提交,选择某一条记录。
  3. 删除数据 delete
    语法:delete from 表名 [where ]; 删除数据
    truncate 表名; 删除所有的数据
    truncate 和 delete的区别
    * truncate删除数据,先删除整个表。再创建一个新的空的表。(效率)
    * delete删除数据,一条一条删除的。(*****)
  4. 事物(insert update delete)
    删除表中名称为’班长’的记录。
    * delete from user where username=‘班长’;
    删除表中所有记录。
    * delete from user;
    使用truncate删除表中记录。
    * truncate user;
  5. 查询语句 select
    * 语法: select * from 表名; 查询所有(字段)
    select 字段名1,字段名2,字段名3 from 表名; 显示查询字段名
    select DISTINCT 字段名 from 表名; 去除重复的数据。
    * 查询的列可以运算
    * 可以使用别名:使用as 别名 并且as可以省略。
    * 使用where条件过滤
  6. 常用的符号
    > < <= >= = <>(不等于)
    in(范围内取内容)
    like – 模糊查询 写法:like ‘张_或者%’; _和%区别:占位符。_只一个%可以有多个
    %的写法 like ‘%张’; 结果XXX张
    like ‘张%’; 结果张XXX
    like ‘%张%’; 只要有张就行
    is null – 判断是否为null
    and – 并且
    or – 或者
    not – 不成立
  7. 排序 使用order by 升序默认的(asc)/降序(desc)
    * 出现select的语句末尾。
  8. 聚集函数
    * count 获取数量
    练习:
    统计一个班级共有多少学生?
    select count() from stu;
    统计数学成绩大于90的学生有多少个?
    select count(
    ) from stu where math > 90;
    统计总分大于150的人数有多少?
    select count() from stu where (math+english+chinese) > 150;
    * sum 求和(忽略null值) 可以同ifnull(xxx,0)
    统计一个班级数学总成绩?
    select sum(math) from stu;
    统计一个班级语文、英语、数学各科的总成绩
    select sum(math),sum(english),sum(chinese) from stu;
    统计一个班级语文、英语、数学的成绩总和
    select sum(ifnull(math,0)+english+chinese) from stu;
    select sum(math)+sum(english)+sum(chinese) from stu;
    统计一个班级语文成绩平均分
    select sum(chinese) / count(
    ) from stu;
    * avg 平均数
    练习:
    求一个班级数学平均分?
    select avg(math) from stu;
    求一个班级总分平均分
    select avg(ifnull(math,0)+english+chinese) from stu;
    * max 最大值
    select max(math) from stu;
    * min 最小值
    select min(math) from stu;
    * group by 分组(一起使用) 条件过滤需要是having,不能使用where
    练习:对订单表中商品归类后,显示每一类商品的总价.
    select product,count(*),sum(price) from orders group by product;
    练习:查询购买了几类商品,并且每类总价大于100的商品
    select product,sum(price) from orders group by product having sum(price) > 100;
    小结 select 语句 : S-F-W-G-H-O 组合 select … from … where … group by… having… order by … ;
    顺序不能改变

多表操作

外键约束
  1. 引入外键约束?
    * 作用:保证数据的完整性。
  2. 添加外键
    语法:alter table emp add foreign key 当前表名(dno) references 关联的表(did);
    alter table emp add foreign key emp(dno) references dept(did);
数据库的设计
  1. 一对多 生活中一个部门下有多个员工,一个员工属于一个部门。
    * 在多方需要添加一个字段,并且和一放主键的类型必须是相同的。
    * 把该字段作为外键指向一方的主键。
    * 一方部门
    * 多方员工
    一对多
  2. 多对多
    * 学生可以选择多门课程,课程又可以被多名学生选择。
    * 建表原则:
    * 拆开两个一对多的关系,中间创建一个中间表,至少有两个字段。作为外键指向两个多对多关系表的主键。
    多对多
  3. 一对一
    * 公司,地址,一个公司对应的是一个地址。 一张表包含公司名称、公司地址。
    * 根据公司的业务需求,会把公司这张表拆开,形成一对一。
    * 建表原则
    * 主键对应
    * 唯一外键对应
    一对一
多表的查询
  1. 笛卡尔积的概念:

    表A				表B
    aid aname		bid	bname
    a1	aa1			b1	bb1
    a2	aa2			b2	bb2
    				b3	bb3
    
    * 查询的语法
    	select * from 表A,表B;	返回的结果就是笛卡尔积。
    	
    结果:
    a1	aa1			b1	bb1
    a1	aa1			b2	bb2
    a1	aa1			b3	bb3
    a2	aa2			b1	bb1
    a2	aa2			b2	bb2
    a2	aa2			b3	bb3
    
    select * from dept,emp;
    
  2. 多表查询
    * 内连接(用的比较多)
    * 普通内连接
    * 前提条件:需要有外键的。
    * 提交关键字 inner join … on
    select * from dept inner join emp on dept.did = emp.dno;
    * 隐式内连接(用的是最多的)
    * 可以不使用inner join … on关键字
    select * from dept,emp where dept.did = emp.dno;
    * 外连接
    * 左外链接(看左表,把左表所有的数据全部查询出来)
    * 前提条件:需要有外键的。
    * 语法: 使用关键字 left [outer] join … on
    select * from dept left outer join emp on dept.did = emp.dno;
    * 右外链接(看右表,把右表所有的数据全部查询出来)
    * 前提条件:需要有外键的。
    * 语法: 使用关键字 right [outer] join … on
    select * from dept right join emp on dept.did = emp.dno;

  3. 子查询
    * 查询的内容需要另一个查询的结果。
    select * from emp where ename > (select * from emp where 条件);
    any 任意
    all 全部
    >any 大于结果的最小值
    >all 大于结果的最大值

  4. 内连接与外连接的区别
    区别
    =============================================================================

create table dept(
	did int primary key auto_increment,
	dname varchar(30)
);

create table emp(
	eid int primary key auto_increment,
	ename varchar(20),
	salaly double,
	dno int
);


查看所有人所属的部门名称和员工名称?
	select dept.dname,emp.ename from dept,emp where dept.did = emp.dno;
	select d.dname,e.ename from dept d,emp e where d.did = e.dno;
	
统计每个部门的人数(按照部门名称统计,分组group by  count)
	select d.dname,count(*) from dept d,emp e where d.did = e.dno group by d.dname;
	
统计部门的平均工资(按部门名称统计 ,分组group by  avg)
	select d.dname,avg(salaly) from dept d,emp e where d.did = e.dno group by d.dname;
	
统计部门的平均工资大于公司平均工资的部门(子查询)
	* 公司的平均工资
		select avg(salaly) from emp;
	* 部门的平均工资
		select d.dname,avg(e.salaly) as sa from dept d,emp e where d.did = e.dno group by d.dname having sa > (select avg(salaly) from emp);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值