导图社区 java
Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进...
编辑于2022-11-21 19:18:19 安徽JAVA
设计模式
模板方法设计模式
单例设计模式
工厂设计模式
缓存机制
堆内存中字符串常量池
堆内存中整型常量池{-128~127}
连接池
JAVA语言中连接数据库的连接对象:java.sql.Connection对象
线程池
redis
ServletContext
web后端
Servlet(爹)
内部函数
init() 初始化
servlet()
构造函数
GenericServlet 适配器(儿子)
继承Servlet 与 ServletConfig
servletconfig
常用函数
public ServletContext getServletContext() 获取ServletContext对象
servletcontext(application)
一个SercletConfig 对应一个 web.xml文件
<context-param> <param-name>name<param-name> <param-value>value<param-value> 配置上下文参数 <context-param>
在 web.xml
常用函数
public String getInitParameter(Sting name);通过初始化参数name 获取value
public Enumeration<String> getInitParameterNames() 获取所有初始化参数name
对象.ishas… 对象.next…
getRealPath(String path) 获取绝对路径
getContextPath() 获取根路径
public void log(string message) 记录日志 public void log(string message,Throwable t) 第二个参数是异常
IDE 参照 小猫咪的日志规范 创建的, 存储在idea中tomcat里 服务器启动时已经生成了两个日志文件 一个访问日志,一个启动日志(控制台日志) 之后访问一次,访问日志记录一次。多生成一个配置日志(log()记录信息在此)
public void setAttribute(Sring name,Object value) 向Context中存数据
应用域(三行)
public void removeAttribute(String name) 删数据
public Object getAttribute(String name) 取数据
public String getInitParameter(Sting name);通过初始化参数name 获取value
public Enumeration<String> getInitParameterNames() 获取所有初始化参数name
对象.ishas… 对象.next…
public String getServletNme() 获取Servlet的name
请求域(下面三行)
public String setServletNme()
public String removeServletNme()
都可以通过this调用
Serclet对象的配置信息对象 一个servlet对应一个servletConfig对象
(孙子)以后会更常用 HTTPServlet(继承GenericServlet) 。专门为http协议准备的HttpServlet
HtttpServletReuest
httpServletResquest(request对象)
请求协议的全部内容
Tomcat服务器(web服务器)
将请求协议的数据解析出来,封装到request对象中
生命周期:一次请求
常用方法
request
request.getParameter
request.getParameterValues
string xxx =request.getRemoteAddr() 获取客户端地址
request. setCharacterEncoding() 设置请求体的字符编码
get是请求行中传输数据 post是在请求体中传输数据
request. getMethod() 获取请求方式
request. getrequestURI 获取请求uri
转发器机制
获取转发器对象
requestDispatcher xxx = request.getrequestDispatcher(/路径)不加项目名
转发
xxx.forward(request,response)
转发的对象不一定是servlet,也能是html等tomcat合法项目
httpServletResponse
专门响应http协议到浏览器
HTTP协议
W3C制定的超文本协议___游走在B和S之间
请求协议(B-S)
请求行
请求头
空白行
请求体
响应协议(S-B)
状态行
响应头
空白行
响应体
get与post的区别
get
只能发送普通字符串
长度有限,无法发送大量数据
适合从服务器获取数据
get请求绝对安全,因为只是为了从服务器获取数据
支持缓存
post
可以发送任何数据类型
可以发送大量数据,理论上无限制
适合向服务器传送数据
post请求危险,如果通过后门进入服务器的话,服务器很危险(监听)
不支持缓存
使用条件
文件上传,用post
表单收集上传 post
向服务器获取数据用get
servlet注解-简化配置
病垢:web.xml文件中的配置信息很多(servlet-name,url-pattern等)
在servlet类上使用:@WebServlet()
例子:@WebServlet( name = "hello",urlpatterns = {"hello1","hello2","hello3"} loadOnStartup =1,initParam={ @WebInitParam=(name="drive",value="root"), @WebInitParam=(name="sjbhe",value="boot")
servlet注解属性
name
等同于<servlet-name>xxxx<servlet-name>
value
urlPatterns(数组)
等同于<url-pattern>xxx<url-pattern>(映射路径)
loadOnStartup
浏览器启动时自动创建该servlet类对象
InitParam(@WebInitParam=...)
初始化参数
相关方法
获取初始化参数(注解中Initparams())
Enumeration<String> names = getInitParameterNames() 获取所有初始化的名字
While(names.hasMoreElements()){ name = names.nextElement() value = getInitParameter(name) }
请求与响应
request
response
Session
作用域:会话
存储会话状态,(在服务器中)
获取Session对象
jsp中九大内置对象中有session,所以不需要在创建,
HttpSession session = request.getSession()获取session对象 如果没有的话,就自动创建一个
HttpSession session = request.getSession(false) 也是获取对象,如果没有的话,就创建返回空
用于判断用户是否登录过
session.setAttribute("key","value")
seeeion.getAttribute("key")
session.invalidate() 销毁
cookie
保存在浏览器内存或硬盘文件中
存储会话状态(在客户端)
Cookie cookie = new Cookie("name",value) 创建
cookie.setMaxAge(时间)单位秒
0的话,表示删除
大于0表示设置最长时间,保存在硬盘里
小于0表示存储在浏览器内存中,不保存在硬盘中
response.addCookie(cookie)
cookie.setpath(xxx) 关联路径
一单访问到关联路径或关联路径下的子路经,
request.getcookie()
JSP
jsp本质上就是servlet的对象
jsp用于展示数据,servlet用于收集处理数据
<%@page session ="false"%> 用于启动时静止session创建
jsp的指令
include
在jsp中完成静态包含
taglib
引入标签指令库
page
内置属性
session = true或false 是否自动启动session
contentType = “” 设置响应类型 如 “text/html” “text/json”
同时也可以设置字符集
pageEncoding = “” 设置响应时的字符集 如utf-8
import = “” 导包
errorPage=“/error.jsp” 用于指定当前页面出错后,跳转到指定页面
exception = false或true 是否允许使用对象exception
jsp九大内置对象之一,通常在error中使用
exception.printStackTrace() 打印堆栈错误信息在控制台
九大内置对象
四个域
pageContext
request
session
application
都具有(set、get、remove)Attribute方法
exception
config 配置对象
page 相当于this
out 负责输出
response 负责响应
EL表达式
可以代替jsp中的java代码,看起来整洁
基本表达式:${表达式}
作用
用某个域中取数据
将取出的数据转成字符串
将字符串输出到浏览器中
如果存储类对象(在域中保存过)
${xxx} 自动调用该类的toString()方法
xxx.mmm 或 xxx["mmm"]调用该方法的get方法,取出返回值(注意get方法要使用驼峰)
如果key名相同,优先从小的域取数据(不指定范围的情况下)
四个隐式的范围对象
${pageScope . key}
${requestScope . key}
${sessionScope . key}
${applitionScope . key}
取数组、list、set集合
xxx[下标]
隐含对象
pageContext.request
在EL表达式中获取request对象,因为EL表达式中没有request对象
.scheme 获取路径前的http
.serverName 服务器ip地址
.serverPort 获取端口号
.context path 获取项目名
一般组合用于 html中的base标签中 <base herf = "....">
param
param.xxx 获取request传输的值 类似于 request.getParamter(“xxx”)
paramValues.xxx 获取传来的数组 类似于 request.getParamterValues(“xxx”)
initParam
initParam.xxx 获取web.xml中context的配置属性 类似于 application.getInitParameter(“xxx”)
运算符
+,-,/,*
==,!=,<,>,eq
?:
empty 判断是否为空
JSTL
第一步引入标签库
格式:<%@ taglib prefix ="标识" uri = "标签库"%>
核心标签库 core
格式:<标识名 :方法 属性1="" 属性二= "">
例子:<core : forEach items="${list}" var="s">
方法
forEach 遍历集合数组 (支持jsp)
属性
item = “数组” (支持EL表达式)
var 数组中迭代对象,类似于数组中的每一个变量 (不支持EL表达式)
底层是将值存在域中
begin 开始下标
end 结束下标
step 迭代间隔
varStatus = "xxx" 状态属性
xxx.count 标志当前是第几个 从一开始,逐一递增 主要用于编号
if 判断结果真假,真则执行,反之跳过
属性
test (必须) 支持EL
choose 与 when 与 otherwise ()类似于switch
格式: <core: choose> <core:when test = "...."> </core:when> <core:when test = "...."> </core:when> <core:when test = "...."> </core:when> <core:otherwise>....</core:otherwise> <core: choose>
sql标签库
fmt格式化标签库
Filter 监视器
Filter在服务器启动时,默认执行创建 而,Servlet默认不会执行创建
首先继承接口 Filter
实现方法
init()
doFilter() 发送n次请求,执行n次,编写过滤规则
dostroy()
doFilter()
chain.doFilter(request,response) 执行下一个过滤器,如果下一个不是过滤器,则执行目标Servlet
服务器会执行过滤器的地址,在根据chain链条向下执行
在web.xml文件配置(更推荐xml)
注解方法,@WebFilter(“路径”) 相同路径执行顺序按字母排序
格式:(相同路径执行顺序按先后) <filter> <filter-name> ....</filter-name> <filter-class>.....<filter-class> <filter> <filter-mapping> <filter-name> ....</filter-name> <uri-pattern>.....</url-pattern> <filter-mapping>
DOM 与 BOM的区别 DOM的顶级对象 document BOM的顶级对象是 window 实际上 BOM包括DOM
Web前端
HTML
语法规则
成对标签
嵌套标签
空标签,如<input>
标签语法
公共属性 title、id、class、style
标签元素
<h1~6> .... <h1~6> 标题原素,1最大,6最小
<hr> 分割线
<p> .... <p> 段落标签(独占一片区域)
段落前后会有空行
<br> 换行标签
div 块标签 有图层效果
div对象 var xxx = div对象 xxx.innerText 与 xxx.innerHTML
document.getElementById(标签id) 返回 标签对象
文本修饰标签
<strong>.......<strong> 1、加深,突出效果 2、突出效果,方便查重
<em>…<em> 斜体
<sub>…<sub> 左下方表示 如H2O <sup>…<sup> 右上方表示 如2平方
<del>…<del> 内容中间有条横线 <ins>…<ins> 强调
图片标签
语法:< img src ="路径" alt="…" title="…" width ="宽度" hight="高度">
alt属性:当图片加载失败时,显示提示信息。
title属性:当鼠标停留时,显示信息
跳转标签
<a herf = " 链接 " target = " -blank / -self ">…<a>
如果herf后的双引号为空,则代表当前页面
子主题
_blank属性:在新窗口打开
_self属性:在当前窗口打开
图片超链接:<a> <img …> <a> 嵌套
<base target ="…"> 统一设置跳转页面,在head中写
锚点标签
跳转页面内的某个定点
方式一:<a herf = " id号 ">…<a>
方式二: <a name ="xxx">…<a> 跳转目标 <a herf = "#xxx"><a> 跳转
特殊符号
& lt 小于号 “ & gt” 大于号
空格:& nbsp
表格
语法:<table> … <table>
tr 行 td 列 th 标题
样式
bored 边框像素
weight height 宽高 (单位%可以根据页面大小自动调整)
align 对齐方式
单元格合并:rowspan="2",colspan="2",
thead ,tbody ,tfoot
背景
bgcolor 背景颜色 background="路径",背景图片
列表
<ul>/<ol> <li> … <li> <li>… <li> <ul>/<ol> ol 有序,ul 无序
type 元素 设计样式
表单
<form action="指定提交链接",method ="提交方式">…<form>
<input>元素
radio 单选
checkbox 多选
select 选择 option 选项
支持多选:<select mutilpe = "multiple" size ="2"> size 表示显示几个
textera 文本域(没有Value属性) row与col设计行数与列数
rest 重置
sumit 提交
password 密码
file file空间,用于文件上传
hidden 隐藏域,不在页面显示,但依旧作为数据传输
maxlength 设置text 输入最大个数
CSS
引入方式
内联定义
最标签对象内部使用
格式:style = “…”
样式块
在head中使用style
格式:<style type= "text/css"> 选择器{…} <style>
选择器
id
格式:#id{…}
标签选择器
格式:标签名{…} 如div{…}
类选择器 class
格式:.类名{…}
优点:跨标签
嵌入样式文件
格式 <link type="text/css" rel="stylesheet" herf = "css文件路径">
样式
长、宽
背景颜色
display = "none / block" 样式隐藏或 显示
边框
border-style 边框样式 默认无
solid 实线
double 双线边框
border-width 边框宽度
border-color
border :宽度、样式、颜色
cursor 鼠标样式
定位
position
绝对定位:absolution
lift 离左边框距离 top 离上边的距离
JavaScript
HTML 嵌入 jsp脚本
事件与事件句柄
时间句柄是以HTML标签的属性存在
鼠标事件
click
onclick = "jsp代码" 如<input type="bottom" onclick ="window.alert(“消息”)”>
脚本块
格式:<script type = "text/javascript"> window.alret("…") <script>
在页面打开的时候,自动执行,并遵守顺序依次逐行执行
引入外部js文件
格式:<script type="text/JavaScript src="路径">
变量
var
全局变量(周期开启到关闭浏览器)
局部变量
函数
一般
如果函数同名的话,后面函数会顶替前面的函数,即使参数不一致
function
可以利用事件句柄来调用
函数的参数不限制,个数也不限制
firm()去前后空格
特殊函数
number类
INAN() 判断是否为number类型
parseInt() 字符串转number 取整数 parseFloat …
ceil 向上取整
Date类
获取对象:new Date()
获取毫秒 对象. getTime
String
length
charAt() 查找指定字符下标
concat 字符串拼接
indexOf() 索引 查找字符或字符串,返回第一个字符的索引
subString(启始下标,终止下标)左开右闭 subStr (下标,长度) 都是截取子字符串
toUpperCase / toLowerCase
Object
prototype() 给类动态的拓展属性
语法:类名.prototype.函数名 = function(){…} 给类扩展函数或属性
不仅仅自己定义的类,原始类型也可以,如String等
定义类
方法:function 类名(形参){…}或 类名 function(形参){…}
创建对象:new 类名(实参)
类属性的调用 类名.属性名 或 类名["属性名"]
事件
常用事件
键盘
keydown 按键按下
keyup 按键弹起
捕捉回车键
回车值:13,ESC:27
格式:window.load = function{ var xxx = document.getElementById("id号"); xxx.keydown=function(event){ if(event.keyCode) === 13{…} } }
鼠标
MouseMove 鼠标移动
mouseup 鼠标弹起
mousedown 鼠标按下
mouseover 鼠标经过
click 鼠标点击
dblclick 双击
焦点
blur失去焦点
focus 获取焦点
load 加载完成
select 文本选中
submit 表单提交
reset 重置
change 下拉选项改变或文本内容改变
注册方式
方式1
在标签内部 如
方式二
格式:document.getElementByld("id号").事件名 = function(){…} 这种写法类似于默认函数
该方法基于 标签在注册方法前,否则方法找不到id号
如果方法在 注册方法后的话,则需要使用load
方法一,在<body > 标签中使用 load = "方法名 "
方法二window.load = function{ document.getElementById("id号").事件名=function(){…} }
运算符
void
herf = “javascript.void(0)” 依旧是链接,但不会调到任何页面 因为void不会返回任何值
DOM
文档对象模型,对网页的节点进行增删改的过程
this 代表当前标签对象 如 this.value 等于当前标签的value
拿取标签中的value 格式 var xxx = document.getElementById(“id号”); xxx.value
修改 标签中value 格式 document.getElementById(“id号”).value= …
document.write() 类似于 JAVA中的 sout
document.location(地址)
BOM
关闭、打开、后退、前进浏览器窗口与地址栏的地址
window对象
弹窗(会阻塞当前页面加载的作用)
window.alert(“消息”) 消息框
window.可以不写
window.confirm() 确认框
有返回值
window.setInterval(“函数”,时间),每隔多长时间调用一次
取消:将window.setInteraval()的返回值传给 window.clear()。则取消操作
window.open/close(网址) 打开与关闭
对于开窗口的样式
“_self” 当前窗口
_blank 新窗口
_parent 父窗口
_top 顶级窗口
window.history.go/back 历史的前进与后退
window.location 获取当前地址栏对象,,可以更改地址栏 对象.herf(地址)
window.eval(“字符串”) 将字符串转成jsp语句执行
可以讲json格式的字符串转成json对象
正则表达式
常见匹配
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉子
\s 匹配任意空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串结束
匹配次数
* 重复多次
+ 匹配一次或多次
? 匹配零次或多次
{n} 匹配n次
{n,} 匹配多次
{n,m} 匹配n到m次
json
效果,预编译:预先对SQL语句框架进行编译,然后再给SQL传值。 预防SQL的注入危险 优点:效率高,有安全检验
PD工具(老杜) 对数据库的架构设计阶段的工具 可以直接生成spl脚本
利用反射机制,执行静态代码块
JDBC
六步: 1、注册驱动 2、获取连接 3、获取数据库操作对象 4、执行SQL语句 5、处理查询结果集 6、释放资源
注册
DriverManger.registerDriver(new com.mysql.jc.jdbc.Driver);
常用:Class.formName(com.mysql.jc.jbdc.Driver)
连接
Connection conn = DriverManger.getConnecttion
获取对象
statement state = conn.createStatement
目前用法:PreparedStatement接口 ps 代替 state
执行SQL
ResultSet rs = state.executeUpdata / executequery(“SQL语句”)
提取
rs.next() 转下一行 rs.getSring()数字编号 或者 对应列名
事务处理
开启事务
conn.setAutoCommit (false)将自动提交机制转为手动提交 I'
提交事务
conn.commit
回滚
conn.rollback
另一种方法 防止SQL注入(附件)
白学现场
资源绑定器
配置文件只能放在类路径下
用于获取配置文件的内容(.propertis)
格式:ResourceBundle bundle = ResourceBundle.getBundle("文件名")
bundle.getString(“键值”)
优点:properties方法与IO流了 ,直接一行搞定
绝对路径获取: Thread.currentThread().getContextClassLoader() .getResource(文件名).getpath
返回值也可以是流: InputStream in = Thread.........
操作类的字节码文件-读、改(class文件)
进阶
反射机制(老杜 338集)
所属包:java.lang.relect.*
java.lang.class 代表整个字节码
java.lang.reflect.Method 方法
java.lang.refect.constructor 代表构造方法
java.lang.refect.field 代表属性
优点
与之前 new 方法相比 灵活
高级框架底层都是反射
获取类的方法
Class .forName( )
参数:完整路径
完整路径包括 报名(java.lang 也不能省略)
静态方法
对导致类加载,静态代码块执行 如果想要某一方法只执行静态代码块执行,可以class.forName(" .. ")
Class<?> a = Class.forName("....")
getClass
任何一个对象方法都有一个getClass方法
对象.getClass
Class
Class x = (类型名)String.Class
任何类型,包括基本类型,都有 .Class 属性
实例化创建
首先获取Class 对象,实例化
完成对象创建
newInstance(老了)
必须保证实例化对象有无参构造方法
三范式
任何表必须有主键,且每个字段都是原子,不可再分
在上面的基础上 ,要求所有非主键字段完全依赖主键,不要产生部分依赖
在上面的基础上,所有非主键字段直接依赖主键,不要产生传递依赖
数据库 密码(123456789)
语法
DQL
查询
格式
模糊查询-like
"-" 匹配任意单个字符
“%” 匹配任意个字符
as
给A起别名
having
不可单独使用,与ground by搭配
distinct 去重
处理函数
单处理语句
lower
upper
substr(被截取字符,启始下标,长度)
concat 拼接字符串
length
trim 去空格
str_to_date
date_format
Rand 随机数
case .....when ...then...when...then...end
多处理
count
sum
avg
max、min
连接
语法
内连接
等值
非等值
自连接
外连接
right
lift
子查询
出现的位置
from、where、select(附件有照片)
union
查询结果合并(要求合并的表的列数相等)
DML
增
insert
insert into 表名(字段名1,字段名2,字段名3...) values(值1,值2,值3);
删
truncate
快速删除
子主题
格式:truncate table 表名
delete
格式:delete from 表名 where 条件
改
格式
update 表名 set 字段1 =值1,.. where...
DDL
操作库、表、列
create
创建表
数据类型
drop
删除表
drop table 表名
关键字
restrict(默认)
cascade
删除时,此表的索引,约束,视图等都被删掉
alter(修改)
表
表复制: create table 表名 as select * from 表名
修改表名:alter table 表名 rename to 新名
列
添加:alter table 表名 add 新列名 类型
修改
数据类型
alter table 表名 modify 列名 新数据类型
列名
alter table 表名change 列名 新列名 新数据类型
约束
not Null
添加
ALTER TABLE 表名 MODIFY 字段名 数据类型 not null
类似于修改字段类型
删除
alter table 表名 modify 字段名 数据类型
unique
联合unique
unique (字段1,字段2)
添加
alter table 表名 modify 字段名 数据类型 unique
删除
alter table 表名 drop index 字段
default
规定默认值
alter table 表名 alter column 列名 set default 默认值
alter table 表名 alter 列名 drop default
primary key
每张表都要有
auto _increment 自增加
添加
alter table 表名 add primary key(字段名)
删除
alter table 表名 drop primary key
foreign key
格式:foreign key 自己表字段 references 表2(字段)
添加
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名称) REFERENCES 主表名称(主表列)
删除
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
所引用的约束 不能有重复 可以为Null
TCL
事务控制语言
事务
只要DML设计事务 安全
实质:多条DML语句同时成功或失败
提交事务
清空日志,将数据持久写入
联系存储引擎的 InnoDB的日志记录
回滚事务
将之前的操作,全部撤销。
rollback
子主题
使用
默认情况,每执行DML语句,都会自动提交事务。
在输入DNL语句前,先输入执行:start transaction 或者 begin
执行提交:commit
特性
原子性
一致性
隔离型
隔离级别
读未提交
read uncommitted 脏读现象
读已提交
read commited 解决脏读,但不可重复读取
可重复读
repeatable read 出现幻影数据。
序列化
serializable
效率最低,解决所有问题 读取与写入同一时刻只能一个操作
级别依次递增
持久性
DCL
权限控制
管理用户
格式:create user 用户名 identified by “ 密码 ”
授权 grant
格式:grant 操作权 on 表名 to 用户
操作权
all privileges 全部操作
select 查询权
update(列名) 修改权
insert 插入权
如果格式后面加入 with grant option 则说明允许其将此权利再授权其他用户
撤销权限 revoke
格式:revoke 权限 on 表名 from 用户名
可以通过角色来简化操作(书 146页)
索引
字段 有主键或unique 约束时 会自动挂上索引。
不管在什么引擎中,都是以树的形式
是否使用索引检索
1.5、在mysql当中,怎么查看一个SQL语句是否使用了索引进行检索? mysql> explain select * from emp where ename = 'KING'; +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | emp | ALL | NULL | NULL | NULL | NULL | 14 | Using where | +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ 扫描14条记录:说明没有使用索引。type=ALL mysql> create index emp_ename_index on emp(ename); mysql> explain select * from emp where ename = 'KING'; +----+-------------+-------+------+-----------------+-----------------+---------+-------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+-----------------+-----------------+---------+-------+------+-------------+ | 1 | SIMPLE | emp | ref | emp_ename_index | emp_ename_index | 33 | const | 1 | Using where | +----+-------------+-------+------+-----------------+-----------------+---------+-------+------+-------------+
expain
创建
create index 索引名 on 表名(字段名)
删除
drop index 索引名 表名
分类
单一索引
主键索引
复合索引
唯一性索引
unique 比较弱的情况 使用索引,效率不大
失效
模糊查询以%开头查询
查询条件使用 or
使用符合索引时,没有使用左侧的列索引
类似于左边优先于右边
where 中 索引列 参与计算
where 中 索引列 使用函数
视图
从一张或几张表导出的表, 是个虚表。 原始基本表数据改变, 视图也随之改变
定义
create view 视图名(可选) as 子查询 with check option
删除
drop view 视图名
面向视图增添删
原表数据也会更新
CRUD
属性列名必须全部存在或全部省略
1、某个目标列不是单纯属性名,而是聚集函数或表达式 2、多表连接时,有同名列 3、需要在视图中为某个列名用新的名字 不可省略
存储引擎
engin:指定存储引擎 charset:指定字符编码方式
样式
engin InnoDB default charset utf-8
主流引擎
InnoDB
优势
安全,崩溃后,自动回复
支持事务
支持外键及引用的完整性
提供一组用于记录的日志文件
MySAM
一张表,只要被主键 或者unique约束 会自动创建索引
格式文件 数据文件 索引文件
组成
优势
可被转化为压缩,只读表来节省空间
MEMORY
内容存储在内存中
优势
快
导入导出
导出:mysqldump 库名 表名(可选,导入指定表时)> 路径、库名.sql 用户名 密码
在Window 下命令窗口,而不是在mysql命令窗口
导入:source 路径/文件名.sql
设置:global transaction ioslation level 级别名
查看隔离级别:select @@tx_isolation
with check option表示 保证对对父表的修改,增添,删除更新
删除有限制 不能被其他表所约束 不能有视图 不能有触发器 不能用存储过程或函数
考虑date格式的插入
varchar int 最长11位 bigint float date datetime clob blob
create table 表名 ( 字段名1 数据类型 约束, 字段名2 数据类型, 字段名3 数据类型 );
与内连接最重要的区别
from 表二 join 表1 on 条件
多表连接的话,连续join on
执行顺序: from where groud by having select order by
select A from B where C groud by D having E order by desc/asc limit 分页