数据库分类
早期: 层次式数据库、网络型数据库
现在:关系型数据库、非关系型数据库
什么是关系型数据库?
底层以二维表的形式保存数据的库就是关系型数据库
连接mysql服务器
mysql -uroot -p密码
数据库及表操作
SHOW DATABASES; 查看当前数据库服务器中的所有库
CREATE DATABASE mydb1; – 创建mydb1库
use mysql;-- 进入mysql数据库 总共四个库
shows tables;-- 查看当前库所有表
create database mydbl charset utf8;-- 创建mydb1库 ,指定编码为utf8
create database if not exists mydb1 charset utf8; 如果不存在则创建库
show create database mydb1; 查看简历库的语句
drop table if exists stu;-- 如果存在stu表 删除stu表
– 如果存在,则删除stu表
drop table if exists stu;-- 如果存在stu表 删除stu表
– 创建stu学生表
create table stu(
id int primary key auto_increment,-- 给id添加主键约束 并设置自增
name varchar(50),
gender varchar(10) not null,-- 给gender添加非空约束
brithday date,
score double
);
desc stu;-- 查看表
插入记录
insert into stu values(null,‘join’,‘male’,‘2012-5-5’,89.5);
修改语法
update stu set score=score+10;
update stu set score=100 where id=1;
查询语句
select name,sal,bonus from emp; *为通配符查询所有信息
distinct为剔除重复的数据
select distinct dept,job from emp;
重命名前面有as 可以省略
select name,sal+bonus 总薪资 from emp;-- 求所有员工总薪资
判断指定的列是否包含null值,如果有null值,用第二个值替换null值,null 值和任何值相加的值都为null;
select name,sal+ifnull(bonus,0) 总薪资 from emp where sal+ifnull(bonus,0)>3500;
between在什么之间
select name,sal from emp where sal between 3000 and 4500;-- 包括3000和4500
select name,sal from emp where sal>=3000 and sal<=4500;
查询emp表中【薪资为 1400、1600、1800】的员工,显示员工姓名和薪资
select name ,sal from emp where sal=1400 or sal=1600 or sal=1800;
select name,sal from emp where sal in(1400,1600,1800);
与上相反
select name ,sal from emp where not(sal=1400 or sal=1600 or sal=1800);-- not表示取反
select name,sal from emp where sal not in(1400,1600,1800);
查询没有部门的员工(即部门列为null值)
select name from emp where dept is null; 此处不能用dept=null;
模糊查询
可以和通配符(%、_)配合使用,其中"%"表示0或多个任意的字符,"_"表示一个任意的字符。
语法SELECT 列 | * FROM 表名 WHERE 列名 LIKE 值
select name from emp where name like ‘刘%’;
多行函数查询
分组查询
排序中心
分页查询
其他函数
mysql数据类型
tinyint:占用1个字节,相对于java中的byte
smallint:占用2个字节,相对于java中的short
int:占用4个字节,相对于java中的int 常用
bigint:占用8个字节,相对于java中的long
其次是浮点类型即:float和double类型
float:4字节单精度浮点类型,相对于java中的float
double:8字节双精度浮点类型,相对于java中的double 常用
char(n)定长字符串,最长255个字符。n表示字符数,用于储存固定长度的数据
创建user表,指定用户名为char类型,字符长度不超过10
create table user(
username char(10),
…
);
2、varchar(n)变长字符串,最长不超过65535个字节,n表示字符数,一般超过255个字符,会使用text类型,例如:
创建user表,指定用户名为varchar类型,长度不超过10
create table user(
username varchar(10)
);
3、大文本(长文本)类型
最长65535个字节,一般超过255个字符列的会使用text。
– 创建user表:
create table user(
resume text
);
扩展内容3:(面试题)char(n)、varchar(n)、text都可以表示字符串类型,其区别在于:
(1)char(n)在保存数据时,如果存入的字符串长度小于指定的长度n,后面会用空格补全,因此可能会造成空间浪费,但是char类型的存储速度较varchar和text快。
因此char类型适合存储长度固定的数据,这样就不会有空间浪费,存储效率比后两者还快!
(2)varchar(n)保存数据时,按数据的真实长度存储,剩余的空间可以留给别的数据用,因此varchar不会浪费空间。
因此varchar适合存储长度不固定的数据,这样不会有空间的浪费。
(3)text是大文本类型,一般文本长度超过255个字符,就会使用text类型存储。
日期类型
date:年月日
time:时分秒
datetime:年月日 时分秒
timestamp:时间戳(实际存储的是一个时间毫秒值),与datetime存储日期格式相同。两者的区别是:
- timestamp最大表示1970-2038年,而datetime范围是1000~9999
- timestamp在插入数据、修改数据时,可以自动更新成系统当前时间(后面用到时再做讲解)
- 2008-5-1-12:00:00
mysql的字段约束
主键约束
主键约束:如果为一个列添加了主键约束,那么这个列就是主键,主键的特点是(不能重复),唯一且不能为空。
主键的作用: 作为一个唯一标识,唯一的表示一条表记录(作用类似于人的身份证号,可以唯一的表示一个人一样。)
添加主键约束,例如将id设置为主键:
create table stu(
id int primary key auto_increment,
…
);
非空约束
create table user(
password varchar(50) not null,
…
);
唯一约束
唯一约束:如果为一个列添加了唯一约束,那么这个列的值就必须是唯一的(即不能重复),但可以为空。
create table user(
username varchar(50) unique not null,
…
);
外键约束
(2)如果将dept_id列设置为外键,等同于通知数据库,部门表和员工表之间存在对应关系,dept_id列中的数据要参考部门的主键,数据库一旦知道部门和员工表之间存在关系,就会帮我们维护这层关系。
思考:如果在创建表时没有指定外键,那么后期该如何指定外键?以及如何删除外键?
表关系
常见的表关系分为以下三种:
一对多(多对一)、一对一、多对多
连接查询
查询部门和部门对应的员工信息
select * from dept,emp;
select * from dept,emp where dept.id=emp.dept_id;
select * from dept inner join emp
on emp.dept_id=dept.id;-- 内连接查询,和上面的查询结果一样.
左外连接查询
右外连接查询
子查询练习
多表练习查询
JDBC概述
JDBC(Java DataBase Connectivity) Java数据库连接
其实就是利用Java语言/程序连接并访问数据库的一门技术
之前我们可以通过CMD或者navicat等工具连接数据库
但在企业开发中,更多的是通过程序(Java程序)连接并访问数据库,通过Java程序访问数据库,就需要用到JDBC这门技术。
单元测试补充
单元测试:不用创建新的类,也不用提供main函数,也不用创建类的实例,就可以直接执行一个方法
加了@Test注解的方法,可以通过单元测试(junit)框架测试该方法。底层会创建该方法所在类的实例,通过实例调用该方法。
SQL注入攻击
通过上面的案例,我们发现在执行时,不输入密码只输入用户名也可以登陆成功。这就是SQL注入攻击。
SQL注入攻击产生的原因: 由于后台执行的SQL语句是拼接而来的:
select * from user where username=’"+user+"’ and password=’"+pwd+"’
其中的参数是用户提交过来的,如果用户在提交参数时,在参数中掺杂了一些SQL关键字(比如or)或者特殊符号(#、-- 、’ 等),就可能会导致SQL语句语义的变化,从而执行一些意外的操作(用户名或密码不正确也能登录成功)!
防止SQL注入攻击
如何防止SQL注入攻击?
(1)使用正则表达式对用户提交的参数进行校验。如果参数中有(# – ’ or等)这些符号就直接结束程序,通知用户输入的参数不合法
(2)使用PreparedStatement对象来替代Statement对象。
数据库连接池
池:指内存中的一片空间(容器,比如数组、集合)
连接池:就是将连接存放在容器中,供整个程序共享,可以实现连接的复用,减少连接创建和关闭的次数,从而提高程序执行的效率!
在传统方式中,每次用户需要连接访问数据库时,都是创建一个连接对象,基于这个连接对象访问数据库,用完连接后,会将连接关闭(conn.close)。
可以在程序一启动时,就创建一批连接放在一个连接池中(容器),当用户需要连接时,就从连接池中获取一个连接对象,用完连接后,不要关闭,而是将连接再还回连接池中,这样一来,用来用去都是池中的这一批连接,实现了连接的复用,减少了连接创建和关闭的次数,从而提高了程序执行的效率!
HTML、CSS
HTML: 用于开发网页的一门技术
CSS: 用于修饰、渲染网页的一门技术
HTML+CSS可以开发一个非常美观、非常漂亮的网页
开发网页 盖房子
HTML标签搭建网页的结构 砖块(搭建房子的结构)
CSS属性 石灰、油漆等涂料
HTML是什么
HTML(Hyper Text Markup Language): 超文本标记语言
(1)使用HTML开发的网页文件通常以 .htm或 .html 为后缀!
(2)使用HTML开发的网页文件由浏览器负责解析并显示(浏览器就是一个html解析器)
(3)HTML是文档的一种(txt/word/ppt/pdf等)
总结: HTML就是用于开发网页的一门语言!!
html注释
格式: <!-- 注释内容 -->
可以使用 <br/> 标签做换行
可以使用 或 做空格
href 属性用于指定点击超链接后将要跳转到的URL地址
target属性用于指定以何种方式打开超链接
_self:默认值, 表示在当前窗口中打开超链接
_blank:表示在新的窗口中打开超链接
表单标签
表单项标签
什么是服务器?
(1) 服务器硬件:是指在互联网上具有独立IP地址的计算机,比如我们自己用的计算机也可以作为服务器使用。
(2) 服务器软件:就是一个计算机程序,比如MySQL服务器软件,tomcat服务器软件。服务器软件分为很多类型,比如:ftp服务器,数据库服务器,web服务器软件,邮件服务器等。
Web服务器?
(1) web服务器是指驻留在互联网上的某种类型的计算机程序。当浏览器访问服务器,请求服务器上的文件时,服务器将会处理该请求,并将请求的文件响应给浏览器,并会附带一些信息告诉浏览器如何查看该文件(即文件的类型)
2、启动tomcat服务器
启动、关闭tomcat服务器:
通过 [tomcat根目录]/bin/startup.bat 可以启动tomcat服务器;
通过 [tomcat根目录]/bin/shutdown.bat 可以关闭tomcat服务器;
什么是HTTP协议?
HTTP协议是用于规定浏览器和服务器之间的通信方式/规则
主要规定了浏览器给服务器发送的请求信息的格式
以及规定了服务器给浏览器发送响应信息的格式
2、问题2:GET提交和POST提交有什么区别?
主要区别体现在请求参数传输过程的不相同
GET提交:
- 将数据通过问号拼接在地址栏URL地址的后面,相对非常不安全。
- 将数据拼接在地址栏URL地址的后面,数据量是有限制的,通常不能超过1KB或者4KB。
POST提交:(form) - POST提交是通过请求实体将数据提交给服务器,不会显示在地址栏上,因此相对更加安全。
- POST提交通过请求实体提交数据,数据量理论上是没有限制的。
3、总结: - 如果只是单纯做一个跳转,请求中没有数据,尽量使用GET提交。
- 如果在请求中有数据,但数据量不大,并且数据没有隐私性,也尽量使用GET提交。
- 如果在请求中有数据,数据量比较大或者数据较为隐私,此时推荐使用POST提交。
什么是Servlet?
Servlet是由SUN公司提供的一门动态Web资源开发技术
静态Web资源:不同的人,在不同的条件下访问后看到的是相同的效果,这样的资源叫做静态Web资源(html、css、js等)
动态Web资源:在不同的访问条件下看到的是不同的效果,这样的资源叫做动态Web资源
(Servlet、jsp、.NET、PHP等)
Servlet本质上是一段Java程序,和之前的Java程序不同的是,Servlet程序无法独立运行,需要将Servlet程序放在服务器中(比如tomcat服务器),由服务器调用才可以执行。
Servlet: 服务器端的Java程序.
Servlet是运行在服务器端的Java程序,其作用是什么?
其作用是对服务器接收过来的请求进行处理(作用为处理请求)