数据库基础.docx
《数据库基础.docx》由会员分享,可在线阅读,更多相关《数据库基础.docx(13页珍藏版)》请在冰豆网上搜索。
![数据库基础.docx](https://file1.bdocx.com/fileroot1/2023-1/21/6eae44f6-5602-4d7a-b4e1-0c9eda3d5085/6eae44f6-5602-4d7a-b4e1-0c9eda3d50851.gif)
数据库基础
三.Mysql常识
(一)字段类型
1.INT[(M)]
正常大小整数类型
2.DOUBLE[(M,D)][ZEROFILL]
正常大小(双精密)浮点数字类型
3.DATE
日期类型。
支持的范围是'1000-01-01'到'9999-12-31'。
MySQL以'YYYY-MM-DD'格式来显示DATE值,但是允许你使用字符串或数字把值赋给 DATE列
4.CHAR(M)
定长字符串类型,当存储时,总是是用空格填满右边到指定的长度
5.BLOBTEXT
BLOB或TEXT类型,最大长度为65535(2^16-1)个字符。
6.VARCHAR
变长字符串类型,最常用的类型。
(二)基本操作
1:
显示数据库
mysql>SHOWDATABASES;
2:
当前选择的数据库,
mysql>SELECTDATABASE();
+------------+
|DATABASE()|
+------------+
|test|
+------------+
3.当前数据库包含的表信息:
mysql>SHOWTABLES;
+---------------------+
|Tablesintest|
+---------------------+
|mytable1|
|mytable2|
+---------------------+
4.获取表结构
mysql>descmytable1;
+---------+-------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+---------+-------------+------+-----+---------+-------+
|s1|varchar(20)|YES||NULL||
+---------+-------------+------+-----+---------+-------+
5.创建表
表是数据库的最基本元素之一,表与表之间可以相互独立,也可以相互关联。
创建表的基本语法如下:
createtabletable_name
(column_namedatatype{identity|null|notnull},
…)
其中参数table_name和column_name必须满足用户数据库中的识别器(identifier)的要求,参数datatype是一个标准的SQL类型或由用户数 据库提供的类型。
用户要使用non-null从句为各字段输入数据。
createtable还有一些其他选项,如创建临时表和使用select子句从其他的表中读取某些字段组成新表等。
还有,在创建表是可用PRIMARY KEY、KEY、INDEX等标识符设定某些字段为主键或索引等。
书写上要注意:
在一对圆括号里的列出完整的字段清单。
字段名间用逗号隔开 。
字段名间的逗号后要加一个空格。
最后一个字段名后不用逗号。
所有的SQL陈述都以分号";"结束。
例:
mysql>CREATETABLEguest(namevarchar(10),sexvarchar
(2),ageint(3),careervarchar(10));
6.创建索引
索引用于对数据库的查询。
一般数据库建有多种索引方案,每种方案都精于某一特定的查询类。
索引可以加速对数据库的查询过程。
创建 索引的基本语法如下:
createindexindex_name
ontable_name(col_name[(length)],...)
例:
mysql>CREATEINDEXnumberONguest(number(10));
7.执行查询
查询是使用最多的SQL命令。
查询数据库需要凭借结构、索引和字段类型等因素。
大多数数据库含有一个优化器(optimizer),把用户的查 询语句转换成可选的形式,以提高查询效率。
值得注意的是MySQL不支持SQL92标准的嵌套的where子句,即它只支持一个where子句。
其基本语法如下:
SELECT[STRAIGHT_JOIN][SQL_SMALL_RESULT][SQL_BIG_RESULT][HIGH_PRIORITY]
[DISTINCT|DISTINCTROW|ALL]
select_expression,...
[INTO{OUTFILE|DUMPFILE}'file_name'export_options]
[FROMtable_references
[WHEREwhere_definition]
[GROUPBYcol_name,...]
[HAVINGwhere_definition]
[ORDERBY{unsigned_integer|col_name|formula}[ASC|DESC],...]
[LIMIT[offset,]rows]
[PROCEDUREprocedure_name]]
其中where从句是定义选择标准的地方,where_definition可以有不同的格式,但都遵循下面的形式:
字段名操作表达式
字段名操作字段名
在第一种形式下,标准把字段的值与表达式进行比较;在第二种形式下,把两个字段的值进行比较。
根据所比较的数据类型, search_condition中的操作可能选以下几种:
=检查是否相等
!
=检查是否不等
>(或>=)检查左边值是否大于(或大于等于)右边值
<(或<=)检查左边值是否小于(或小于等于)右边值
[not]between检查左边值是否在某个范围内
[not]in检查左边是否某个特定集的成员
[not]like检查左边是否为右边的子串
is[not]null检查左边是否为空值
在这里,可以用通配符_代表任何一个字符,%代表任何字符串。
使用关键字、和可以生成复杂的词,它们运行检查时使用 布尔表达式的多重标准集。
例:
mysql>selectt1.name,t2.salaryfromemployeeASt1,infoASt2swherest1.name=t2.name;
mysql>selectcollege,region,seedfromtournament
ORDERBYregion,seed;
mysql>selectcol_namefromtbl_nameswherescol_name>0;
8.改变表结构
在数据库的使用过程中,有时需要改变它的表结构,包括改变字段名,甚至改变不同数据库字段间的关系。
可以实现上述改变的命令是 alter,其基本语法如下:
altertabletable_namealter_spec[,alter_spec...]
例:
mysql>altertabledbnameaddcolumnuseridint(11)notnullprimarykeyauto_increment;
这样,就在表dbname中添加了一个字段userid,类型为int(11)。
9.修改表中数据
在使用数据库过程中,往往要修改其表中的数据,比如往表中添加新数据,删除表中原有数据,或对表中原有数据进行更改。
它们的基本 语法如下:
数据添加:
insert[into]table_name[(column(s))]
values(expression(s))
例:
mysql>insertsintosmydatabasevalues('php','mysql','asp','sqlserver','jsp','oracle');
10.表的数据更新
(1)一次修改一个字段,再次注意语法。
文本需要加引号但数字不要。
mysql>updatetable01setfield03='newinfo'swheresfield01=1;
QueryOK,1rowaffected(0.00sec)
(2)一次改变多个字段,记住在每一个更新的字段间用逗号隔开。
mysql>updatetable01setfield04=19991022,field05=062218swheresfield01=1;
QueryOK,1rowaffected(0.00sec)
(3)一次更新多个数据
mysql>updatetable01setfield05=152901swheresfield04>19990101;
QueryOK,3rowsaffected(0.00sec)
11.删除数据
mysql>deletefromtable01swheresfield01=3;
QueryOK,1rowaffected(0.00sec)
12.导入数据库表
(1)创建.sql文件
(2)先产生一个库如auction.c:
mysqlin>mysqladmin-uroot-pcreatauction,会提示输入密码,然后成功创建。
(3)导入auction.sql文件
c:
mysqlin>mysql-uroot-pauction 通过以上操作,就可以创建了一个数据库auction以及其中的一个表auction。
13.mysql数据库的授权
mysql>grantselect,insert,delete,create,drop
on*.*(或test.*/user.*/..)
to用户名@localhost
identifiedby'密码';
如:
新建一个用户帐号以便可以访问数据库,需要进行如下操作:
mysql>grantusage
->ONtest.*
->TOtestuser@localhost;
QueryOK,0rowsaffected(0.15sec)
此后就创建了一个新用户叫:
testuser,这个用户只能从localhost连接到数据库并可以连接到test数据库。
下一步,我们必须指定 testuser这个用户可以执行哪些操作:
mysql>GRANTselect,insert,delete,update
->ONtest.*
->TOtestuser@localhost;
QueryOK,0rowsaffected(0.00sec)
此操作使testuser能够在每一个test数据库中的表执行SELECT,INSERT和DELETE以及UPDATE查询操作。
现在我们结束操作并退出MySQL客户 程序:
mysql>exit
Bye
14.授权MySQL用户密码
MySQL数据库的默认用户名为"root"(MSSQLServer的sa相似),密码默认为空。
在DOS提示符(注意,不是mysql提示符)下输入
c:
mysqlin>"mysqladmin-uroot-ppasswordnewpassword
回车后会提示你输入原来的密码,由于原来密码为空,直接回车,root用户的密码便改为"newpassword"了。
1:
使用SHOW语句找出在服务器上当前存在什么数据库:
mysql>SHOWDATABASES;
2:
2、创建一个数据库MYSQLDATA
mysql>CREATEDATABASEMYSQLDATA;
3:
选择你所创建的数据库
mysql>USEMYSQLDATA;(按回车键出现Databasechanged时说明操作成功!
)
4:
查看现在的数据库中存在什么表
mysql>SHOWTABLES;
5:
创建一个数据库表
mysql>CREATETABLEMYTABLE(nameVARCHAR(20),sexCHAR
(1));
6:
显示表的结构:
mysql>DESCRIBEMYTABLE;
7:
往表中加入记录
mysql>insertintoMYTABLEvalues(”hyq”,”M”);
8:
用文本方式将数据装入数据库表中(例如D:
/mysql.txt)
mysql>LOADDATALOCALINFILE“D:
/mysql.txt”INTOTABLEMYTABLE;
9:
导入.sql文件命令(例如D:
/mysql.sql)
mysql>usedatabase;
mysql>sourced:
/mysql.sql;
10:
删除表
mysql>dropTABLEMYTABLE;
11:
清空表
mysql>deletefromMYTABLE;
12:
更新表中数据
mysql>updateMYTABLEsetsex=”f”wherename=’hyq’;
Oracle日志查看
一.Oracle日志的路径:
登录:
sqlplus"/assysdba"
查看路径:
SQL>select*fromv$logfile;
SQL>select*fromv$logfile;(#日志文件路径)
二.Oracle日志文件包含哪些内容:
(日志的数量可能略有不同)
control01.ctlexample01.dbfredo02.log sysaux01.dbfundotbs01.dbf
control02.ctlredo03.log system01.dbfusers01.dbf
control03.ctlredo01.log SHTTEST.dbftemp01.dbf
三.Oracle日志的查看方法:
SQL>select*fromv$sql (#查看最近所作的操作)
SQL>select*fromv$sqlarea(#查看最近所作的操作)
Oracle数据库的所有更改都记录在日志中,从目前来看,分析Oracle日志的唯一方法就是使用Oracle公司提供的LogMiner来进行,因为原始的日志信息我们根本无法看懂,Oracle8i后续版本中自带了LogMiner,而LogMiner就是让我们看懂日志信息的工具,通过这个工具可以:
查明数据库的逻辑更改,侦察并更正用户的误操作,执行事后审计,执行变化分析。
四.LogMiner的使用:
1、创建数据字典文件(data-dictionary)
1).首先在init.ora初始化参数文件中,添加一个参数UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。
如:
UTL_FILE_DIR=($ORACLE_HOME\logs),重新启动数据库,使新加的参数生效:
SQL>shutdown;
SQL>startup;
2).然后创建数据字典文件
SQL>connect/assysdba
SQL>executedbms_logmnr_d.build(dictionary_filename=>'dict.ora',dictionary_location=>'/data1/oracle/logs');
PL/SQLproceduresuccessfullycompleted
2、创建要分析的日志文件列表
1).创建分析列表,即所要分析的日志
SQL>executedbmslogmnr.addlogfile(LogFileName=>'/data1/oracle/oradata/akazamdb/redo01.log',Options=>dbms_logmnr.new);
PL/SQLproceduresuccessfullycompleteds
2).添加分析日志文件,一次添加1个为宜
SQL>executedbms_logmnr.add_logfile(LogFileName=>'/data1/oracle/oradata/akazamdb/redo01.log',Options=>dbms_logmnr.ADDFILE);
PL/SQLproceduresuccessfullycompleted
3、使用LogMiner进行日志分析(具体要查询什么内容可以自己修改)
(1)无限制条件
SQL>EXECUTEdbms_logmnr.start_logmnr(
DictFileName=>'/data1/oracle/logs/v816dict.ora');
(2)有限制条件
通过对过程DBMS_LOGMNR.START_LOGMNR中几个不同参数的设置,可以缩小要分析日志文件的范围。
通过设置起始时间和终止时间参数我们可以限制只分析某一时间范围的日志。
如下面的例子,我们仅仅分析2007年9月18日的日志:
SQL>EXECUTEdbms_logmnr.start_logmnr(
DictFileName=>'/data1/oracle/logs/v816dict.ora',
StartTime=>to_date('2007-9-1800:
00:
00','YYYY-MM-DDHH24:
MI:
SS')
EndTime=>to_date(''2007-9-1823:
59:
59','YYYY-MM-DDHH24:
MI:
SS'));
也可以通过设置起始SCN和截至SCN来限制要分析日志的范围:
SQL>EXECUTEdbms_logmnr.start_logmnr(
DictFileName=>'/data1/oracle/logs/v816dict.ora',
StartScn=>20,
EndScn=>50);
4、观察分析结果(v$logmnr_contents)
到现在为止,我们已经分析得到了重作日志文件中的内容。
动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。
SELECTsql_redoFROMv$logmnr_contents;
如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户DB_ZGXT对表SB_DJJL所作的一切工作。
SQL>SELECTsql_redoFROMv$logmnr_contentsWHEREusername='DB_ZGXT'ANDtablename='SB_DJJL';
需要强调一点的是,视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在。
这是因为所有的LogMiner存储都在PGA内存中,所有其他的进程是看不到它的,同时随着进程的结束,分析结果也随之消失。
最后,使用过程DBMS_LOGMNR.END_LOGMNR终止日志分析事务,此时PGA内存区域被清除,分析结果也随之不再存在。
5、查看LogMiner工具分析结果
SQL>select*fromdicttwheret.table_namelike'%LOGMNR%';-看所有与logmnr相关的视图
TABLE_NAME COMMENTS
--------------------------------------------------------------------------------------------------------------
GV$LOGMNR_CALLBACK SynonymforGV_$LOGMNR_CALLBACK
GV$LOGMNR_CONTENTS SynonymforGV_$LOGMNR_CONTENTS
GV$LOGMNR_DICTIONARY SynonymforGV_$LOGMNR_DICTIONARY
GV$LOGMNR_LOGFILE SynonymforGV_$LOGMNR_LOGFILE
GV$LOGMNR_LOGS SynonymforGV_$LOGMNR_LOGS
GV$LOGMNR_PARAMETERS SynonymforGV_$LOGMNR_PARAMETERS
GV$LOGMNR_PROCESS SynonymforGV_$LOGMNR_PROCESS
GV$LOGMNR_REGION SynonymforGV_$LOGMNR_REGION
GV$LOGMNR_SESSION SynonymforGV_$LOGMNR_SESSION
GV$LOGMNR_STATS SynonymforGV_$LOG