|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对于update操作,event中依次记录旧行,新行的值。第一部分数据库基本
1、基础观点
1.甚么是SQL?
SQL即布局化查询言语,是用于干系数据库通迅的尺度言语,经由过程SQL用户可向数据库表达自已的需求。
2.甚么是客户机/服务器手艺?
在客户机/服务器中,主机叫作服务器,收集一般是局域网(LAN)或是广域网(WAN).服务器一般被团体盘算机或是其他的服务器或团体盘算机而不是终端会见.每台PC机都叫做一个客户机,都有会见收集的功效,同意在客户机和服务器之间通讯因而叫客户机/服务器手艺.
2、数据处置的开展阶段
1、手工处置阶段:
50年月中期,盘算机内存、外存容量都很小,外存只要磁带,没有磁盘,硬件功能很差;软件中也没无数据办理部分,因此次要限于迷信盘算;这一阶段次要是用手工举行数据处置。
2、文件体系阶段:数据和程序的分别招致了文件体系的出生。
按次与随机文件构造并用;
批量与及时处置并存;
物理和逻辑布局有了复杂变更;
软件供应存取办法;
数据冗余较多,数据不克不及共享;
文件或数据属于一个用户;
数据自力性差,数据布局和程序合为一体;
无会合办理,没法用全局概念而只能面向部分使用举行数据布局计划。
3、数据库体系阶段:
数据库手艺的方针就是克制文件体系的弊端,办理冗余和数据自力性成绩,并经由过程一软件体系(DBMS)来会合办理一切文件,从而完成数据共享,其实质是经由过程分层,第一层面向用户,第二层面向全局,第三层面向物理存贮,层和层这间经由过程两级变更,如许将用户使用文件与物理文件完整分别,分离完成了数据的逻辑和物理自力性。
模子:为把数据和程序完整分别,分为三种模子:
内模子或物理模子:面向盘算机物理存贮;
观点模子:面向体系全体;(DBMS)
外模子:面向用户。
形式:用DDL准确界说数据模子的程序;
内形式:界说内模子的形式;
观点形式:界说观点模子的形式;
外形式:界说外模子(面向用户)的形式。
数据模子:暗示实体(ENTITY)和实体间接洽(RELATIONSHIP)的模子;有四种情势:
E-R模子:最直不雅的形貌体例,实体集用长方形暗示,属性用椭圆暗示,接洽用菱形暗示;
条理模子:可暗示1-m干系,有独一根(和父)结点;
网状模子:可暗示m-m干系;
干系模子:以表来暗示数据间的接洽,经由过程表格数据而不是经由过程指针链接来暗示和完成两实体间的干系。
3、ORACLE简介
自1970年CODD宣布干系实际后,干系型数据库失掉了飞速的开展,如INFORMIX、DB2等;
后来ORACLE是一开展较完美的干系型数据库,已由单一的数据库开展到多种服务,多种产物的;ORACLERDBMS是ORACLE体系的中心,它由数据库办理的中心模块和匡助用户和数据库办理员DBA保护、监督和利用数据库的一些有用程序构成。RDBMS的中心模块就是SQL的完成模块,它是一切有用程序的基本。
问:在三种形式(内、观点、外形式)中ORACLE是对应于哪一种形式;
在四种数据模子(E-R、条理、网状、干系型)中ORACLE响应于哪一种?
4、SQL命令简介
1、DDL数据界说言语.
CREATETABLE;ALTERTABLE;DROPTABLE;
CREATEVIEW;ALTERVIEW;DROPVIEW;
CREATEINDEX;ALTERINDEX;DROPINDEX;
2、DML数据利用言语.
INSERT向表中拔出新数据行;
UPDATE更新表中现有的数据;
DELETE从表中删除几行数据;
3、DQL数据查询言语.
SELECT从一张或多张表中前往数据;
4、DCL数据把持言语.
ALTERPASSWORD变动用户暗码;
GRANT为用户付与特权;
REVOKE发出用户特权;
CREATESYNONYM创立同义词
5、数据办理命令.
STARTAUDIT
STOPAUDIT
6、事件性把持命令.
COMMIT将事件保留到数据库;
ROLLBACK取消一个数据库事件;
SAVEPOINT创立在需要时能够取消事件的保留点;
SETTRANSACTION设置事件。
第二部分创建数据库
1、基础观点
1、数据库和数据库工具?
数据库是数据的汇合体;
数据库工具能够是数据库中界说的任何工具,用于存储和参照数据,表是干系数据库最复杂的存储情势,另有视图、索引等。
2、甚么是形式?
形式数据库工具的汇合,并有一个与之相干连着的特定的用户名,一个形式能够包含一张表和没无数量限定的工具.
3、数据布局
定长字符串CHAR变长字符串VARCHAR2数字值NUMBER
小数点数值DECIMAL整型INTEGER浮点小数FLOAT
日期和工夫DATE笔墨串STRINGNULL型数据.
2、表及其基础操纵
在干系数据库中,表是数据的次要存储工具,表包括了行和列,寄存实在体及其接洽,表在数据库中占据的物理空间能够是永世性的,也但是临时的。
1、创立表的基础语法为:
CREATETABLEtable_name
(field1datatype[notnull]
field2datatype[notnull]
field3datatype[notnull])
storage
(INITIALx初始空间
NEXTx附加空间);
例:
CREATETABLEEMPLOYEE_TBL
(EMP_IDCHAR(9)NOTNULL,
EMP_NAMEVARCHAR(40)NOTNULL,
EMP_ZIPNUMBER(6)NULL,
EMP_PHONENUMBER(10)NULL)
STORAGE
(INITIAL3K
NEXT2K);
2、修正表的语法为:
ALTERTABLEtable_name
[MODIFY][columncolumn_name][datatypenotnull|null)][restrict|cascade]
[DROP][constraintconstraint_name]
[ADD][column]columndefinition;
例:
ALTERTABLEEMPLOYEE_TBL
MODIFY(EMP_PHONENUMBER(11)NULL);
3、从现有表中创立一新表
CREATETABLENEW_TABLE_NAMEAS
SELECT[*|COLUMN1COLUM2]
FROMTABLE_NAME
[WHEREcondition]
例:
CREATETABLEPHONE_TBLAS
SELECT(EMP_ID,EMP_PHONE)
FROMEMPLOYEE_TBL;
4、删除表的语法为:
DROPTABLEtable_name
例:
DROPTABLEPHONE_TBL;
5、ORCALE补:
DESCRIBE显现表的布局及一切表列的提要;
3、完全性束缚.
在干系数据库中,完全性束缚用于确保数据的正确性和分歧性,是经由过程参照完全性完成的。
1、主键束缚:PRIMARYKEY在表中标识一列或多个列,来使一行数据坚持独一性,用于查询参考,表的团结;
例:
ALTERTABLEEMPLOYEE_TBL
MODIFY(EMP_IDCHAR(9)NOTNULLPRIMARYKEY);
2、独一性束缚:UNIQUE对应列不存在不异的数值;
例:
ALTERTABLEEMPLOYEE_TBL
MODIFY(EMP_PHONENUMBER(11)NULLUNIQUE);
3、外键束缚:
FOREIGNKEYKEY_NAME_FK(KEY_NAME)
FEFERENCESTBL_NAME(KEY_NAME)
例:
CREATETABLEEMPLOYEE_PAY_TBL
(EMP_IDCHAR(9)NOTNULL,
POSITIONVARCHAR2(15)NOTNULL,
PAY_RATENUMBER(4,2)NOTNULL)
FOREIGNKEYEMP_ID_FK(EMP_ID)
REFERENCESEMPLOYEE_TBL(EMP_ID));
注:要在子表中拔出值,必需在父表中KEY_NAME起首存在对应的值;
4、NOTNULL束缚:不同意有NULL值;
注:改动表属性时,NOTNULL->NULL可,
而NULL->NOTNULL值时,要看是不是有NUL值;
5、利用Check束缚:用来反省数占有效性;
例:
CREATETABLECUSTOMER_TBL
(CUST_IDCHAR(9)NOTNULL,
CUST_NAMEVARCHAR2NOTNULL,
CUST_CITYVARCHAR2NOTNULL,
CUST_ZIPNUMBER(5)NULL,
CUST_PHONENUMBER(11)),
PRIMARYKEY(CUST_ID),
CONSTRAINTCHK_EMP_ZIPCHECK(EMP_ZIP=‘430079’);
4、标准化历程.
1、甚么是标准化?
标准化是数据库中削减数据冗余的历程.除数据库中,称号,工具称号和情势都必要标准化.
2、将数据库标准化
在数据库标准的过程当中,三个经常使用的范式为:
第一范式:将基础数据按主键分红称为表的逻辑单位;
第二范式:利用仅仅部分依附于主键的数据输出到其他表中;
第三范式:从表中将不依附于主键的数据撤除;
例:
COMPANY_DATABASE
(emp_idlast_namefirst_namemiddle_name
addresscityzipphone
positionposition_descdate_hirepay_rate
date_last_raisecust_idcust_namecust_address
cust_citycust_zipcust_faxqty
ord_numord_dateprod_idprod_desc
cost)
按第一范式的请求可分为三个表:
EMPLOYEE_TBL
(emp_idlast_namefirst_namemiddle_name
addresscityzipphone
positiondate_hirepay_ratedate_last_raise)
CUSTOMER_TBL
(cust_idcust_namecust_addresscust_city
cust_zipcust_phonecust_faxqty
ord_numord_date)
PRODUCTS_TBL
(prod_idprod_desccost)
按第二范式的请求EMPLOYEE_TBL可分为两张表:
EMPLOYEE_TBL
(emp_idlast_namefirst_namemiddle_name
addresscityzipphone)
EMPLOYEE_PAY_TBL
(emp_idpositionposition_descdate_hire
pay_ratedate_last_raise)
依据第三范式EMPLOYEE_PAY_TBL可分为两个表:
EMPLOYEE_PAY_TBL
(emp_idpositiondate_hisrepay_rate
date_last_raise)
POSITION_TBL
(positionposition_desc)
3、标准式的优点和坏处
年夜型的整体数据库构造,
削减数据冗余,
数据库中的数据分歧性,
加倍天真的数据库计划,
更好的数据库平安处置;
其次要坏处是下降了数据库的可操纵性,因此要举行得当的非标准化。
第三部分.利用数据.
1、数据利用综述.
数据利用言语(DML)是SQL的一部分,它同意数据库用户在干系型数据库中举行数据的改动.
在SQL中有三种基础的DML命令
1、INSERT(拔出)
2、UPDATE(更新)
3.DELETE(删除)
2、给表中添补数据.
1、往表中拔出新数据
INSERTINTOtable_name
VALUES(‘values1’,’values2’)
例:
INSERTINTOEMPLOYEE_TBL
VALUES(‘1’,‘武建军’,‘430079’,‘027111’)
2、往表中无限列中拔出数据.
INSERTINTOtable_name(‘column1’,’column2’)
VALUES(‘values1’,’values2’)
例:
INSERTINTOEMPLOYEE_TBL(‘emp_id’,’emp_name’)
VALUES(‘2’,‘年夜刘’);
3、拔出另外一张表中的数据
INSERTINTOtable_name
SELECT[*|(‘column1’,’column2’)]
fromtable_name[whereconditions(s)];
例:
INSERTINTOCUSTOMER_TBL
SELECT(‘emp_id’,’emp_name’,’emp_zip’,’emp_phone’)
fromEMPLOYEE_TBL
whereemp_zip=’430079’;
4、拔出NULL值.
基础语法为:Insertintotable_name(‘column1’,NULL,’column3’)
思索:
拔出时,值列表中多值、少值行吗?
NULL和‘NULL’是不是一样?
,,和,‘’,行吗?
3、更新已存在的数据.
1、只更新独自一列的数据
UPDATEtable_name
SETcolumn_name=‘value’
[wherecondition];
2、在一行或多行纪录中更新多个列
UPDATEtable_name
SETcolumn1=‘value’,
[column2=‘vlaue’];
4.从表中删除数据
从表中删除一条独自的纪录或是被选的多笔记录
DELETEfromtable_name
where[condition];
第四部分.数据库事件办理.
1、事件把持命令
事件把持是对在干系数据库中大概产生的分歧事件的办理才能.
用于事件把持的命令:
1、COMMIT命令
COMMIT命令是一条事件命令,用于保留数据库中由事件引发的改动.COMMIT命令保留自从上一条COMMIT或ROLLBACK命令以来的一切事件.
语法为:COMMIT[word];
2、ROLLBACK命令
COMMIT命令是用于取消那些还没有保留到数据库中由事件的事件把持命令.ROLLBACK命令只能用于取消上一条COMMIT命令或ROLLBACK命令实行后的事件。
语法为:ROLLBACK[word];
3、SAVEPOINT命令
SAVEPOINT命令保留点是在事件中,可以举行事件滚回的点,而不必要滚回全部事件
语法为:SAVEPOINTpoint_name;
ROLLBACKtopoint_name;
2、事件把持和数据库的功能
糟的事件把持会损坏数据库的功能,乃至给数据库带来伤害。数据库重复的低功能多是由于在大批拔出,更新或删除操纵中缺少事件把持;当实行大批事件事情时,应频仍利用COMMIT和ROLLBACK命令来开释数据库空间。
第五部分数据查询言语DQL
1、基础的Select语句
SELECT[all|*|[distinct]column1,column2…]
Fromtable1[,table2…]
[WHEREconditons]
[GROUPBYcolumn1,column2,……
[HAVINGconditions]
[ORDERBYcolumn1,colunm2…]
2、利用操纵符给数据分类
1、对照操纵符(=,,<,>)
例:
SELECT*
FROMEMPLOYEE_TBL
WHEREEMP_ZIP=’430079’;
2、逻辑操纵符(ISNULL,BETWEEN,IN,LIKE,EXISTS,UNIQUE,ALL,ANY)
ISNULL:用于对照带有NULL值的值;
BETWEEN:用于在一个局限中取值;
IN:用于前往在一系列指定的值中的了局;
LIKE:取同指定值类似的值(%代表恣意个字符,而_代表一个);
EXISTS:查询是不是存在一行切合某前提的数据;
UNIQUE:测试是不是有反复数据;
ALL:指数据会合的每个值;
ANY:指数据会合的任一个值;
例:
SELECT*
FROMEMPLOYEE_TBL
WHEREEMP_SALARY>ALL
(SELECTEMP_SALARY
FROMEMP_SALARY
WHEREEMP_CITY=’武汉’);
3、毗连符(AND,OR)
例:
SELECT*
FROMEMPLOYEE_TBL
WHEREEMP_ZIP=’430079’
OREMP_ZIP=’430074’;
4、数学运算符的组合
例:
SELECTEMP_SALARY*12
FROMEMPLOYEE_TBL;
3、统计查询了局数据
1、COUNT:用于统计行数;
例:
SELECTCOUNT(EMP_ID)
FROMEMPLOYEE_TBL;
2、SUM:用于前往一组数据行中某列值的总和;
例:
SELECTSUM(EMP_SALARY)
FROMEMPLOYEE_TBL;
3、AVG:用于断定一组数据的均匀值;
例:
SELECTAVG(EMP_SALARY)
FROMEMPLOYEE_TBL;
4、MAX:用于前往一组数据的最年夜值;
例:
SELECTMAX(EMP_SALARY)
FROMEMPLOYEE_TBL;
5、MIN:用于前往一组数据的最小值;
例:
SELECTMIN(EMP_SALARY)
FROMEMPLOYEE_TBL;
4、排序和分组
1、分组:GROUPBY
例:
SELECTEMPLOYEE_NAME,EMP_CITY
FROMEMPLOYEE_TBL
GROUPBYEMP_CITY,EMPLOYEE_NAME;
注:假如在SELECT子句中援用的是列名,列名必定也会用于GROUPBY的中;
不克不及像ORDERBY一样经由过程利用整数列名来举行排序,除非便用了UNION,而且列名都各自分歧。
2、排序:ORDERBY
例:
SELECTEMP_CITY,COUNT(*)
FROMEMPLOYEE_TBL
GROUPBYEMP_CITY
ORDERBY2,1;
3、HAVING子句:跟在GROUPBY以后,ORDERBY之前,设置前提;
例:
SELECTEMP_CITY,AVG(PAY_RATE),AVG(EMP_SALARY)
FROMEMP_PAY_TBL
WHERECITY‘武汉‘
GROUPBYEMP_CITY
HAVINGAVG(EMP_SALARY)>2000;
第六部分练习题
1叨教SQL命令可分为哪六类,每类都有哪些详细的命令?
2请创建以下五个表格,并用DESC命令反省它们的布局。
表employee_tbl布局
emp_idvarchar2(9)notnull,
last_namevarchar2(15)notnull,
first_namevarchar2(15)notnull,
middle_namevarchar2(15),
addressvarchar2(30)notnull,
cityvarchar2(15)notnull,
statechar(2)notnull,
zipnumber(5)notnull,
phonechar(10),
pagerchar(10),
constraintemp_pkprimarykey(emp_id)
表employee_pay_tbl布局
emp_idvarchar2(9)notnull,
positionvarchar2(15)notnull,
date_hiredate,
pay_ratenumber(4,2),
date_last_raisedate,
salarynumber(8,2),
bonusnumber(6,2),
constraintemp_fkforeignkey(emp_id)referencesemployee_tbl(emp_id)
表customer_tbl布局
cust_idvarchar2(10)notnullprimarykey,
cust_namevarchar2(30)notnull,
cust_addressvarchar(20)notnull,
cust_cityvarchar2(15)notnull,
cust_statechar(2)notnull,
cust_zipnumber(5)notnull,
cust_phonenumber(10),
cust_faxnumber(10)
表orders_tbl布局
ord_numvarchar2(10)notnullprimarykey,
cust_idvarchar2(10)notnull,
prod_idvarchar2(10)notnull,
qtynumber(6)notnull,
ord_datedate
表products_tbl布局
prod_idvarchar2(10)notnullprimarykey,
prod_descvarchar2(40)notnull,
costnumber(6,2)notnull
出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。 |
|