一,JAVAweb
就是用java的技术来开发网站
二,数据库
2.1 安装
- 第一步 下载mysql数据库(https://dev.mysql.com/downloads/mysql/)
-
第二步 环境变量配置
把mysql的安装目录复制好
然后编辑path 新建一个MYSQL下的bin目录
- 第三步 新建配置文件
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
将上述文本创建名为my.ini
文本文件放在mysql安装目录中
第四步 初始化mysql
在命令黑窗口 执行mysqld --initialize-insecure
命令,初始化mysql此时安装目录下会生成一个data文件夹第五步 注册mysql服务
在黑窗口使用mysqld -install
,回车
将mysql注册到自己计算机内成为一个服务-
第六步 启动与关闭mysql服务
net start mysql
net stop mysql
此时你的计算机就可以称为mysql服务器,也就是安装了mysql服务的机器
安装了某一种服务器软件的计算机,就称为服务器 第七步 修改默认密码
mysqladmin -u root password 1234
第八步 登录与退出
mysql -uroot -p1234
登录
exit
退出
如果你要操作别人电脑上的数据库就可以使用
mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)
需要对方的主机地址和端口号
2.2 卸载
- 第一步需要暂停mysql服务 ,黑窗口输入
net stop mysql
- 第二步
mysqld -remove mysql
- 第三步 删除对应环境变量
2.3 mysql数据模型
它是一个关系型数据库 也就是二维表组成的数据库。
如果不是表结构组成的数据库那就是非关系型数据库
- 优点:
格式一致,易于维护
存储磁盘中安全
使用通用sql语言,可用复杂查询
mysql创建的数据库就是磁盘中的文件夹
2.4 SQL的通用语法
sql语句可以以单行或多行书写,以;结尾。且不区分大小写,关键字建议大写
单行注释--
多行注释`/**/
DDL(数据定义语言)
操作数据库的
1.查询
show databases
2.创建
create databases 数据库名称
3.删除
drop database 数据库名;
drop database if exists 数据库名;
如果存在则删除
操作表的
1.创建表
create table 表名(
字段名1 数据类型1,
字段名2 数据类型2,
);
2.查询表
show tables
查询一共有哪些表desc 表名
查询表结构 如字段3.修改表
alter table 表名 rename to 新表名
//修改表名alter table 表名 add 列名 数据类型
//添加一列alter table 表名 drop 列名
//删除一列alter table 表名 modify 列名 数据类型
//修改列alter table 表名 modify 列名 新列名 数据类型
4.删除表
drop table 表名
drop table if exists 表名
如果存在删除
DML(数据操纵语言)
对表中数据进行增删改查操作
1.增加数据
insert into 表名(列名1,列名2) values(值1,值2);
指定列添加数据
insert into 表名 values(值);
//给全部列添加数据
INSERT INTO user values(2,'李四'),(3,'王五');
//批量添加多列数据
2.修改数据
update 表名 set 列名=值1,列名=值2 where条件
如将张三性别改为女
update user sex='女' where name = '张三';
3.删除数据
delete from 表名 where 条件
DQL(数据库查询语言)
对表中数据进行查询
1.基础查询
select 字段名 from 表名;//查询多个字段
select * from 表名;//查询所有数据
select distinct 字段列表 from 表名;//去除重复记录
as 起别名 可以省略as
2.条件查询
select 字段列表 from 表名 where 条件列表;
符号 | 功能 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
= | 等于 |
<>或!= | 不等于 |
between and | 范围内(包括) |
in | 多选一 |
like | 模糊查询 _代表一个字符 % 代表多个字符 |
is null | 是null |
is not null | 不是null |
and或&& | 并且 |
or或两个竖线 | 或者 |
not或! | 非 不是 |
3.排序查询
select 字段列表 from 表名 order by 排序字段名1 方式,排序字段名2 方式;
如有多个排序条件,当第一个条件值为相同时,执行第二个默认升序 desc 降序
查询学生信息,按照数学降序排序,如数学成绩一样安装英语升序排序
select * from student order by math desc,english asc;
4.分组查询
如一张学生表中都有男同学和女同学 ,那么我想查询男同学的平均分和女同学的平均分是多少.这是就需要分成两组 一男一女
在此之前需要先学习聚合函数,以便计算求和,平均分等
聚合函数(将一列作为整体纵向计算)
函数名 | 功能 |
---|---|
count(列名) | 统计数量 |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
select 聚合函数(列名)from 表名;
语法select 字段列表 from 表名 where 分组前条件限定 group by 分组字段名 having 分组后条件过滤
where和having的区别:
1 执行时机不同,where是分组前判断,不满足则不参与分组.having是对分组之后的结果进行过滤
2where不能对聚合函数进行判断,having可以
例 查询男同学和女同学各自数学的平均分,以及各自人数,分数低于70分的不参与,分组之后大于两个人
select sex,avg(math),count(sno) from student where scoure< 70 group by sex having count(*)>2;
执行顺序 where>聚合函数>having
5 分页查询
为了提高用户体验
语法
select 字段名 from 表名 limit 起始索引,显示条目;
起始索引等于(当前页数-1 * 显示条目)
oracle使用rownumber
SQL server分页查询使用top
2.5 约束
对表中数据进行一些限制.作用于表中列上的规则,限制表中加入的数据
- 非空约束 NOT NULL
- 唯一约束 UNIQUE
- 主键约束 PRIMARY KEY ANTO_INCREMENT(自动增长)
- 默认约束 DEFAULT
- 检查约束 CHECK
-
外键约束 FOREIGN KEY(是用来让两个表数据进行连接,保证数据的一致性和完整性)
在emp员工表添加外键dep_id关联dept的主键id
constrain fk_emp_dept foreign key (dep_id)reference dept(id)
删除外键
alter table emp drop foreign key fk_emp_dept
建完表后添加外键
alter table emp add fk_emp_dept foreign key(dep_id) reference dept(id )
2.6 数据的设计
数据用什么表保存,表和表之间的关系。
软件研发步骤
需求分析(产品经理设计产品原型) ->设计(架构师和工程师 包括软件结构设计 数据库设计 接口设计 过程设计) 编码(开发工程师) 测试(测试工程师) 安装部署(运维工程师)
数据库设计概念:
建立数据库中表结构以及表和表之间的关系
数据库设计步骤
1 需求分析(根据产品原型分析)
数据是什么,数据有哪些属性,数据和属性的关系
2 逻辑分析(通过ER(实体关系)图进行逻辑建模)
实体用方块表示 属性用椭圆表示,实体就是数据库中的每一个表而属性就是表中的字段
3 物理设计(逻辑设计转换为物理设计)
4 维护设计(对新的需求进行建表,表优化)
-
一对多(多对一)
如:部门和员工
-
多对多
如:商品和订单
-
一对一
用户和用户信息
2.7 多表查询
业务系统中有很多表 ,多张表之间查询数据。
笛卡尔积:就是有A和B两个集合,取所有的组合情况就是笛卡尔积
如a有2个数据,b有3个 那么所有组合情况就是有2*3=6种情况
因为孙悟空这个人不能又是研发部又是市场部的.所有我们需要条件进行筛选,在这基础上消除一些无效数据
所以要写成
SELECT * from emp,dept WHERE emp.dep_id = dept.did;
所以这也是连接查询(内连接),属于多表查询的一种
-
连接查询
- 内连接 相当于查询A和B集合的交集
SELECT emp.name,dept.name from emp,dept WHERE emp.dep_id = dept.did
另一种内连接写法
select * from emp inner join dept on emp.dep_id = dept.did - 外连接
分为左外连接和右外连接
select * from emp left join dept on emp.dep_id = dept.did
左外连接相当于查询a表全部数据和交集部分
- 内连接 相当于查询A和B集合的交集
子查询
一个连接分为两步走
查询高于张三工资的员工信息
1.查询张三的工资
select salary from emp where name = '张三';//答案为5000
2.查询高于5000的工资
select * from emp where salary > 5000;
3所以说这个5000 就可以替换成第一个查询语句去查询
`select * from emp where salary > (select salary from emp where name = '张三');
多个条件可以放在in中去查询
多表查询的时候 你要了解他们的ER图 关系 ,比如一对多就需要连接查询
2.8 事务
就是一组数据库操作命令,事务当成一个整体来提交要么同时成功要么同时失败
好比如银行系统的转账操作,首先先查询自己的余额够不够,然后转账给自己的账户扣除掉钱,同时对方的账户增加了钱,这一系列操作可以称为一个事务。
但如果在执行对方账户增加钱的时候出错了,所以就没有加钱。
预防方法:转账之前开启事务,出现异常回滚事务,成功之后提交事务
BEGIN开启
ROLLBACK回滚
COMMIT 提交
只要开启事务,所有的操作都是临时的,只有commit命令输入之后才是持久化存储。
事务的四大特征
- 原子性 最小单位 同时成功同时失败
- 一致性 数据保持一致状态
- 隔离性 多个事务操作的可见性
- 持久性 提交之后,数据库的改变时永久性的
set @@autocommit = 0;设置手动提交 1是自动提交
mysql默认自动提交
oracle需要手动提交
图形化工具 Navicat
Navicat官网