首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL DDL 基礎鞏固:建庫建表、約束、Check 限制與 Oracle 差異

     編輯:MySQL 綜合教學

MySQL DDL 基礎鞏固:建庫建表、約束、Check 限制與 Oracle 差異

DDL(Data Definition Language)定義資料庫結構。本文以完整可執行範例,涵蓋建庫/建表、查看結構、截斷表、主鍵/唯一/外鍵/Check 約束的增刪改,並對比 MySQL 與 Oracle 對 Check 約束的支援差異。

核心 DDL 操作速查

-- 建庫/刪庫/切庫
CREATE DATABASE IF NOT EXISTS mydb;
DROP DATABASE mydb;
USE mydb;

-- 建表
CREATE TABLE tb1 (
    id INT,
    name VARCHAR(255) DEFAULT 'anonymity',
    info TEXT
);

-- 查看
SHOW TABLES;
DESC tb1;          -- 或 SHOW COLUMNS FROM tb1

-- 截斷表(DDL,高效、不觸發 Trigger、重置 AUTO_INCREMENT)
TRUNCATE TABLE tb1;

-- 修改欄位加主鍵
ALTER TABLE tb1 MODIFY id INT PRIMARY KEY;

-- 修改欄位加唯一約束(允許多 NULL,因 NULL≠NULL)
ALTER TABLE tb1 MODIFY name VARCHAR(255) UNIQUE;

-- 建表同時定義主鍵+外鍵
CREATE TABLE tb2 (
    id INT PRIMARY KEY AUTO_INCREMENT,
    fid INT,
    name VARCHAR(255) DEFAULT 'anonymity' NOT NULL,
    info TEXT,
    CONSTRAINT tb2_fk FOREIGN KEY (fid) REFERENCES tb1(id)
);

-- 刪除/新增外鍵
ALTER TABLE tb2 DROP FOREIGN KEY tb2_fk;
ALTER TABLE tb2 ADD FOREIGN KEY (fid) REFERENCES tb1(id);

Check 約束:MySQL vs Oracle 關鍵差異

資料庫支援度行為
MySQL (≤ 8.0.15)語法通過、不生效ALTER TABLE tb1 ADD CHECK(id>5); 成功,但 INSERT VALUES(1) 仍可執行
MySQL 8.0.16+完整支援真正強制檢查,違規報錯
Oracle完整支援CREATE TABLE tb3 (id NUMBER(8), CHECK(id>100)); 違規拋 ORA-02290

Oracle 實測輸出

SQL> CREATE TABLE tb3 (id NUMBER(8), name VARCHAR2(255), CHECK(id>100));
Table created.

SQL> INSERT INTO tb3 VALUES(6,'six');
ORA-02290: check constraint (SYS_C005457) violated

SQL> INSERT INTO tb3 VALUES(600,'six');
1 row created.

避坑提醒

  • MySQL 8.0.16 前 不可依賴 Check 約束做資料完整性,應在應用層或 Trigger 驗證。
  • TRUNCATE 為 DDL,不可回滾、不觸發 ON DELETE Trigger、重置自增計數器;DELETE 為 DML,可回滾、觸發 Trigger。
  • 外鍵名建議顯式命名 CONSTRAINT fk_xxx,便於後續管理。
  • AUTO_INCREMENT 僅支援單欄主鍵,複合主鍵不可用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved