3.oracle 表的管理(數(shù)據(jù)類型,表創(chuàng)建刪除,數(shù)據(jù)CRUD 操作)
oracle 的表的管理
表名和列的命名規(guī)則:
必須以字母開頭
長度不能超過30 個字符
不能使用oracle 的保留字
只能使用如下字符 A-Z,a-z,0-9,$,#等
oracle 支持的數(shù)據(jù)類型
字符類
char 定長 最大2000 個字符。
例子:char(10) ‘小林’前四個字符放‘小林’,后添6 個空格補(bǔ)全 如‘小
林 ’varchar2(20) 變長 最大4000 個字符。
例子:varchar2(10) ‘小林’ oracle 分配四個字符。這樣可以節(jié)省空間。
clob(character large object) 字符型大對象 最大4G
char 查詢的速度極快浪費(fèi)空間,查詢比較多的數(shù)據(jù)用。
varchar 節(jié)省空間
數(shù)字型
number 范圍 -10 的38 次方到 10 的38 次方
可以表示整數(shù),也可以表示小數(shù)
number(5,2)
表示一位小數(shù)有5 位有效數(shù),2 位小數(shù)
范圍:-999.99 到999.99
number(5)
表示一個5 位整數(shù)
范圍99999 到-99999
日期類型
date 包含年月日和時分秒 oracle 默認(rèn)格式 1-1 月-1999
timestamp 這是oracle9i 對date 數(shù)據(jù)類型的擴(kuò)展?梢跃_到毫秒。
圖片
blob 二進(jìn)制數(shù)據(jù) 可以存放圖片/聲音 4G 一般來講,在真實(shí)項(xiàng)目中是不會把
圖片和聲音真的往數(shù)據(jù)庫里存放,一般存放圖片、視頻的路徑,如果安全需要比
較高的話,則放入數(shù)據(jù)庫。
怎樣創(chuàng)建表
建表
--學(xué)生表
create table student ( ---表名
xh number(4), --學(xué)號
xm varchar2(20), --姓名
s ex char(2), --性別
birthday date, --出生日期
sal number(7,2) --獎學(xué)金
);
--班級表
CREATE TABLE class(
classId NUMBER(2),
cName VARCHAR2(40)
);
修改表
添加一個字段
SQL>ALTER TABLE student add (classId NUMBER(2));
修改一個字段的長度
SQL>ALTER TABLE student MODIFY (xm VARCHAR2(30));
修改字段的類型/或是名字(不能有數(shù)據(jù)) 不建議做
SQL>ALTER TABLE student modify (xm CHAR(30));
刪除一個字段 不建議做(刪了之后,順序就變了。加就沒問題,應(yīng)為是加在后
面)
SQL>ALTER TABLE student DROP COLUMN sal;
修改表的名字 很少有這種需求
SQL>RENAME student TO stu;
刪除表
SQL>DROP TABLE student;
添加數(shù)據(jù)
所有字段都插入數(shù)據(jù)
INSERT INTO student VALUES ('A001', '張三', '男', '01-5 月-05', 10);
oracle 中默認(rèn)的日期格式‘dd-mon-yy’ dd 日子(天) mon 月份 yy 2 位的
年 ‘09-6 月-99’ 1999 年6 月9 日
修改日期的默認(rèn)格式(臨時修改,數(shù)據(jù)庫重啟后仍為默認(rèn);如要修改需要修改注
冊表)
ALTER SESSION SET NLS_DATE_FORMAT ='yyyy-mm-dd';
修改后,可以用我們熟悉的格式添加日期類型:
INSERT INTO student VALUES ('A002', 'MIKE', '男', '1905-05-06', 10);
插入部分字段
INSERT INTO student(xh, xm, s ex) VALUES ('A003', 'JOHN', '女');
插入空值
INSERT INTO student(xh, xm, s ex, birthday) VALUES ('A004', 'MARTIN', '
男', null);
問題來了,如果你要查詢student 表里birthday 為null 的記錄,怎么寫sql
呢?
錯誤寫法:select * from student where birthday = null;
正確寫法:select * from student where birthday is null;
如果要查詢birthday 不為null,則應(yīng)該這樣寫:
select * from student where birthday is not null;
修改數(shù)據(jù)
修改一個字段
UPDATE student SET s ex = '女' WHERE xh = 'A001';
修改多個字段
UPDATE student SET s ex = '男', birthday = '1984-04-01' WHERE xh = 'A001';
修改含有null 值的數(shù)據(jù)
不要用 = null 而是用 is null;
SELECT * FROM student WHERE birthday IS null;
刪除數(shù)據(jù)
DELETE FROM student;
刪除所有記錄,表結(jié)構(gòu)還在,寫日志,可以恢復(fù)的,速度慢。
Delete 的數(shù)據(jù)可以恢復(fù)。
savepoint a; --創(chuàng)建保存點(diǎn)
DELETE FROM student;
rollback to a; --恢復(fù)到保存點(diǎn)
一個有經(jīng)驗(yàn)的DBA,在確保完成無誤的情況下要定期創(chuàng)建還原點(diǎn)。
DROP TABLE student; --刪除表的結(jié)構(gòu)和數(shù)據(jù);
delete from student WHERE xh = 'A001'; --刪除一條記錄;
truncate TABLE student; --刪除表中的所有記錄,表結(jié)構(gòu)還在,不寫日志,無
法找回刪除的記錄,速度快。