Oracle 数据库使用的端口为:1521
在Windows平台下需保证 Oracle server xe 和 Oraclelistener 服务正常运行才可以连接到数据库
MySQL数据库使用的端口为:3306
连接数据库可以使用CML模式,或者使用Navicat,一个第三方数据库管理工具,支持连接Oracle SQL,MySQL,Windows SQL Server
---------------------------------
SQL语句的分类:
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。
1. 数据查询语言DQL
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
子句组成的查询块:
SELECT <字段名表>
FROM <表或视图名>
WHERE <查询条件>
2 .数据操纵语言DML
数据操纵语言DML主要有三种形式:
1) 插入:INSERT
2) 更新:UPDATE
3) 删除:DELETE
3. 数据定义语言DDL
数据定义语言DDL用来创建数据库中的各种对象-----表、视图、
索引、同义词、聚簇等如:
CREATE TABLE/VIEW/INDEX/SYN/CLUSTER
表/视图/索引/同义词/簇
DDL操作是隐性提交的!不能rollback
4. 数据控制语言DCL
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
1.GRANT:授权。
2. ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
回滚---ROLLBACK
回滚命令使数据库状态回到上次最后提交的状态。其格式为:
SQL>ROLLBACK;
3.COMMIT [WORK]:提交。
在数据库的插入、删除和修改操作时,只有当事务在提交到数据
库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看
到所做的事情,别人只有在最后提交完成后才可以看到。
提交数据有三种类型:显式提交、隐式提交及自动提交。
下面分别说明这三种类型。
(1) 显式提交
用COMMIT命令直接完成的提交为显式提交。其格式为:
SQL>COMMIT;
(2) 隐式提交
用SQL命令间接完成的提交为隐式提交。这些命令是:
ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
(3) 自动提交
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
系统将自动进行提交,这就是自动提交。其格式为:
SQL>SET AUTOCOMMIT ON;
---------------------------------
Oracle常见的数据类型:
Varchar2(N):长度可变,最小1个字符,最大4000字符
Char(N):长度固定,最小1个字符,最大2000字符
Number(N, M):数值类型,N的长度为1-38字符之间,M不超过N
DATE:日期类型
Long:字符串类型,最大可以存储2G可变长度字符类型(不常用)
Long raw:字符串类型,最大可以存储2G可变长度的二进制字符 (不常用 )
CLOB: 最大可以存储4G可变长度字符类型
BLOB:最大可以存储4G可变长度二进制字符
---------------------------------
Oracle对象命名规则
1:必须以字母开头,不能使用数字开头,长度在1-30位字符间
2:对象名可以出现的字符为字母(大小写都可),数字,下划线 _ $ #
3:同一个Oracle服务器用户所拥有的对象名不可以重复
4:名字不能是Oracle保留字(关键字)
5:名字中字母大小写不敏感
---------------------------------
建立数据库要遵循的三个范式
1NF:表中列不可分割
2NF:表中每行数据不可重复
3NF:当两张表有主外键关系,其中一张表不能出现另一张表的非主键列
---------------------------------
数据库事务ACID基本概念(原子性、一致性、隔离性、持久性)
1.原子性(Atomicity):事务要么成功(可见),要么失败(不可见)。不存在事务部分成功的情况。
2.一致性(Consistency):数据库在事务开始前和结束后都应该是一致的。
3.隔离性(Isolation):一个事务不会看到另外一个还未完成的事务产生的结果。每个事务就像在单独、隔离的环境下运行一样。
4.持久性(Durability):成功提交的事务,数据是持久保留,不会因为系统失败而丢失。
---------------------------------
建立一个简单的Stuent表
CREATE TABLE student --CREATE TABLE 创建表格 ( stuNo VARCHAR2(10) --学号字符串类型 ,stuName VARCHAR2(30) --学员姓名,字符串类型 ,stuAge NUMBER(3) --学员年龄,整数类型,3位长度 ,stuScore NUMBER(3, 1) --学员成绩,浮点类型 ); /*为student表添加数据*/ INSERT INTO student --插入数据到表中 VALUES('TX1001', 'TOM', 20, 99.5); /* 查询student表中数据*/ SELECT stuNo, StuName, StuAge FROM student; SELECT * FROM student; /*删除student表*/ DROP TABLE student;
SQL关键字
AS:用于为字段取别名
DISTINCT:去除重复记录,用于查询语句
/*查询员工从事工作类型*/ SELECT DISTINCT empDep As 部门 FROM emp; /* 去除重复记录 */ SELECT DISTINCT eAge FROM employee;
数据库数据约束
Not null :数据非空
Unique:唯一约束
Primary key:主键约束(非空+唯一,一个表格只能最多有一个主键约束)
Foreign key:外键约束(通过此约束为两表建立关系)
Check:检查约束 例:CHECK(tAge >10 AND tAge <30)
Oracle比较运算符:
=等于,>大于, <小于, >=大于等于,<=小于等于 <>不等于 Oracle其他关键字及运算符 AND OR NOT BETWEEN ......AND /* WHERE tAge BETWEEN '10' AND '30';数字类型 */ IN, NOT IN IS NULL, (IS NOT NULL)
示例:
/*查询参加工作时间在1997-7-9之后,不从事IT_PROG工作的员工信息*/ SELECT * FROM emp WHERE hireDate > '09-9月-1997' AND empDep NOT IN('IT_PROG'); 或者 SELECT * FROM emp WHERE hireDate > '09-9月-1997' AND empDep NOT IN('IT_PROG');
数据库中的模糊查询
LIKE(模糊查询需要加 % ), NOT LIKE
小% --表示‘小‘开头的模糊匹配
%明 --表示’明‘结尾的模糊匹配
%小明% --表示字符内包含’小明‘即匹配
特殊字符:%(任意多个字符) _(代表一个字符)
排序查询:
ORDER BY…ASC(升序)默认情况,此关键字可不写
DESC(降序)排序 ORDER BY tAge DESC;
ORDER BY 后面可出现字段。表达式和别名 ORDER BY tAge;
SELECT * FROM emp ORDER BY empId DESC; --DESC降序排序
ALTER关键字,对表进行修改
ALTER TABLE emp ADD(列 字符格式); (address VARCHAR(100)); --表示添加字段 ALTER TABLE emp MODIFY(列 字符格式); (address VARCHAR(50)); --修改字段 ALTER TABLE emp DROP CLOUMN address; --删除字段
RENAME 关键字
RENAME emp TO employee; --把emp表修改为employee
TRUNCATE 关键字 删除表内数据
TRUNCATE TABLE employee --删除表内所有数据
CONSTRAINT 约束关键字
用于建立约束
ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 增加的约束类型 (列名)
/*主外键关系一对多*/ CREATE TABLE student ( stuId VARCHAR2(10) PRIMARY KEY ----行级约束 ,Name VARCHAR2(30) NOT NULL ,age VARCHAR2(3) NOT NULL ,address VARCHAR2(100) ,subId VARCHAR2(10) NOT NULL /*创建外键将本表subId字段的取值引用(主表)至subject表的subId列*/ ,CONSTRAINT fk_student_subId FOREIGN KEY(subid) REFERENCE subject(subId) --表级约束 ); ------------------------- /*主外键关系多对多*/ CREATE TABLE student ( stuId VARCHAR2(10) PRIMARY KEY ----行级约束 ,Name VARCHAR2(30) NOT NULL ,age VARCHAR2(3) NOT NULL ,address VARCHAR2(100) /*创建外键将本表subId字段的取值引用(主表)至subject表的subId列*/ ,CONSTRAINT fk_student_subId FOREIGN KEY(subid) REFERENCE subject(subId) --表级约束 ); CREATE TABLE subject ( subId VARCHAR2(10) PRIMARY KEY ,name VARCHAR2(30) NOT NULL ,description VARCHAR2(100) NOT NULL ,CONSTRAINT fk_relation_subId FOREIGN KEY(stuid) REFERENCE student(stuId) ,CONSTRAINT fk_relation_subId FOREIGN KEY(subid) REFERENCE subject(subId) ); CREATE TABLE relation ( rId VARCHAR2(10) PRIMARY KEY ,stuId VARCHAR2(10) NOT NULL ,subId VARCHAR2(10) NOT NULL ); ------------------------ CREATE TABLE student --CREATE TABLE 创建表格 ( stuNo VARCHAR2(10) --学号字符串类型 ,stuName VARCHAR2(30) --学员姓名,字符串类型 ,stuAge NUMBER(3) --学员年龄,整数类型,3位长度 ,stuScore NUMBER(3, 1) --学员成绩,浮点类型 ); /*为student表添加数据*/ INSERT INTO student --插入数据到表中 VALUES('TX1001', 'TOM', 20, 99.5); INSERT INTO student VALUES('TX1002', 'aa', 20, 99); INSERT INTO student VALUES('TX1003', 'bb', 20, 98); /* 查询student表中数据*/ SELECT stuNo AS 学生编号, StuName AS 学生姓名, StuAge AS 学生年龄, stuScore / 10 AS 成绩 FROM student WHERE stuNo = 'TX1001'; -------修改-------------- UPDATE student SET stuScore = 8 WHERE stuNo = 'TX1001'; -------删除数据---------- DELETE FROM student WHERE stuNo = 'TX1003'; /*查询全表数据*/ SELECT * FROM student; /*删除student表*/ DROP TABLE student; /* 创建员工表 */9000 CREATE TABLE employee ( eId VARCHAR2(10) ,eName VARCHAR2(30) ,eAge NUMBER(2) ,eSalary NUMBER(7, 2) ); /* 为员工表添加数据 */ INSERT INTO employee VALUES('EMP1001', 'Tom', 25, 5000.00); INSERT INTO employee VALUES('EMP1002', 'Jim', 25, 6000.00); INSERT INTO employee VALUES('EMP1003', 'Rose', 30, 8000.00); /* 全表查询 */ SELECT * FROM employee; /* 查询列为表达式,并为列取别名 */ SELECT eName AS 姓名, eAge 年龄, eSalary * 12 年薪 FROM employee WHERE eId = 'EMP1001'; /* 去除重复记录 */ SELECT DISTINCT eAge FROM employee; /* 修改数据 */ UPDATE employee SET eSalary = 9000.00, eAge = 28 WHERE eId = 'EMP1003'; /* 删除记录 */ DELETE FROM employee WHERE eId = 'EMP1003'; /* 创建表,使用约束 */ CREATE TABLE teacher ( tId VARCHAR2(10) PRIMARY KEY ,tName VARCHAR2(30) UNIQUE NOT NULL ,tAge NUMBER(2) CHECK(tAge >= 22 AND tAge <= 65) NOT NULL -- CHECK(tAge BETEEN 22 AND 65) - tAge <> 30 ); INSERT INTO teacher VALUES('TEA1001', 'Tom', 25); INSERT INTO teacher VALUES('TEA1002', 'Tim', 20); /* IN关键字 */ SELECT eId, eName, eSalary FROM employee WHERE deptId NOT IN('DEPT1001', 'DEPT1002'); CREATE TABLE emp ( eId VARCHAR2(10) PRIMARY KEY ,eName VARCHAR2(30) NOT NULL ,eMail VARCHAR2(30) ); INSERT INTO emp VALUES('emp1001', 'Tom', 'tom@126.com'); INSERT INTO emp(eId, eName) VALUES('emp1002', 'Tim'); /*查询emp表中eMail非空的列*/ SELECT * FROM emp WHERE eMail IS NOT NULL; CREATE TABLE stu ( sId VARCHAR2(10) PRIMARY KEY ,sName VARCHAR2(30) NOT NULL ,sAddress VARCHAR2(30) NOT NULL ); INSERT INTO stu VALUES('stu1001', 'Tom', '天津市河西区'); INSERT INTO stu VALUES('stu1002', 'Tim', '北京市丰台区'); /* 模糊查询 */ SELECT * FROM stu WHERE sAddress NOT LIKE '%天津%'; DROP TABLE stu; CREATE TABLE stu ( sId VARCHAR2(10) PRIMARY KEY ,sName VARCHAR2(30) NOT NULL ,sScore NUMBER(3) NOT NULL ); INSERT INTO stu VALUES('stu1001', 'Tom', 95); INSERT INTO stu VALUES('stu1002', 'Tim', 98); INSERT INTO stu VALUES('stu1003', 'Jim', 58); SELECT * FROM stu ORDER BY sScore ASC; SELECT * FROM stu ORDER BY sScore DESC; SELECT sName, sScore + 5 AS Score FROM stu ORDER BY Score DESC; DROP TABLE student; /* 主外键关系,一对多 */ CREATE TABLE student ( stuId VARCHAR2(10) PRIMARY KEY ,name VARCHAR2(30) NOT NULL ,age NUMBER(3) NOT NULL ,address VARCHAR2(100) ,subId VARCHAR2(10) NOT NULL --创建外键,本表subId字段的取值应取自subject表subId列的值 ,CONSTRAINT fk_student_subId FOREIGN KEY(subId) REFERENCES subject(subId) ); CREATE TABLE subject ( subId VARCHAR2(10) PRIMARY KEY ,name VARCHAR2(30) NOT NULL ,description VARCHAR2(100) NOT NULL ); INSERT INTO subject VALUES('1001', 'JAVA', 'DESC'); INSERT INTO subject VALUES('1002', 'ANDROID', 'DESC'); INSERT INTO subject VALUES('1003', 'PHP', 'DESC'); INSERT INTO student VALUES('101', 'Tom', 18, 'Tianjin', '1001'); INSERT INTO student VALUES('102', 'Tim', 19, 'Beijing', '1002'); SELECT * FROM student; DROP TABLE subject; /* 主外键关系,多对多 */ CREATE TABLE student ( stuId VARCHAR2(10) PRIMARY KEY ,name VARCHAR2(30) NOT NULL ,age NUMBER(3) NOT NULL ,address VARCHAR2(100) ); CREATE TABLE subject ( subId VARCHAR2(10) PRIMARY KEY ,name VARCHAR2(30) NOT NULL ,description VARCHAR2(100) NOT NULL ); CREATE TABLE relation ( rId VARCHAR2(10) PRIMARY KEY ,stuId VARCHAR2(10) NOT NULL ,subId VARCHAR2(10) NOT NULL ,CONSTRAINT fk_relation_stuId FOREIGN KEY(stuId) REFERENCES student(stuId) ,CONSTRAINT fk_relation_subId FOREIGN KEY(subId) REFERENCES subject(subId) );