創建表和添加表約束


 一、標准的建表語法
   
    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); 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM