Oracle創建表、修改表、刪除表、約束條件語法

来源:https://www.cnblogs.com/moyijian/archive/2018/11/04/9883337.html
-Advertisement-
Play Games

一、 使用create關鍵字創建表 --(1)創建新表use 資料庫(在那個資料庫中建表)create table 表名(欄位名1(列名) 數據類型 列的特征,欄位名2(列名) 數據類型 列的特征(NOT NULL),......)--(2)創建帶有主鍵約束的表語法create table 表名(字 ...


一、 使用create關鍵字創建表

--(1)創建新表
use 資料庫(在那個資料庫中建表)
create table 表名
(
欄位名1(列名) 數據類型 列的特征,
欄位名2(列名) 數據類型 列的特征(NOT NULL),
......
)

--(2)創建帶有主鍵約束的表語法
create table 表名
(
欄位名1(列名) 數據類型 列的特征,
欄位名2 數據類型 列的特征(NOT NULL),
......
primary key(主鍵列欄位)

)   --(3)利用現有的表創建表 -- 註意:僅複製Oracle數據表結構:採用的是子查詢方式
create table 新表
as
select * from 舊的表 where 1=2

--(4)利用現有的表的結構創建新表 -- 註意:僅複製Oracle數據表結構:採用的是子查詢方式
create table 新表
select 欄位1,欄位2... from 舊的表 where 條件(舊的表欄位滿足的條件)

--(5)利用現有的表的結構創建新表 -- 註意:複製Oracle數據表數據
create table 新表
as
select * from 舊的表 where 1=1

--(6)利用現有的表的結構創建新表  -- 註意:複製Oracle數據表數據
create table 新表
as
select 欄位1,欄位2... from 舊的表 where 條件(舊的表欄位滿足的條件)

--(7)將查詢結果插入另一張表
insert into 另一張表
    select * from 要查詢的表 where 條件(要查詢的表的列符合什麼條件)

 

二、修改表

alter table 表名 add constraint 主鍵名 primary key(欄位1,欄位2,……);    //更改主鍵約束

alter table 表名 drop primary key;                     //刪除表主

alter table  表名 add constraint  唯一約束名 unique(欄位1,欄位2……);  // 增加唯一約束

alter table 表名  add constraint CK_INFOS_GENDER check(gender=’男’ or gender=’女’)    //更改條件約束

alter table 表名  add constraint CK_INFOS_AGE(age>=0 and age<=50)

alter table 表名 modify 欄位名  欄位類型  default 預設值;   //更改欄位類型

alter table 表名 add 欄位名 欄位類型;        //增加欄位類型

alter table 表名 drop column 欄位名;        //刪除欄位名

alter table 表名 rename column 列名 to 列名   //修改欄位名

rename 表名 to 表名              //修改表名

   

三、刪除表

truncate table 表名   //刪除表中的所有數據,速度比delete快很多,截斷表

delete from table 條件   // 刪除表中的數據

drop table 表名        //刪除表

 

四、Oracle中約束條件

每個標題都預設表先drop table後create table

1.not null 非空約束

create table person( pid number, name varchar2(20) not null);

insert into person(pid,name) values(1,'zhangsan');

--成功插入

nsert into person(pid,name) values(1,'');

--錯誤的數據,name為null的數據會收到約束限制,無法插入。

2.primary key 主鍵約束

create table person( pid number primary key, name varchar2(20));

insert into person(pid,name) values(1,'zhangsan');

--成功插入

insert into person(pid,name) values(1,'lisi');

--主鍵重覆了,插入失敗

3.unique 唯一約束,值不能重覆(空值除外)
電話不重覆

create table person( pid number primary key, name varchar2(20), tel varchar2(20) unique);

insert into person(pid,name,tel) values(1,'zhangsan','1234567890');

--成功插入

insert into person(pid,name,tel) values(2,'lisi','1234567890');

--電話重覆,操作失敗

4.check 條件約束,插入的數據必須滿足某些條件
例如限制年齡的輸入

create table person( pid number primary key, name varchar2(20), tel varchar2(20) not null unique, age number check(age between 0 and 150));

insert into person(pid,name,tel) values(1,'zhangsan','1234567890',30);

--成功插入

insert into person(pid,name,tel) values(2,'lisi','1111111',160);

--年齡輸入錯誤

5.foreign key 外鍵
例如:有以下一種情況:一個人有很多本書

create table book(bid number primary key not null,name varchar2(30),pid number);

如果使用了以上的表直接創建,則插入下麵的記錄有效:

insert into book(bid,name,pid) values(1001,'oracle',15);

以上的代碼沒有任何錯誤但是沒有意思,因為一本書應該只屬於一個人,所以在此處的pid應該對應person表中的記錄。
此時就需要外鍵,修改book表結構

create table book( bid number primary key not null, name varchar2(30),  pid number references person(pid)) on delete cascade

--on delete cascade級聯刪除 

--建立約束:book_pid_fk,與person表中pid為主-外鍵關係

 --constraint book_pid_fk foreign key(pid) references person(pid));

insert into book(bid,name,pid) values(1001,'oracle',15);

6.級聯刪除
接上面5的案例,如果一個人的人員信息沒有了,那麼此人所擁有的書還應該存在麽?
正常來說,如果person中的一條信息沒有了,則對應的book中的數據也應該同時消失。
在之前的結構上執行delete語句,刪除person表中一條記錄:

delete from person where pid=12;

提示刪除失敗:因為book中存在此項的關聯,如果person表中的一條數據刪除了,則一定會影響到book表中數據的完成性,
所以不讓刪除。
如果非要刪除,則應該刪除book表中的對應數據,之後再刪除person表中對應的數據。
此時如果想完成刪除person表的數據同時刪除book表中的數據,則必須使用級聯刪除。
在建立外建的時候必須指定級聯刪除(on delete cascade)

create table book( bid number primary key not null, name varchar2(50),  pid number CONSTRAINT book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) on delete cascade);

為新表添加約束條件

--person

create table person( pid number, name varchar2(30), tel varchar2(50), age number);

--book

create table book( bid number, name varchar2(30), pid number);

以上兩張表中沒有任何約束,下麵通過alter命令為表添加約束
1.為兩個表添加主鍵
person表pid為主鍵

alter table person add constraint person_pid_pk primary key(pid);

book表bid為主鍵

alter table book add constraint book_bid_pk primary key(bid);

2.為person表中的tel添加唯一約束

alter table person add constraint person_tel_uk unique(tel);

3.為person表中的age添加檢查約束

alter table person add constraint person_age_ck check(age between 0 and 150);

4.為book表中的pid添加與person的主--外鍵約束,要求帶級聯刪除

alter table book add constraint person_book_pid_fk foreign key(pid) references person(pid) on delete cascade;
7.刪除約束
alter table person drop constraint unique(tel);

alter table book drop constraint person_book_pid_fk;

8.啟用約束

alter table book enable constraint person_book_pid_fk;

9.禁用約束

alter table book disable constraint person_book_pid_fk;

 

練習作業:
1.創建一張表student
id number
name varchar2(20)
age number(5)
tel varchar2(15)
給id欄位添加主鍵約束
給name欄位添加非空約束
給age欄位添加check約束(18-35)
給tel添加唯一非空約束

create table student( id number primary key, name varchar2(20) not null, age number(5) check(age between 18 and 35), tel varchar2(15) unique not null);2.創建一張學員興趣表hobby
id number(10)
hobby_name varchar2(20)
sid number --學生id
給sid欄位添加外鍵約束,並且要帶級聯刪除create table hobby( id number(10), hobby_name varchar2(20), sid number references student(id) on delete cascade);3.刪除掉student表中tel欄位的唯一約束(先寫出查看該表約束的sql)select constraint_name,constraint_type from all_constraints where user_table=upper('student');alter table student drop constraint unique(tel);4.手動添加student表中tel欄位的唯一約束(約束名為:my_constraint_1)alter table student add constraint my_constraint_1 unique(tel);5.禁用約束my_constraint_1alter table student disable constraint my_constraint_1;6.啟用約束 my_constraint_1alter table student enable constraint my_constraint_1;
-


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SUSE Linux Enterprise 11 SP4 字元界面系統安裝 ...
  • task_struct進程描述符中包含兩個跟進程地址空間相關的欄位mm, active_mm, 大多數電腦上系統的全部虛擬地址空間分為兩個部分: 供用戶態程式訪問的虛擬地址空間和供內核訪問的內核空間。每當內核執行上下文切換時, 虛擬地址空間的用戶層部分都會切換, 以便當前運行的進程匹配, 而內核空 ...
  • DNS客戶端配置文件:etc/resolv.conf /etc/resolv.conf文件相當於windows如下圖: 當然/etc/resolv.conf文件為輔助配置DNS文件,其實在網卡裡也可以配置DNS的 /etc/sysconfig/network-scripts/ifcfg-eth0 註 ...
  • linux中創建目錄當然使用命令工具mkdir == (make directory),聯想記憶法能讓你記得牢固。 如果你要創建幾個目錄,例如:dir1目錄,dir2目錄,dir3目錄可以這樣 怎麼樣?很不錯吧!再見~~~ ...
  • 2018-11-05 00:06:15開始寫 要配置2個MySQL環境變數 1.MYSQL_HOME: 2.PATH: 謝謝、Thank you、Salamat Do(撒拉瑪特朵)、あリがCám o*n(嘉蒙)とゥ(阿裡嘎都)、감사합 니다 (勘三哈咪瘩)、terima Kasih(得力馬卡系)、k ...
  • 一、關於安裝 SQL Server 資料庫的安裝,經過自己的安裝,總體還是比較容易,沒有太多難度,安裝包在網上也有很多,在此,就跳過安裝的這一步。 二、初次啟動SQL Server 安裝完成資料庫後,如果不啟動SQL Server的服務,是登錄不了資料庫的。啟動服務有三種方式啟動,具體如下。 1、“ ...
  • 關於SQL Server 2008 想起關於SQL Server 2008的故事,曾經在大一的時候跟著視頻學習過一段時間,那時因為想多學習一些技術,才去學,遺憾的是,曾經是三分熱度,沒學多久就被扔掉了,如今再次撿起來,重新學習,並且想要樹立長久的學習態度,在今後的學習中,要及時的把學習的內容更新到這 ...
  • 1、儘可能的早做選擇和投影,可使中間結果變小,節省幾個數量級的時間 2、把選擇和投影串接起來,一元運算序列可以一起執行,只需對整個關係掃描一遍 3、把投影與其前或後的二元運算結合起來,在第一次用關係時去掉一些屬性,可以避免多次掃描整個關係 4、把某些選擇與其前的笛卡兒積合併成一個連接,當R*S有選擇 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...