一、標准的建表語法 CREATE TABLE 表名 (列名 數據類型 [默認 表達式],... ); 說明: 1.在創建新表時,指定的表名必須不存在,否則會出錯 2.使用值: 當插入行時如果不給出值,dbms將自動采用默認值 dbms:數據庫管理系統 null 0 0.0 3.在使用create語句創建基本表時,最初只是一個空的框架,用戶可以使用insert命令把數據庫插入表中 數據庫表字段的數據類型 字符數據類型 CHAR:存儲固定長度的字符串 VARCHAR2 :存儲可變長度的字符串 數值數據類型 NUMBER:存儲整數和浮點數,格式為NUMBER(p, s) 列名 NUMBER 列名 NUMBER (p) {整數} number (10) zhengshu 列名 NUMBER (p, s) {浮點數} number (5,3) 11.111 日期時間數據類型 DATE:存儲日期和時間數據 TIMESTAMP:比DATE更精確 LOB數據類型 BLOB:存儲二進制對象,如圖像、音頻和視頻文件 CLOB:存儲字符格式的大型對象 --創建表 CREATE TABLE STUDENT( SNO NUMBER(6), SNAME VARCHAR2(20), SEX VARCHAR2 (2), AGE NUMBER(3), ENTERDATE DATE, CLAZZ VARCHAR2 (10) ); --EMAIL VARCHAR2(20) SELECT * FROM STUDENT; --插入數據 INSERT INTO STUDENT VALUES(1001,'羽毛','男',-10,sysdate,'01級02班'); INSERT INTO STUDENT(sno,sex,age) VALUES(1001,'男',-100); --像已有表中添加一個列() ALTER TABLE STUDENT ADD ADDRESS VARCHAR2 (20); --以下代碼要求表中沒有數據,因為如果表中存在數據,那么已存在的數據列email講使用null填充 ALTER TABLE STUDENT ADD EMAIL VARCHAR2(20) NOT NULL; --插入數據sno,sname,email INSERT INTO student(sno,sname) VALUES (110,'缺一個'); --將已有表中的列刪除 column--列 table -表 ALTER TABLE STUDENT DROP COLUMN EMAIL; --將已有表中的列進行修改,默認只對新添加的數據起作用 modify ALTER TABLE STUDENT MODIFY (SEX VARCHAR2(4) DEFAULT '男'); --對已有表中的列名重命名 ALTER TABLE STUDENT RENAME COLUMN SNAME TO STU_NAME; --給表重命名 RENAME STUDENT TO STU ; SELECT * FROM STU; DROP TABLE STUDENT; DROP TABLE STU; --小結: --insert--> 向已有表中插入數據 -->操作數據 --add -->向表中添加列 -->操作的表結構 --update -->對已有表中的數據進行修改 --modify -->修改表中的列 --delete -->刪除表中的數據 --drop -->刪除表
二、表約束
數據完整性約束
1.表的數據有一定的取值范圍和聯系,多表之間的數據有時也有一定的參照關系。
2.在創建表和修改表時,可通過定義約束條件來保證數據的完整性和一致性。
3.約束條件是一些規則,在對數據進行插入、刪除和修改時要對這些規則進行驗證,從而起到約束作用。
完整性約束分類
域完整性約束(非空not null,檢查check)字段約束
實體完整性約束(唯一unique,主鍵primary key) 行和行之間的約束
參照(引用)完整性約束(外鍵foreign key) 表和表之間的約束
主鍵約束 (primary key) PK_表名_字段名
要求主鍵類數據唯一,並且不允許為空,主鍵可以包含表的一列或多列,多列組成的主鍵稱之為-復合主鍵
唯一約束(unique) UK_表名_字段名
要求該列值唯一,允許為空,而且null可以是多個
檢查約束 (check) CK_表名_字段名
某列取值范圍顯示,格式限制等,如年齡拘束,郵件限制 email like '%@%' --length (pwd) =6
非空約束(not null) NN_表名_字段名
某列內容(值)不為空
外鍵約束(foreign key) FK_表名_字段名
用於兩個表之間建立關系,需要制定引用主表的那列,外鍵同創是用來約束兩個表之間的數據關系
定義外鍵的那張表稱之為子表,另一張表稱之為主表,在表的創建過程中,應該先創建主表,后創建子表
--主鍵,唯一,非空,檢查 CREATE TABLE STUDENT( STUNO NUMBER(4) CONSTRAINT PK_STU_STUNO PRIMARY KEY , SNAME VARCHAR2(10) CONSTRAINT NN_STU_SNAME NOT NULL, SEX VARCHAR2(3) DEFAULT '男', AGE NUMBER(3) CONSTRAINT CK_STU_AGE CHECK (AGE BETWEEN 18 AND 30), EMAIL VARCHAR2(20) CONSTRAINT CK_STU_EMAIL CHECK (EMAIL LIKE '%@%'), PSWD VARCHAR2(10) CONSTRAINT CK_STU_PSWD CHECK (LENGTH(PSWD)>=6), CLAZZ NUMBER(2) ); SELECT * FROM STUDENT; DROP TABLE STUDENT; --查看約束 SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'STUDENT'; --性別沒有限定值 ALTER TABLE STUDENT ADD CONSTRAINT CK_STU_SEX CHECK (SEX = '男' OR SEX = '女'); --郵箱沒有唯一約束 ALTER TABLE STUDENT ADD CONSTRAINT UN_STU_EMAIL UNIQUE (EMAIL); --測試數據 INSERT INTO STUDENT VALUES (1002,'BACK',DEFAULT,30,'abcd@','1111111',1); --寫約束的時候,寫上約束名,一旦執行插入數據時,能很快的定位 --添加班級的外鍵 ALTER TABLE STUDENT ADD CONSTRAINT FK_STUDENT_CLASSID FOREIGN KEY (CLAZZ) REFERENCES GRADE (GREADEID);
