1. 程式人生 > >Java 7---Oracle資料庫簡介

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)
);	

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:第一種更好,可讀性高,更靈活