Java 7---Oracle数据库简介

导读

1.Oracle初识
2.Oracle安装连接
3.表的创建DDL
4.DML:数据的添加 INSERT

Oracle初识

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Oracle安装连接

下载 官网->database

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

查看当前用户下的所有表的名字:SELECT table_name FROM user_tables;
查看某个表结构:desc 表名

调整结果集的列宽:仅针对于本次会话生效
	数值型:col 名字 format 999999;(最多显示6位,不够用空格,多了用#号)
	文本型:col 名字 format a10;	(日期可以归为文本型)

设置日期的语言:仅针对于本次会话生效
	查询当前日期:SELECT sysdate FROM dual;  默认是中文的
	修改为英文语言:
		ALTER SESSION SET nls_date_language=english;
		
	date常量默认形式:
		中文下:'01-8月 -17'  中文下只认识这个格式
		英文下:'01-AUG-17'   英文下只认识这个格式

清屏:clear scre

表的创建DDL

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
基本语法:
CREATE TABLE 表名(
列名 类型 [默认值] [约束],
列名 类型 [默认值] [约束],

列名 类型 [默认值] [约束]
);

相关知识点:
	(表名,列名)命名规则:
		1)以字母开头
		2)组成:字母,数字,下划线_,$,#
		3)长度:不能超过30个字符
		4)不能使用数据库关键字
		5)同一个用户下不能出现同名的对象(表,视图,索引,序列等等)
		

数据类型:
	文本型:重点
		VARCHAR2:变长的文本型
			username VARCHAR2(100):最多可以存储100个字节
								   具体开辟的长度由实际内容决定
				通常一个字母占一个字节,汉字可能占多个,跟编码有关系
													
		CHAR:定长的文本型
			username CHAR(100):无论如何都会开辟100个字节空间
			                        没占满的位置用空格填充
	数值型:重点
		NUMBER:整型,浮点型都可以表示
			age NUMBER(3):表示最多可以存储3位的整数
			weight NUMBER(4,2):表示有2位小数,有效位4位
					
	日期型
		DATE
	存储大数据量的类型:(了解)
		BLOB:存储大量的二进制数据,可以高达2GB,存储图片等
		CLOB:存储大量的字符,可以高达2GB,存储小说等
		
		完全可以选择把图片存储到硬盘,把对应的路径存储到数据库,这样比较省内存

		
约束:CONSTRAINT,constraint
	NOT NULL:非空约束
		值不能没有,不能为空
	CHECK:检查约束
		设定值只能取一个范围
	UNIQUE:唯一约束
		列的值不能重复,可以有多个空   空,NULL:没有值
	PRIMARY KEY:主键约束
		约束力:相当于非空+唯一,可以起到唯一标识记录
		多个行之间因为有了主键,不会出现完全一样值的行
		一个表最多只能有一个主键
		通常会给每一个表加一个id之类的主键列,没有任何业务意义
		保证能够区分每一行,又不会修改这个列,就类似与流水号一样
	FOREIGN KEY:外键约束,
		某个表的某个列引用了某个表的某个列系统知道了,  grade.stu_id 引用了student.id
      	值只能取student.id中存在的值或者是空
  
		注意:被引用的列只能是主键列或唯一约束列,不然无法知道引用哪个。如果B表引用了A表,想要删除A,先删除B


创建表:
	需求,在刚刚创建的用户下创建一个表,用来存储学生的基本信息
	    有哪些列?id,name,sex,age,sno,
版本1:	
	CREATE TABLE student(
		id NUMBER(9) PRIMARY KEY,
		name VARCHAR2(100) NOT NULL,
		sex NUMBER(1) DEFAULT 0 CHECK(sex=0 OR sex=1),
		age NUMBER(3),
		sno NUMBER(9) UNIQUE NOT NULL
	);
	默认值:是指如果添加一行数据值对应的列不给值就取默认值
		default 值


约束建议起合适的名字,而不要使用默认名字,这样出现问题时易发现
	CONSTRAINT 约束名 约束类型
	
	命名建议:表名_列名_约束简写
	主键:pk
	外键:fk
	非空:nn或nk
	唯一:uk
	检查:ck

版本2:
	CREATE TABLE student(
		id NUMBER(9) 
			CONSTRAINT student_id_pk PRIMARY KEY,
		name VARCHAR2(100) 
			CONSTRAINT student_name_nn NOT NULL,
		sex NUMBER(1) DEFAULT 0 
			CONSTRAINT student_sex_ck CHECK(sex=0 OR sex=1),
		age NUMBER(3),
		sno NUMBER(9) 
			CONSTRAINT student_sno_uk UNIQUE 
			CONSTRAINT student_sno_nn NOT NULL
	);
	
	删除表:DROP TABLE 表名;
约束的分类:
	列级别约束:
		约束直接跟在列的后面,一个约束只能修饰一个列
	表级别约束:
		约束单独写一行,一个约束可以修饰多个列,
		联合主键,联合唯一约束,一个约束修饰多个列
	注意:
		非空以外的所有约束既可以作为表级别约束,又可以作为列级别约束
		非空约束只能作为列级别约束
	
		
版本3: 把可以调整为表级别约束的进行调整
	CREATE TABLE student(
		id NUMBER(9),			
		name VARCHAR2(100) 
			CONSTRAINT student_name_nn NOT NULL,
		sex NUMBER(1) DEFAULT 0,		
		age NUMBER(3),
		sno NUMBER(9) 
			CONSTRAINT student_sno_nn NOT NULL,		
	    CONSTRAINT student_id_pk PRIMARY KEY(id),
		CONSTRAINT student_sex_ck CHECK(sex=0 OR sex=1),
		CONSTRAINT student_sno_uk UNIQUE(sno)
	);
外键的运用(接上边student表)
创建一个科目表,包含字段:id,name
		CREATE TABLE subject(
			id NUMBER(7),
			name VARCHAR2(100),
			CONSTRAINT subject_id_pk PRIMARY KEY(id)
		);
		
创建一个成绩表,体现是谁考了哪个科目,分数是多少,该如何设计???
grade:  要重复度(冗余)最小就可以存储完整的信息

加上外键约束之后:				 
CREATE TABLE grade(
	id NUMBER(11),
	stu_id NUMBER(9) 
		CONSTRAINT grade_stu_id_fk REFERENCES student(id),
	sub_id NUMBER(7),
	score NUMBER(3),
	CONSTRAINT grade_id_pk PRIMARY KEY(id),
	CONSTRAINT grade_sub_id_fk FOREIGN KEY(sub_id) REFERENCES subject(id)
);	

利用子查询创建表:
	CREATE TABLE 表名
	AS 子查询;
	
	注意:只有非空约束会包含,其它约束丢失
	
CREATE TABLE s_emp45
AS SELECT id,first_name,dept_id,salary
FROM s_emp
WHERE dept_id=45;	
	
CREATE TABLE s_emp1
AS SELECT * FROM s_emp;

表的修改:

增加列:
ALTER TABLE 表名
ADD (
	column 类型 默认值 非空约束,
	...
);
	只能加非空约束,其他约束需要单独增加

修改列:
ALTER TABLE 表名
MODIFY (
	column 类型 默认值 非空约束,
	...
);	

列宽,默认值,非空约束之类的修改
注意:只要不和原来数据冲突的修改都可以
	
删除列:
ALTER TABLE 表名
DROP column 列名;

增加约束:掌握
ALTER TABLE 表名
ADD CONSTRAINT 约束名 约束类型(修饰的列);

注意:添加表级别约束,所以不能单独添加非空约束

在创建表时,先不加外键约束,这样表的创建没有顺序要求
所有表创建完后,在单独添加外键约束

删除约束:
ALTER TABLE 表名
DROP CONSTRAINT 约束名 [CASCADE];

cascade:级联删除约束,针对于外键,删除一个连同引用过它做外键的其他表的这一列也删除

约束失效:
ALTER TABLE 表名
DISABLE CONSTRAINT 约束名 [CASCADE];

约束生效:
ALTER TABLE 表名
ENABLE CONSTRAINT 约束名;

删除表:
DROP TABLE 表名 [CASCADE CONSTRAINTS];

重命名对象:
RNAME oldname TO newname;

清空表:DDL是不能回滚的
TRUNCATE TABLE 表名;

TRUNCATE vs DELETE:
	TRUNCATE不可回滚,       DELETE可以回滚
	TRUNCATE立刻释放表空间, DELETE不会,commit时释放
	TRUNCATE比较快          DELETE在大数据量时没有TRUNCATE快
	TRUNCATE只能删除表      DELETE语法中还可以使用视图等


DML:数据的添加 INSERT

	数据是一行一行的添加	
	一行代表一个记录
	
语法:
	1)INSERT INTO 表名 (列名1,列名2,...,列名n)
	  VALUES (值1,值2,...,值n);
	  
	  eg:添加一个学生到学生表
		 id:1  name:tom  age:19   sex:0   sno:100
		INSERT INTO student (id,name,age,sex,sno)
		VALUES (1,'tom',19,0,100);
		
		注意:数值型常量,直接写
		     字符串常量(文本常量)  ,用一对单引号括起来
			 对于DML操作后,需要确认提交--COMMIT;
			 值是区分大小写的,
			 各种取的名字,关键字,不区分大小写
			 
		查询一个表的全部数据:SELECT * FROM 表名;

	2)如果所有的列我都要给值,可以把列名省略
		INSERT INTO 表名 VALUES(值1,值2,...,值n);
		每个值和表定义时列的顺序一一对应,每个值必须都给出来
		
		添加学生信息为: id:2  name:lily  age:18  sno:101 sex:1
		INSERT INTO student VALUES(2,'lily',1,18,101);
		
	pk:第一种更好,可读性高,更灵活
		
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值