??xml version="1.0" encoding="utf-8" standalone="yes"?> 如何查看日志信息 dmesg | more /var/adm/messages* 攉 exlpore 日志 /opt/SUNWexplo/bin/explorer -k ->/opt/SUNWexplo/output pȝ的基本状?/span> showrev pȝq行旉Q^均负?/span> uptime 版本信息 uname -a Update 版本 more /etc/release pȝ补丁 showrev -p 已安装的补丁信息 patchadd 123-12 打补?/span> 查看服务对应的端?/span> more /etc/services pȝ变量讄 env Q?/span> sysdef Shell 变量Q?/span> bash,csh,ksh 攉 explore 日志 先查看有没有?/span> 清空日志Q?/span> cp /var/adm/messages /var/adm/messages.bkp #cat /dev/null > /var/adm/messages psrinfo -vp pȝ cpu 数和速度 uptime cpu q_负蝲 prstat -a 实时q程的状?/span> ps -ef 昄所有进E的详细信息 kill pid 杀死进E?/span> vmstat Q?/span> mpstat Q?/span> /usr/ucb/ps -aux prtdiag -v pȝgQ电源接口等 查看内存大小 prtconf -vp | grep Mem vmstat swap -s 增加 swap 分区Q?/span> mkfile 200m /tmp ,swap -a,swap -l C5292 iostat 监视pȝ输入Q输备负?/span> format pȝ几块盘Q大?/span> Ctrl+D 的组合键退?/span> metastat 昄盘 raid 状?/span> 查硬盘信?/span> prtvtoc /dev/dsk/c0t0d0s5 查看 NBU 盘 available_media 如何d盘 1 Q?/span> mkdir /usr/ldap3 2 Q?/span> newfs /dev/rdsk/c1t3d0s1 3 Q?/span> mount /dev/dsk/c1t3d0s1 /usr/ldap3 4 Q?/span> vi /etc/vfstab d文gpȝ信息 /dev/dsk/c1t2d0s0 /dev/rdsk/c1t2d0s0 /usr/ldap3 ufs 1 yes logging df -k 盘使用情况 带机的d数据 : tar cpio 带机状?/span> mt -f /dev/rmt/0 status 虚拟文gpȝ?/span> /etc/vfstab Solaris 盘分区 ping Q?/span> netstat -arp Q?/span> ifconfig –a 压羃解压 tar gzip gunzip iso 文g lofiadm 查看文g信息 ls -lrt 目录大小 du -sk dir mkdir ,cd, 查找文gQ?/span> Find 文gcd file 查看文g more Q?/span> head Q?/span> tail Q?/span> cat 例如Q?/span> tail -10 /var/adm/messages 文g的权?/span> chmod: chmod 644 a.txt 解包 tar vcf filename.tar 打包 tar cvf filename.tar dirname .gz 文g 解压 gunzip filename.gz ; gzip -d filename.gz 压羃 gzip filenam .tar.gz 解压Q?/span> tar zxcf file.tar.gz 压羃Q?/span> tar zcvf file.tar.gz dirname 创徏和编辑文Ӟ 生成新文件或改变文g日期Q?/span> Touch 文g拯 cp Ud文g mv 修改文gQ?/span> vi的用?/span> l合命o : Q?/span> 输出重定?/span> > l合命o | 常用理命o man groupadd Q?/span> useradd Q?/span> passwd 查看用户 / l?/span> more /etc/passwd Q?/span> /etc/shadow Q?/span> /etc/group (who ?/span> finger ?/span> rusers Q?/span> 1 ?/span> whodo ?/span> id 如何做系l硬件健L冉|?/span> # more /var/adm/messages* Q没有重大异常报错) # df –k (“/” 使用率小?/span> 85%) # format Q?/span> ctrl+d退出)Q所有硬盘正常) # prtdiag –v ( 没有 failed 的部件、内存和 cpu 数量正确 ) # psrinfo –v ( pȝ中所有的 cpu 都处?/span> online 状?/span> ) q行U别 查看pȝ的运行、日期及旉 who –r pȝq行U别 1 ?/span> 掉电Q运行 0 Q?/span> 2 ?/span> 单用Pq行U?/span> 1 ?/span> s ?/span> S Q?/span> 3 ?/span> 多用Pq行U?/span> 2 ?/span> 3 Q?/span> 4 ?/span> 重引|q行U?/span> 5 ?/span> 6 Q?/span> 重新启动 reboot, init 6 关闭pȝQ?/span> shutdown Q?/span> init 0 Q?/span> halt 定时d ?/span> crontab 推到一个自定义的文件上 #bpdbjobs –report 查作业备份情况,q回?/span> 0 即ؓ正常 #bpps –a 备䆾q程启动情况 #sccli sccli: selected device /dev/rdsk/c2t0d0s2 [SUN StorEdge yyyy SN#08472F] #sccli> show disks 输出?/span> Status 列,所有值正常情况下?/span> ” ONLINE” ?/span> ” STAND-BY” Q其它的值都是不正常的; #sccli> show logical-drives 输出?/span> Status 列,其值正常情况下?/span> ” Good” Q其它的值都是不正常的; #sccli>show enclosure-status 输出?/span> Status 列,所有值正常情况下?/span> ” OK” 或?/span> ” Absent” Q其它的值都是不正常的; #sccli>show FRUs 输出?/span> FRU Status 行,所有值正常情况下?/span> ”OK” Q?/span> 其它的值都是不正常的; #sccli> show peripheral-device-status 输出?/span> status 列,所有值正常情况下?/span> ”within safety range” ?/span> ” N/A” ?/span> ” Hardware:N/A” ?/span> ” Hardware:OK” Q?/span> 其它的值都是不正常的; #sccli>exit oracle lsnrctl status 查看 listener q程的状?/span> tnsping SID 查看q通请?/span> sun cluster scinstall -pv 版本信息 luxadm -e port 光纤链\状?/span> transact---sql高查询Q下Q?br />
5:使用having关键字来{选结?br />
6:使用compute和compute by子句 E:使用having关键字来{选结?br />
当完成对数据l果的查询和l计?可以使用having关键字来Ҏ询和计算的结果进行一步的{?br />
?索出work表中学历是大专或者是中专的h?br />
select 学历,count(学历) from work group by 学历 having 学历 in("'大专"',"'中专"') F:使用compute和compute by G:使用嵌套查询 在嵌套中使用exists关键字[存在] H:分布式查?br />
我们以前的查询都只是Z一个服务器中的一个数据库的查?如果一个查询是要跨一个服务器,像这L查询是分布式查?那么我们以看到分布查询就是数据源自于两个服务?要进行分布式查询必须先创Z?#8220;链接服务?#8221;,以便让本地的用户能够映射到过E服务器. A:什么是视图: B:视图与查询的区别: C:视图的优? D:视图的创建和理 览视图信息 sp_helptext 视图?[查看视图创徏的语句] E:如何通过视图修改基本表的数据. 2:使用update更新视图中的数据 使用with check option的视?br />
如果不了解视囑֮义内?则常怼发生向视图中输入不符合视囑֮义的数据的情? 使用schemabinding的视图[使用l定到构架] F:使用视图加强数据的安?br />
一般通过使用视图共有三种途径加强数据的安全?nbsp;
咱q模?脸型他们真挡不住Q在侧面他们q感觉是撞的呢!都说有点颜色怸挺好看的呢!虽然咱有疤但p模样qҎ边的q块疤跟p模样张的一点也不别白脔RU模样差Q你没比没数Q这么多?能张的小白脸的那个层ơ的人已l不多了Qh已经很多了!我到了这个层ơ已l很高了Q其实你一直感到难看的事,到最后真有小姑娘真有人很ƣ赏q些Q我又何苦遭q个|呢Q呵?模样真的已经很不错了Q每个h都望漂亮,如果能变的很漂亮 谁又何尝?br />
愿意?因ؓq个东西都是父母l决定的不是自己说了的Q?q是太正常的事情Q你看看那么多张的那么一般的Zq都照样q的挺美的!因ؓ我真的很不错啊!生活的好好坏坏不是有模样军_Q真正幸的生活是靠自己的努力!你看看n边的那些男h们!不用你张的多么帅Q只要你有颗乐观坚强 宽容善良的心够了!你的生活军_是很好的!有心q奛_ 有成功的事业Q怒\吧!孩子你已l完成了 该完的一Q务!攑ּq个吧!攑ּ了!全心的开始!也是全新的开始!因ؓ明天真是太美好了Q?
<SCRIPT LANGUAGE="javascript">
<!--
window.open ('page.html')
-->
</SCRIPT>
因ؓq是一Djavascripts代码Q所以它们应该放?lt;SCRIPT LANGUAGE="javascript">标签?lt;/script>之间?lt;!-- ?-->是对一些版本低的浏览器起作用,在这些老浏览器中不会将标签中的代码作ؓ文本昄出来。要Lq个好习惯啊。window.open ('page.html') 用于控制弹出新的H口page.htmlQ如果page.html不与ȝ口在同一路径下,前面应写明\径,l对路径(http://)和相对\?../)均可。用单引号和双引号都可以Q只是不要用。这一D代码可以加入HTML的Q意位|,<head>?lt;/head>之间可以Q?lt;body>?lt;/body>也可以,前早执行Q尤其是面代码长,又想佉K面早点弹出就量往前放?
?、经q设|后的弹出窗口?
下面再说一说弹出窗口的讄。只要再往上面的代码中加一点东西就可以了。我们来定制q个弹出的窗口的外观Q尺寸大,弹出的位|以适应该页面的具体情况?
<SCRIPT LANGUAGE="javascript">
<!--
window.open ('page.html', 'newwindow', 'height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no') //q句要写成一?
-->
</SCRIPT>
参数解释Q?
<SCRIPT LANGUAGE="javascript"> js脚本开始;
window.open 弹出新窗口的命oQ?
'page.html' 弹出H口的文件名Q?
'newwindow' 弹出H口的名字(不是文g名)Q非必须Q可用空''代替Q?
height=100 H口高度Q?
width=400 H口宽度Q?
top=0 H口距离屏幕上方的象素|
left=0 H口距离屏幕左侧的象素|
toolbar=no 是否昄工具栏,yes为显C;
menubarQscrollbars 表示菜单栏和滚动栏?
resizable=no 是否允许改变H口大小Qyes为允许;
location=no 是否昄地址栏,yes为允许;
status=no 是否昄状态栏内的信息Q通常是文件已l打开Q,yes为允许;
</SCRIPT> js脚本l束
?、用函数控制弹出H口?
下面是一个完整的代码?
<html>
<head>
<script LANGUAGE="JavaScript">
<!--
function openwin() {
window.open ("page.html", "newwindow", "height=100, width=400, toolbar =no, menubar=no, scrollbars=no, resizable=no, location=no, status=no") //写成一?
}
//-->
</script>
</head>
<body onload="openwin()">
L的页面内?..
</body>
</html>
q里定义了一个函数openwin(),函数内容是打开一个窗口。在调用它之前没有Q何用途。怎么调用呢?
Ҏ一Q?lt;body onload="openwin()"> 览器读面时弹出窗口;
Ҏ二:<body onunload="openwin()"> 览器离开面时弹出窗口;
Ҏ三:用一个连接调用:
<a href="#" onclick="openwin()">打开一个窗?lt;/a>
注意Q用的“#”是虚q接?
Ҏ四:用一个按钮调用:
<input type="button" onclick="openwin()" value="打开H口">
?、同时弹?个窗口?
Ҏ代码E微改动一下:
<script LANGUAGE="JavaScript">
<!--
function openwin() {
window.open ("page.html", "newwindow", "height=100, width=100, top=0, left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=n o, status=no")//写成一?
window.open ("page2.html", "newwindow2", "height=100, width=100, top=1 00, left=100,toolbar=no, menubar=no, scrollbars=no, resizable=no, loca tion=no, status=no")//写成一?
}
//-->
</script>
为避免弹出的2个窗口覆盖,用top和left控制一下弹出的位置不要怺覆盖卛_ 。最后用上面说过的四U方法调用即可?
注意Q?个窗口的name(newwindows和newwindow2)不要相同Q或者干脆全部ؓI?
?、主H口打开文g1.htmQ同时弹出小H口page.html?
如下代码加入ȝ?lt;head>区:
<script language="javascript">
<!--
function openwin() {
window.open("page.html","","width=200,height=200")
}
//-->
</script>
加入<body>区:
<a href="1.htm" onclick="openwin()">open</a>卛_?
?、弹出的H口之定时关闭控制?
下面我们再对弹出的窗口进行一些控Ӟ效果更好了。如果我们再一段 代码加入弹出的页?注意是加入page.html的HTML中,不是主页面中)Q让?0U后自动关闭是不是更酷了Q?
首先Q将如下代码加入page.html文g?lt;head>区:
<script language="JavaScript">
function closeit()
{
setTimeout("self.close()",10000) //毫秒
}
</script>
然后 ?lt;body onload="closeit()"> q一句话代替page.html中原有的<BODY>q一句就可以了?q一句话千万不要忘记写啊Q这一句的作用是调用关闭窗口的代码Q?0U钟后就自行关闭该窗口?
?、在弹出H口中加上一个关闭按钮?
<FORM>
<INPUT TYPE='BUTTON' VALUE='关闭' onClick='window.close()'>
</FORM>
呵呵Q现在更加完了Q?
?、内包含的弹出窗?一个页面两个窗口?
上面的例子都包含两个H口Q一个是ȝ口,另一个是弹出的小H口。通过下面的例子,你可以在一个页面内完成上面的效果?
<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
function openwin()
{
OpenWindow=window.open("", "newwin", "height=250, width=250,toolbar=no ,scrollbars="+scroll+",menubar=no");
//写成一?
OpenWindow.document.write("<TITLE>例子</TITLE>")
OpenWindow.document.write("<BODY BGCOLOR=#ffffff>")
OpenWindow.document.write("<h1>Hello!</h1>")
OpenWindow.document.write("New window opened!")
OpenWindow.document.write("</BODY>")
OpenWindow.document.write("</HTML>")
OpenWindow.document.close()
}
</SCRIPT>
</head>
<body>
<a href="#" onclick="openwin()">打开一个窗?lt;/a>
<input type="button" onclick="openwin()" value="打开H口">
</body>
</html>
看看OpenWindow.document.write()里面的代码不是标准的HTML吗?只要按照格式写更多的行即可。千万注意多一个标{或一个标{ְ会出现错误。记得用 OpenWindow.document.close()l束啊?
?、终极应?-弹出的窗口之Cookie控制?
回想一下,上面的弹出窗口虽焉Q但是有一点小毛病Q比如你上面的脚本攑֜一个需要频J经q的面?例如首页)Q那么每ơ刷新这个页面,H口都会弹出一ơ,我们使用cookie来控制一下就可以了?
首先Q将如下代码加入主页面HTML?lt;HEAD>区:
<script>
function openwin(){
window.open("page.html","","width=200,height=200")
}
function get_cookie(Name) {
var search = Name + "="
var returnvalue = "";
if (document.cookie.length > 0) {
offset = document.cookie.indexOf(search)
if (offset != -1) {
offset += search.length
end = document.cookie.indexOf(";", offset);
if (end == -1)
end = document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset, end))
}
}
return returnvalue;
}
function loadpopup(){
if (get_cookie('popped')==''){
openwin()
document.cookie="popped=yes"
}
}
</script>
然后Q用<body onload="loadpopup()">Q注意不是openwin而是loadpop啊!Q替换主面中原有的<BODY>q一句即可。你可以试着h一下这个页面或重新q入该页面,H口再也不会弹出了。真正的Pop-Only-OnceQ?
Q?Q方法Join是干啥用的? 单回{,同步Q如何同步? 怎么实现的? 下面逐个回答?br />
自从接触Java多线E,一直对Join理解不了。JDK是这栯的:
join
public final void join(long millis)throws InterruptedException
Waits at most millis
milliseconds for this thread to die. A timeout of 0
means to wait forever.
大家能理解吗Q?字面意思是{待一D|间直到这个线E死亡,我的疑问是那个线E,是它本n的线E还是调用它的线E的Q上代码Q?nbsp;
/**
*
* @author vma
*/
public class JoinTest {
public static void main(String[] args) {
Thread t = new Thread(new RunnableImpl());
t.start();
try {
t.join(1000);
System.out.println("joinFinish");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class RunnableImpl implements Runnable {
@Override
public void run() {
try {
System.out.println("Begin sleep");
Thread.sleep(1000);
System.out.println("End sleep");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Begin sleep
End sleep
joinFinish
明白了吧Q当mainU程调用t.joinӞmainU程{待tU程Q等待时间是1000Q如果tU程Sleep 2000?
public void run() {
try {
System.out.println("Begin sleep");
// Thread.sleep(1000);
Thread.sleep(2000);
System.out.println("End sleep");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
l果是:
Begin sleep
joinFinish
End sleep
也就是说mainU程只等1000毫秒Q不T什么时候结束,如果是t.join()呢, 看代码:
public final void join() throws InterruptedException {
join(0);
}
是说如果是t.join() = t.join(0) 0 JDKq样说的 A timeout of 0
means to wait forever 字面意思是永远{待Q是q样吗?
其实是等到tl束后?br />
q个是怎么实现的吗Q?看JDK代码Q?br />
* Waits at most <code>millis</code> milliseconds for this thread to
* die. A timeout of <code>0</code> means to wait forever.
*
* @param millis the time to wait in milliseconds.
* @exception InterruptedException if any thread has interrupted
* the current thread. The <i>interrupted status</i> of the
* current thread is cleared when this exception is thrown.
*/
public final synchronized void join(long millis)
throws InterruptedException {
long base = System.currentTimeMillis();
long now = 0;
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (millis == 0) {
while (isAlive()) {
wait(0);
}
} else {
while (isAlive()) {
long delay = millis - now;
if (delay <= 0) {
break;
}
wait(delay);
now = System.currentTimeMillis() - base;
}
}
}
q就意味着main U程调用t.joinӞ必须能够拿到U程t对象的锁Q如果拿不到它是无法wait的,刚开的例子t.join(1000)不是说明了mainU程{待1U,如果在它{待之前Q其他线E获取了t对象的锁Q它{待旉可不是1毫秒了。上代码介绍Q?br />
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package concurrentstudy;
/**
*
* @author vma
*/
public class JoinTest {
public static void main(String[] args) {
Thread t = new Thread(new RunnableImpl());
new ThreadTest(t).start();
t.start();
try {
t.join();
System.out.println("joinFinish");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class ThreadTest extends Thread {
Thread thread;
public ThreadTest(Thread thread) {
this.thread = thread;
}
@Override
public void run() {
holdThreadLock();
}
public void holdThreadLock() {
synchronized (thread) {
System.out.println("getObjectLock");
try {
Thread.sleep(9000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
System.out.println("ReleaseObjectLock");
}
}
}
class RunnableImpl implements Runnable {
@Override
public void run() {
try {
System.out.println("Begin sleep");
Thread.sleep(2000);
System.out.println("End sleep");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
q行l果是:
getObjectLock
Begin sleep
End sleep
ReleaseObjectLock
joinFinish
结Q?br />
本节主要深入出join及JQO中的实现?br />
在下一节中Q我们将要讨论SWing 中的事gҎU程来解决一个网友问到的问题Q?/a>
如何控制SwingE序在单机只有一个实例,也就是不能运行第二个MainҎ?/span>
# pkginfo |grep SUNWexplo
如果有安装的话:
# /opt/SUNWexplo/bin/explorer
攉到的文g在:
# /opt/SUNWexplo/output CPU
内存
盘理
文gpȝ
|络
pȝ基本操作
文g操作
用户理
其它理
crontab -l>tmp
~辑q个文gQ做需要的修改
vi tmp
推回 crontab
crontab tmp NBU 备䆾
盘阵列理
7:使用嵌套查询
8:分布式查?/p>
说明:1:having关键字都与group by用在一?
2:having不支持对列分配的别名
例如:select 学历,"'大于5的h?'=count(学历) from work group by 学历 having 大于5的h?gt;5 [错错]
改ؓ:select 学历,"'大于5的h?'=count(学历) from work group by 学历 having count(学历)>5
使用compute子句允许同时观察查询所得到各列的数据的l节以及l计各列数据所产生的汇d
select * from work [查询所得到的各列的数据的细节]
compute max(基本工资),min(基本工资) [l计之后的结果]
q个例子中没有用by关键?q回的结果是最后添加了一行基本工资的最大值和最?也可增加by关键?
?select * from work order by 学历
compute max(基本工资),min(基本工资) by 学历
比较:select 学历,max(基本工资),min(基本工资) from work group by 学历
说明:1:compute子句必须与order by子句用在一?br />
2:compute子句可以q回多种l果?一U是体现数据l节的数据集,可以按分c要求进行正的分类Q另一U在分类的基上进行汇M生结?
3:而group by子句Ҏ一cL据分cM后只能生一个结?不能知道l节
查询中再查询,通常是以一个查询作为条件来供另一个查询?br />
?有work表和部门?br />
A:索出在部门表中登记的所有部门的职工基本资料
select * from work where 部门~号 in [not in](select 部门~号 from dbo.部门)
B:索出在work表中每一个部门的最高基本工资的职工资料
select * from work a where 基本工资=(select max(基本工资) from work b where a.部门名称=b.部门名称)
说明:由外查询提供一个部门名U给内查?内查询利用这个部门名U找到该部门的最高基本工?然后外查询根据基本工资判断是否等于最高工?如果是的,则显C出?
相当?select * from work,(select 部门名称,max(基本工资) as 基本工资 from work group by 部门名称 as t) where work.基本工资=t.基本工资 and work.部门名称=t.部门名称
C:用嵌套work表和嵌套部门?在嵌套work表中索出姓名和职工号都在嵌套部门存在的职工资?
select * from 嵌套work where 职工?in (select 职工?from 嵌套部门) and 姓名 in (select 姓名 from 嵌套部门) [察看l果,分析原因]
?select * from 嵌套work a,嵌套部门 b where a.职工?b.职工?and a.姓名=b.姓名
?select * from 嵌套work where 职工?(select 职工?from 嵌套部门) and 姓名=(select 姓名 from 嵌套部门) [行吗?Z?分析原因?]
?1:用嵌套work表和嵌套部门?在嵌套work表中索出姓名和职工号都在嵌套部门存在的职工资?
select * from 嵌套work a where exists (select * from 嵌套部门 b where a.姓名=b.姓名 and a.职工?b.职工?
2:在work表检索出在部门表没有的职?br />
select * from work where not exists (select * from 部门 where 部门.部门~号=work.部门~号)
能否Ҏ:select * from work where exists (select * from 部门 where 部门.部门~号<>work.部门~号)
在列清单中用select
?1:在work1表和部门表中索出所有部门的部门名称和基本工资d
select 部门名称,(select sum(基本工资) from work1 b where a.部门~号=b.部门~号) from 部门 a
2:索各部门的职工h?br />
select 部门~号,部门名称,(select count(职工? from work1 a where a.部门~号=b.部门~号) as 人数 from 部门 b
3:在商品表和销售表中查询每一职工的姓?所属部?销售总量
select 姓名,所属部?(select sum(销售量) from 商品销?a where a.职工?b.职工? as 销售总量 from 嵌套部门 b
“链接服务?#8221;的创?br />
A:?#8220;链接服务?#8221;里面输入以后Z方便讉K该链接服务器的名U[L]
B:?#8220;提供E序名称”里面选择“Microsoft OLE DB Provider for SQL Server”
C:?#8220;数据?#8221;里面输入服务器的|络?br />
D:本地d,q程用户和远E密码里面分别输入一个本地登录用?q程d和远E密码以便让本地SQL Serverd映射为链接服务器上的用户
E:讉KҎ:格式:链接服务器的名称.数据库名.dbo.表名
链接服务器有两个特点:
1:通过链接服务器不能删除链接源服务器的M对像.
2:能过链接服务器可以对链接源服务器的表q行insert,updae,delete操作.
视图
1:什么是视图
2:视图和查询的区别
3:视图的优?br />
4:如何创徏和管理视?br />
5:如何通过视图修改基本表的数据
6:如何通过视图实现数据的安全?/p>
视图(view):从一个或几个基本表中Ҏ用户需要而做成一个虚?br />
1:视图是虚?它在存储时只存储视图的定?而没有存储对应的数据
2:视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,q展现给用户
视图和查询都是用由sql语句l成,q是他们相同的地?但是视图和查询有着本质区别:
它们的区别在?1:存储上的区别:视图存储为数据库设计的一部分,而查询则不是.
2:更新限制的要求不一?br />
要注?因ؓ视图来自于表,所以通过视图可以间接对表q行更新,我们也可以通过update语句对表q行更新,但是对视囑֒查询更新限制是不同的,以下我们会知道虽焉过视图可以间接更新表但是有很多限制.
3:排序l果:通过sql语句,可以对一个表q行排序,而视囑ֈ不行.
比如:创徏一个含有order by子句的视?看一下可以成功吗?
Z么有了表q要引入视图呢?q是因ؓ视图h以下几个优点:
1:能分割数?化观?br />
可以通过select和where来定义视?从而可以分割数据基表中某些对于用户不关心的数据,使用h注意力集中到所兛_的数据列.q一步简化浏览数据工?
2:为数据提供一定的逻辑独立?br />
如果为某一个基表定义一个视?即以后基本表的内容的发生改变了也不会媄?#8220;视图定义”所得到的数?br />
3:提供自动的安全保护功?br />
视图能像基本表一h予或撤消讉K许可?
4:视图可以间接对表q行更新,因此视图的更新就是表的更?/p>
视图的创?br />
1:通过sql语句
格式:create view 视图?as select 语句
试一?分别创徏关于一个表或多个表的视图[因ؓ视图可以来自于多表]
2:通过企业理?nbsp;
说明:1:在完成视囄创立之后,可以像使用基本表一h使用视图
2:在创图时,q所有的select子查询都可用
?compute和compute by,order by[除非与top一赯用]
3:但在查询?依然都可以用在创建时用的select子查?br />
4:在视囑ֈ建时,必须为没有标题列指定标题[思?能否不用select语句来创Z个视图]
视图的删?
1:通过sql语句:drop view 视图?br />
2:通过企业理?br />
说明:与删除表不同的是,删除视图后只是删除了视图了定?q没有删除表中的数据.[查看相关性]
修改视图的定?br />
1:通过企业理?br />
2:通过sql语句:
格式:alter view 视图?as 新的select语句
1:在视图上使用insert语句
通过视图插入数据与直接在表中插入数据一?但视图毕竟不是基本表.因此在进行数据插入时q是有一定的限制
1:如果视图上没有包括基本表中属性ؓnot null[不能为空]的列,那么插入操作会因为那些列是nullD失?
2:如果某些列因为某些规则或U束的限制而不能直接接受从视图插入的列?插入会失?br />
3:如果在视图中包含了用统计函数的l果,或是包含计算?则插入操作会p|
4:不能在用了distinct语句的视图中插入?br />
5:不能在用了group by语句的视图中插入?/p>
1:更新视图与更新表g?但是在视图中使用了多个基本表q接的情况下,每次更新操作只能更新来自基本表的一个数据列
例如:创徏以下视图:create view del as
select 职工?姓名,部门名称,负责?from work1,部门
where work1.部门~号=部门.部门~号
如果再执行下面的语句?
update del set 职工?"'001"',部门名称="'wenda"' where 职工?"'01"'[出现错误]
只能够改?update del set 职工?"'001"' where 职工?"'01"'
update del set 部门名称="'wenda"' where 职工?"'01"'
2:不能在用了distinct语句的视图中更新?br />
3:不能在用了group by语句的视图中更新?br />
3:使用delete删除视图中数?
通过视图删除数据最l体Cؓ从基本表中删除数?br />
格式:delete 视图?[where 条g]
说明:当视囄两个以上的基表构成时,不允许删除视囄数据
例如:Z个视图kk
create view kk as
select 职工?姓名,性别,部门名称 from work1,部门 where work1.部门~号=部门.部门~号 [试着d除]
比如:create view xm as
select * from work where 性别="'?'
完全可以插入insert xm values("'001"',"'?',23,"'2400"'....)
管从意义上来说是不合理?但是上述语句是正的.Z防止q种情况的发?可以使用with check option子句来对插入的或更改的数据进行限?
比如:create view xm as
select * from work where 性别="'?' with check option
我们知道视图是依赖于?如果在一个表中创Z个视?今后如果q个表被删除?则这个视囑ְ不可再用?Z防止用户删除一个有视图在引用的?可以在创囄时候加上schemabinding关键?
比如:create view 基本工资 with SCHEMABINDING
as select 姓名,性别,基本工资 from dbo.work
说明:1:不能使用“*”来创建此cd的视?br />
2:创徏此类型的视图?一定要加上dbo.表名.
3:如果在某个表中定义了此类视图,则用户将不能对表的结构进行修?否则会删除这些绑?br />
4:如果用户对表的结构进行列改名,则会删除l定而且视图不可?
5:如果用户对表的结构进行列的类型或者大修?则会删除l定但视囑֏?此时用户可以删除视图所引用的表.
使用with encryption对视图进行加?br />
Z保护创徏视图定义的原代码,可以对视图进行加?
比如:create view kk with encryption
as select * from work where 职称="'l理"'
用sp_helptext来查看一?或用企业理器查看一?
说明:如果应用此项用户无法设计视?/p>
A:对不同用h予不同的使用?
B:通过使用select子句限制用户Ҏ些底层基表的列的讉K
C:通过使用where子句限制用户Ҏ些底层基表的行的讉K
对不同用h予不同的权限
1、不要用Truncate Table语句。刚开始学q个语句的时候,怿很多人多会拿出来跑一跑,会很高兴地向同事证明你的Truncate Table比Delete跑得更快Q但是如果你Lq样的习惯,万一有一天误删东西的时候,p原不回来了,因ؓTruncate Table不会记录日志Q所以,如果操作重要数据的时候,q是用回Delete语句吧?br />
2、每ơ动数据库之前,都先要把数据库备份v来。这个习惯一定要LQ你操作数据库的时候,哪怕只是做一ơ简单的查询或只是删除几条普通的数据Q都先备份一下,不会׃很多旉Q却在你p的时候可以把你从M的边~拉回来。如果数据比较大Q至也要把表里的数据备份出来?br />
3、把删除语句以及更新语句、插入语句注释掉。我们操作数据库Ӟ通常都喜Ƣ在查询分析器里写一大堆SQLQ然后选择某一条,按F5来执行,但有时候会直接按下F5Q导致所有的语句都执行,l数据造成一定的损害。如果你把那些有影响的语句注释掉了,q按错了也没有关系?br />
4、不要随便地dL据库。如果我们要获取整个数据库的数据Ӟ量采用把数据备份下来,然后取到其他机器上还原,而不要把数据库分,然后再复制到其它机器附加。有时候,数据库分M之后׃造成无法附加Q虽然概率很,但一旦碰上了׃很麻烦,其是一些实时的pȝ?br />
5、自׃熟悉的数据库Q不要去动它。我们维护数据库Ӟ有时候要 出差到其他市L作数据,q时Q其他项目组的同事可能会叫你帮忙更新q个更新那个的,如果你很熟悉数据库的l构Q以及了解更新的影响E度Q那么你帮忙操作无所谓,如果你不熟悉Q尽量不操作Q如果你做好了,功劳不是你的Q如果出了什么差错,你就要背黑锅了?br />
6、n体疲x不要操作数据库。加班是E序员的家常侉KQ当你加班到w体很疲xQ操作数据库p的概率会很大Q我记得刚刚出来工作时有一ơ我写了一个DELETE语句Q选择执行了居然漏选了一个WHERE条gQ还好数据比较多Q超时了Q要不然?........
7、如果自己对数据库结构了解很透彻Q而且你的数据库技术水q_l达C定的高度Q更加要心了,通常出现误操作导致数据失真就是这个阶D,有时候学了一个新语法׃马上拿去试着使用?br />
8、经常要考虑你的SQL脚本有没有什么漏z,或者有没有其他Ҏ可以更有效率地执行?br />
9、SQL SERVER2000里面有一个宝藏,是它的联机丛书Q徏议经常去阅读它,当你把它dq理解之后,你的SQL水^基本可以超80%的程序员了,Ҏ不要去迷信什么NB的教材,但到了那个时候,你会发现自己懂的东西了Q要学习的东西更多了?br />
先ȝ到这里,如果大家有什么好的经验或Q请多多提出Q大家共同交!
异常cdQHiBERNATE中的xml解析器不能找到DTD文g
异常原因Q因为hibernate的xml解析器解?xml文g的时候需要根据文档头?DOCTYPELDTD定义文g
查看你定义的.xml文g是有效?br />
解决ҎQ正配|DTD文g的\?/p>