詳解SQL數據定義功能

數據定義

  • 1. 數據庫模式(Schema)的定義與刪除
    • 定義模式
    • 刪除模式
  • 2. 基本表的定義、修改與刪除
    • 定義表
      • 約束
        • 1. `NOT NULL` 約束
        • 2. `DEFAULT` 約束
        • 3. `UNIQUE` 約束
        • 4. `PRIMARY KEY` 約束
          • 多列主鍵示例:
        • 5. `FOREIGN KEY` 約束
        • 6. `CHECK` 約束
        • 7. `AUTO_INCREMENT` (MySQL 特有)
        • 綜合示例:定義一張復雜表
    • 修改表結構
    • 刪除表
  • 3. 視圖(View)的定義與刪除
    • 創建視圖
    • 刪除視圖
  • 4. 索引的建立、修改與刪除
    • 創建索引
    • 修改索引
    • 刪除索引
  • 總結

1. 數據庫模式(Schema)的定義與刪除

定義模式

CREATE SCHEMA schema_name;
  • 示例
    CREATE SCHEMA my_schema;
    
    • 說明:創建名為 my_schema 的模式。

刪除模式

DROP SCHEMA schema_name [CASCADE | RESTRICT];
  • 示例
    DROP SCHEMA my_schema CASCADE;
    
    • 說明
      • CASCADE:刪除模式時,同時刪除模式中的所有對象。
      • RESTRICT:如果模式中存在對象,則無法刪除。

2. 基本表的定義、修改與刪除

定義表

CREATE TABLE table_name (column1 datatype [constraints],column2 datatype [constraints],...columnN datatype [constraints]
);
  • 示例
    CREATE TABLE employees (employee_id INT PRIMARY KEY,name VARCHAR(100) NOT NULL,department_id INT,hire_date DATE,salary DECIMAL(10, 2)
    );
    
    • 說明:創建名為 employees 的表,包含以下字段:
      • employee_id:主鍵,不允許為空。
      • name:員工姓名,不允許為空。
      • department_id:部門編號,允許為空。
      • hire_date:雇傭日期。
      • salary:薪資,精確到小數點后兩位。

約束

1. NOT NULL 約束
  • 作用:保證列的值不能為 NULL,即必須提供一個值。
  • 語法
    column_name data_type NOT NULL
    
  • 示例
    CREATE TABLE employees (employee_id INT NOT NULL,name VARCHAR(100) NOT NULL,hire_date DATE NOT NULL
    );
    
    • 說明
      • employee_idnamehire_date 列都必須有值,不能為 NULL
2. DEFAULT 約束
  • 作用:為列設置一個默認值,當插入數據時未提供值時使用默認值。
  • 語法
    column_name data_type DEFAULT default_value
    
  • 示例
    CREATE TABLE employees (employee_id INT NOT NULL,name VARCHAR(100) NOT NULL,hire_date DATE DEFAULT CURRENT_DATE,salary DECIMAL(10, 2) DEFAULT 3000.00
    );
    
    • 說明
      • hire_date 默認值是當前日期。
      • salary 默認值是 3000.00,如果插入數據時未提供 salary 值,將使用默認值。
3. UNIQUE 約束
  • 作用:保證列中的值唯一,不能重復。
  • 語法
    column_name data_type UNIQUE
    
  • 示例
    CREATE TABLE employees (employee_id INT NOT NULL UNIQUE,email VARCHAR(255) UNIQUE
    );
    
    • 說明
      • employee_idemail 列中的值不能重復。
      • UNIQUE 可以保證唯一性,但不同于主鍵,它允許列中存在 NULL 值。
4. PRIMARY KEY 約束
  • 作用:用于標識表中的唯一記錄,必須唯一且不能為 NULL
  • 語法
    column_name data_type PRIMARY KEY
    
  • 或者在多列上定義主鍵:
    PRIMARY KEY (column1, column2, ...)
    
  • 示例
    CREATE TABLE employees (employee_id INT PRIMARY KEY,name VARCHAR(100),department_id INT,hire_date DATE
    );
    
    • 說明
      • employee_id 是表的主鍵,值必須唯一且不能為 NULL
多列主鍵示例:
CREATE TABLE order_items (order_id INT,item_id INT,quantity INT,PRIMARY KEY (order_id, item_id)
);
  • 說明order_iditem_id 組合在一起作為主鍵,確保每個訂單中每個商品的記錄唯一。
5. FOREIGN KEY 約束
  • 作用:用于建立兩張表之間的關系,確保外鍵列的值必須在另一張表中存在。
  • 語法
    column_name data_type REFERENCES parent_table (parent_column)
    
  • 或者:
    FOREIGN KEY (column_name) REFERENCES parent_table (parent_column)
    
  • 示例
    CREATE TABLE departments (department_id INT PRIMARY KEY,department_name VARCHAR(100)
    );CREATE TABLE employees (employee_id INT PRIMARY KEY,name VARCHAR(100),department_id INT,FOREIGN KEY (department_id) REFERENCES departments(department_id)
    );
    
    • 說明
      • department_idemployees 表中的外鍵,引用 departments 表中的 department_id
6. CHECK 約束
  • 作用:限制列的值必須滿足某個條件。
  • 語法
    column_name data_type CHECK (condition)
    
  • 或者:
    CHECK (condition)
    
  • 示例
    CREATE TABLE employees (employee_id INT PRIMARY KEY,name VARCHAR(100) NOT NULL,salary DECIMAL(10, 2) CHECK (salary >= 0),age INT CHECK (age BETWEEN 18 AND 65)
    );
    
    • 說明
      • salary 列的值必須大于或等于 0。
      • age 列的值必須在 18 和 65 之間。
7. AUTO_INCREMENT (MySQL 特有)
  • 作用:為列自動生成唯一的遞增值,通常用于主鍵。
  • 語法
    column_name data_type AUTO_INCREMENT
    
  • 示例
    CREATE TABLE employees (employee_id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL
    );
    
    • 說明
      • employee_id 列的值將自動生成,初始值為 1,每次插入新行時遞增。
綜合示例:定義一張復雜表
CREATE TABLE employees (employee_id INT AUTO_INCREMENT PRIMARY KEY, -- 主鍵,自動遞增name VARCHAR(100) NOT NULL,                -- 員工姓名,不能為空email VARCHAR(255) UNIQUE,                 -- 郵箱必須唯一department_id INT,                         -- 部門編號hire_date DATE DEFAULT CURRENT_DATE,       -- 默認值為當前日期salary DECIMAL(10, 2) CHECK (salary >= 0), -- 薪資必須大于或等于 0FOREIGN KEY (department_id) REFERENCES departments(department_id) -- 外鍵約束
);
  • 詳細解讀
    • employee_id 是主鍵,自動遞增,唯一且不能為空。
    • name 是員工姓名,不能為空。
    • email 必須唯一,避免重復。
    • department_id 是外鍵,必須引用 departments 表中的 department_id
    • hire_date 默認值是當前日期。
    • salary 的值必須大于或等于 0。

修改表結構

  1. 添加列

    ALTER TABLE table_name ADD column_name datatype [constraints];
    
    • 示例
      ALTER TABLE employees ADD email VARCHAR(255);
      
      • 說明:為 employees 表添加 email 列。
  2. 修改列類型

    ALTER TABLE table_name ALTER COLUMN column_name TYPE new_datatype;
    
    • 示例
      ALTER TABLE employees ALTER COLUMN salary TYPE DECIMAL(12, 2);
      
      • 說明:將 employees 表中的 salary 列的精度修改為 12 位(小數點后兩位)。
  3. 刪除列

    ALTER TABLE table_name DROP COLUMN column_name [CASCADE | RESTRICT];
    
    • 示例
      ALTER TABLE employees DROP COLUMN email;
      
      • 說明:刪除 employees 表中的 email 列。

刪除表

DROP TABLE table_name [CASCADE | RESTRICT];
  • 示例
    DROP TABLE employees CASCADE;
    
    • 說明:刪除 employees 表及其依賴對象。

3. 視圖(View)的定義與刪除

創建視圖

視圖是基于一個或多個表的查詢結果集,定義一個視圖后可以像查詢表一樣查詢視圖。

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • 示例
    CREATE VIEW employee_salary AS
    SELECT employee_id, name, salary
    FROM employees
    WHERE salary > 50000;
    
    • 說明
      • 創建一個名為 employee_salary 的視圖,該視圖包含 employees 表中薪資大于 50000 的員工的 employee_idnamesalary

刪除視圖

DROP VIEW view_name;
  • 示例
    DROP VIEW employee_salary;
    
    • 說明:刪除 employee_salary 視圖。

4. 索引的建立、修改與刪除

創建索引

  1. 普通索引

    CREATE INDEX index_name ON table_name (column1, column2, ...);
    
    • 示例
      CREATE INDEX idx_department_id ON employees(department_id);
      
      • 說明:為 employees 表的 department_id 列創建普通索引。
  2. 唯一索引

    CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ...);
    
    • 示例
      CREATE UNIQUE INDEX idx_employee_email ON employees(email);
      
      • 說明:為 employees 表的 email 列創建唯一索引。

修改索引

索引本身無法直接修改,需要刪除后重新創建。

刪除索引

DROP INDEX index_name;
  • 示例
    DROP INDEX idx_department_id;
    
    • 說明:刪除名為 idx_department_id 的索引。

總結

  • CREATE 用于創建模式、表和索引。
  • ALTER 用于修改表結構。
  • DROP 用于刪除模式、表和索引。
  • 使用 CASCADE 會刪除對象及其依賴關系,RESTRICT 則要求先刪除所有依賴關系。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897972.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897972.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897972.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis超高并發分key實現

Redis扛并發的能力是非常強的,所以高并發場景下經常會使用Redis,但是Redis單分片的寫入瓶頸在2w左右,讀瓶頸在10w左右,如果在超高并發下即使是集群部署Redis,單分片的Redis也是有可能扛不住的,如下圖所示&a…

AI Agent 時代開幕-Manus AI與OpenAI Agent SDK掀起新風暴

【本周AI新聞: AI Agent 時代開幕-Manus AI與OpenAI Agent SDK掀起新風暴】 https://www.bilibili.com/video/BV1bkQyYCEvQ/?share_sourcecopy_web&vd_source32ed33e1165d68429b2e2eb4749f3f26 最近AI圈子里最火的話題非Manus莫屬!這款由中國武漢創業公司“蝴…

多時間尺度的配電網深度強化學習無功優化策略的Python示例代碼框架

以下是一個簡單的多時間尺度的配電網深度強化學習無功優化策略的Python示例代碼框架,用于幫助你理解如何使用深度強化學習(以深度Q網絡 DQN 為例)來處理配電網的無功優化問題。在實際應用中,你可能需要根據具體的配電網模型和需求…

劍指 Offer II 081. 允許重復選擇元素的組合

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20081.%20%E5%85%81%E8%AE%B8%E9%87%8D%E5%A4%8D%E9%80%89%E6%8B%A9%E5%85%83%E7%B4%A0%E7%9A%84%E7%BB%84%E5%90%88/README.md 劍指 Offer II 081. 允許重復選擇…

Webpack 前端性能優化全攻略

文章目錄 1. 性能優化全景圖1.1 優化維度概覽1.2 優化效果指標 2. 構建速度優化2.1 緩存策略2.2 并行處理2.3 減少構建范圍 3. 輸出質量優化3.1 代碼分割3.2 Tree Shaking3.3 壓縮優化 4. 運行時性能優化4.1 懶加載4.2 預加載4.3 資源優化 5. 高級優化策略5.1 持久化緩存5.2 模…

虛擬電商-數據庫分庫分表(二)

本文章介紹:使用Sharding-JDBC實現數據庫分庫分表,數據庫分片策略,實現數據庫按月分表 一、Sharding-JDBC使用 1.1.準備環境 步驟一:分庫分表sql腳本導入 創建了兩個數據庫:chongba_schedule0 和chongba_schedule1…

向量數據庫對比以及Chroma操作

一、向量數據庫與傳統類型數據庫 向量數據庫(Vector Storage Engine)與傳統類型的數據庫如關系型數據庫(MySQL)、文檔型數據庫(MongoDB)、鍵值存儲(Redis)、全文搜索引擎&#xff0…

python列表基礎知識

列表 創建列表 1.列表的定義:可變的,有序的數據結構,可以隨時添加或者刪除其中的元素 2.基本語法:字面量【元素1,元素2,元素3】使用[]創建列表 定義變量:變量名稱【元素1,元素2&…

Node.js 的模塊作用域和 module 對象詳細介紹

目錄 代碼示例 1. 創建模塊文件 module-demo.js 2. 導入模塊并使用 module-demo.js 運行結果 總結 在 Node.js 中,每個文件都是一個獨立的模塊,具有自己的作用域。與瀏覽器 JavaScript 代碼不同,Node.js 采用模塊作用域,這意味…

美暢物聯丨WebRTC 技術詳解:構建實時通信的數字橋梁

在互聯網技術飛速發展的今天,實時通信已成為數字生活的核心需求。WebRTC作為一個開源項目,憑借卓越的技術實力與創新理念,為網頁和移動應用帶來了顛覆性的實時通信能力。它突破了傳統通信方式的限制,實現了音頻、視頻和數據在用戶…

excel中兩個表格的合并

使用函數: VLOOKUP函數 如果涉及在excel中兩個工作表之間進行配對合并,則: VLOOKUP(C1,工作表名字!A:B,2,0) 參考: excel表格中vlookup函數的使用方法步驟https://haokan.baidu.com/v?pdwisenatural&vid132733503560775…

單引號與雙引號在不同編程語言中的使用與支持

在編程語言中,單引號和雙引號是常見的符號,它們通常用來表示字符和字符串。然而,如何使用這兩種符號在不同的編程語言中有所不同,甚至有一些語言并不區分單引號和雙引號的用途。本文將詳細介紹不同編程語言中單引號與雙引號的支持…

怎么鑒別金媒v10.51和v10.5的區別!單單從CRM上區分!

2.怎么鑒別程序是10.5還是10.51 ?* 作為商業用戶,升級完全沒有這個擔心,但是這次升級從全局來看清晰度不是很高,不像10.5的升級后臺UI都變化了!你說有漏洞但是我沒遇到過 所以我也不知道升級了啥只能看版本數字是無法區…

python腳本實現服務器內存和cpu使用監控,并記錄日志,可以設置閾值和采樣頻率

Python 腳本,實現以下功能: 按日期自動生成日志文件(例如 cpu_mem_20231001.csv)當 CPU 或內存超過閾值時觸發記錄獨立記錄報警事件(保存到 alert.log)支持自定義閾值和監控間隔 腳本代碼 import psutil …

【Oracle】19c數據庫控制文件多路徑配置

一、關閉數據庫(2個節點實例都要關閉) srvctl stop database -d ora19c 二、多路徑控制文件 打開其中一個節點到nomount狀態 sqlplus / as sysdba startup nomount; [oracleora19c1:/home/oracle]$ rman target / RMAN> restore controlfile to…

大模型訓練全流程深度解析

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。https://www.captainbed.cn/north 文章目錄 1. 大模型訓練概覽1.1 訓練流程總覽1.2 關鍵技術指標 2. 數據準備2.1 數據收集與清洗2.2 數據…

【Linux】進程(1)進程概念和進程狀態

🌟🌟作者主頁:ephemerals__ 🌟🌟所屬專欄:Linux 目錄 前言 一、什么是進程 二、task_struct的內容 三、Linux下進程基本操作 四、父進程和子進程 1. 用fork函數創建子進程 五、進程狀態 1. 三種重…

lws-minimal-ws-server前端分析

index.html index.html是前端入口 <html><head><meta charsetutf-8 http-equiv"Content-Language" content"en"/><!-- 引入js --><script src"/example.js"></script></head><body><img s…

L1-7 統一命名規范(java)

你所在的公司剛剛招收了幾位程序員&#xff0c;然而這些程序員之前在不同的公司工作&#xff0c;所以他們習慣的變量命名規范可能存在差異&#xff0c;需要讓他們都習慣公司要求的命名規范&#xff0c;然而這樣可能會降低他們的工作效率。 你的上司找到了你&#xff0c;希望你…

Flexus應用服務器L實例、X實例以及ECS(彈性計算服務)之間的區別及其適用場景

為了更好地理解Flexus應用服務器L實例、X實例以及ECS&#xff08;彈性計算服務&#xff09;之間的區別及其適用場景&#xff0c;下面我將通過具體的例子來說明每種類型的使用情況。 1. Flexus L實例 特點: 針對高并發和負載均衡進行了優化。它可能包括更快的網絡接口、更高效…