一.Oracle的支持數據類型 1.字元串類型 char 固定長度(定義時即已確定長度,空餘位置被補全),最大長度255,如 name char(10),'中'會占用10個長度; varchar2 長度不固定,根據實際情況占用,空餘被放棄,最大長度3999,如 name varchar2(10),'... ...
一.Oracle的支持數據類型
1.字元串類型
char 固定長度(定義時即已確定長度,空餘位置被補全),最大長度255,如 name char(10),'中'會占用10個長度;
varchar2 長度不固定,根據實際情況占用,空餘被放棄,最大長度3999,如 name varchar2(10),'中'會占用2個長度;
2.數值類型
number(3) 最大數據999
number(3,2) 最大數據9.99
3.大數值類型
long:最大長度2G,相當於mysql中的longtext;
clob:最大長度4G;
blob:最大長度4G
4.日期類型
data:相當於mysql中的datatime,格式為yyyy-mm-dd hh:mi:ss;
timestamp:時間戳,精度高,精確到小數點後9位;
二.DDL和DML
--查看當前用戶的許可權
SELECT * FROM session_privs;
--創建表空間和數據文件
CREATE TABLESPACE qin_space DATAFILE 'c:\\qin.dbf' SIZE 5M AUTOEXTEND ON NEXT 1M;
--創建用戶
CREATE USER qin IDENTIFIED BY qin DEFAULT TABLESPACE qin_space;
--賦予許可權 3個角色 dba resource connect
GRANT DBA TO qin;
--創建表 t_student
CREATE TABLE t_student(
tid NUMBER(8),
tname VARCHAR2(30) NOT NULL,
telephone VARCHAR2(11),
gender CHAR(1),
birthday DATE,
CONSTRAINT pk_tid PRIMARY KEY(tid), --主鍵約束
CONSTRAINT unique_column UNIQUE(telephone), --唯一約束
CONSTRAINT check_column CHECK(gender IN(0,1)) --檢查約束
)
--插入數據
INSERT INTO t_student VALUES(1,'小潘','110000011','0',to_date('2017-09-16','yyyy-mm-dd'));
SELECT * FROM t_student;
--創建orders表
CREATE TABLE orders(
o_id NUMBER(8) PRIMARY KEY,
o_totalprice NUMBER(8,2)
)
--插入數據
INSERT INTO orders VALUES(1,1000);
INSERT INTO orders VALUES(2,2000);
SELECT * FROM orders;
--創建表orderdetail,設置與orders表的外鍵關聯
CREATE TABLE orderdetail(
od_id NUMBER PRIMARY KEY,
od_name VARCHAR2(30),
o_id NUMBER(8),
CONSTRAINT fk_o_id FOREIGN KEY(o_id) REFERENCES orders(o_id)
);
--插入數據
INSERT INTO orderdetail VALUES(1,'mouse',1);
INSERT INTO orderdetail VALUES (2,'keyboard',2);
SELECT * FROM orderdetail
--快速建表
CREATE TABLE myemp AS SELECT * FROM SCOTT.emp;
CREATE TABLE mydept AS SELECT * FROM SCOTT.dept;
--update 需求:給NEW YORK地區的部門員工加薪100元
--查詢NEW YORK地區的部門員工
SELECT * FROM myemp WHERE deptno IN (SELECT deptno FROM mydept WHERE loc = 'NEW YORK');
UPDATE myemp SET sal = sal+100 WHERE deptno IN (SELECT deptno FROM mydept WHERE loc = 'NEW YORK');
--修改表結構
--t_student表加一列address
ALTER TABLE t_student ADD( address VARCHAR2(30));
--修改address欄位的長度為200
ALTER TABLE t_student modify(address varchar2(200));
--刪除address列
ALTER TABLE t_student DROP COLUMN address;
三.delete和truncate區別
delete只是刪除了數據,truncate是摧毀了表然後重建
delete語句會產生磁碟碎片,而truncate不會
delete刪除的數據可以找回的
四.Oracle的其它對象
1.視圖:
視圖是一個虛表,可以用來封裝複雜的sql語句和隱藏敏感列;視圖是原數據表的引用,操作視圖會改變原表;
語法:create view 視圖名稱 as sql查詢語句
只讀視圖: with read only
create view view_emp as select ename, empno, job, mgr from myemp with read only;
2.序列:
獨立於表之外的一個對象,主要用於主鍵自增
語法:
create sequence seq_test;
select seq_test.nextval from dual;
select seq_test.currval from dual;
序列的完整語法:
create sequence seq_sequence
increment by 2 --遞增值 預設1
start with 3 --起始值 預設1
maxvalue 15 --最大值 預設 19個9
minvalue 2 --最小值 預設1
cycle --迴圈 預設 nocycle
cache 5 --緩存的數量 預設緩存20
3.索引
創建索引可以提高查詢效率
語法格式:create index 索引名字 on 表名(列名)
當數據量較小或數據經常被修改時,不建議創建索引.
4.同義詞(synonym)
優點:可以縮短訪問對象的名稱;
語法:create [public] synonym 名稱 for 對象;
舉例:
create synonym e for scott.emp;
select * from e;
五.數據導入導出(dos視窗下,不需要連接到oracl)
1. 導出Scott用戶下的所有對象
exp 用戶名/密碼@IP:1521/orcl file='位置\\想要保存的文件名稱.dmp' owner=用戶名
2. 導入到用戶qin中
imp 用戶名/密碼@IP:1521/orcl file='位置\\已有的想要導入的文件名稱.dmp' full=y