萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 資料表操作 SQL 大全:建庫建表、欄位增刪改、約束管理、外鍵、備份導入導出

MySQL DDL/DML 核心操作速查,含資料庫/資料表生命週期、欄位屬性變更、五大約束 (PK/UK/CK/DFK/FK)、資料匯入導出、PHP 操作範例。

基礎建庫建表

CREATE DATABASE school;
USE school;

CREATE TABLE student (
    id INT,
    name VARCHAR(20),
    sex CHAR(2),
    age INT,
    dt DATETIME,
    info TEXT,
    bak VARCHAR(500)
);

-- 查看結構
DESC student;  -- 或 SHOW CREATE TABLE student

欄位增刷改 (ALTER TABLE)

-- 新增欄位
ALTER TABLE student ADD tel VARCHAR(20);

-- 刪除欄位
ALTER TABLE student DROP COLUMN bak;

-- 修改欄位名
ALTER TABLE student CHANGE sex sex2 CHAR(2);  -- MySQL 語法
-- 或標準 SQL (8.0+)
ALTER TABLE student RENAME COLUMN sex TO sex2;

-- 修改資料類型
ALTER TABLE student MODIFY age CHAR(20);  -- MySQL
-- ALTER TABLE student ALTER COLUMN age TYPE CHAR(20); -- PostgreSQL

-- 刪除表
DROP TABLE student;

資料完整性約束 (五大類)

CREATE TABLE biao (
    id INT PRIMARY KEY,
    name VARCHAR(20),
    sex CHAR(2) CHECK (sex='男' OR sex='女'),  -- 檢查約束 (8.0.16+ 生效)
    age INT,
    dt DATETIME,
    info TEXT,
    tel CHAR(16) UNIQUE,                        -- 唯一約束
    bak VARCHAR(500) DEFAULT '我是學生'         -- 預設約束
);

約束動態管理

-- 建表後新增主鍵
ALTER TABLE grade ADD CONSTRAINT pk_grade PRIMARY KEY (id);

-- 新增唯一約束
ALTER TABLE grade ADD CONSTRAINT uk_tel UNIQUE (tel);

-- 新增檢查約束
ALTER TABLE grade ADD CONSTRAINT chk_sex CHECK (sex IN ('男','女'));

-- 新增預設值
ALTER TABLE grade ADD CONSTRAINT df_bak DEFAULT '我是好學生' FOR bak;

-- 查看約束
SHOW CREATE TABLE grade;  -- 或 SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME='grade';

-- 刪除約束
ALTER TABLE grade DROP CONSTRAINT df_bak;

外鍵關聯 (參考完整性)

CREATE TABLE shop_jb (
    id INT PRIMARY KEY,
    name1 VARCHAR(20), spec VARCHAR(20), stock INT, price FLOAT, dt DATETIME DEFAULT '2010-07-06'
);

CREATE TABLE shop_yw (
    ywid INT PRIMARY KEY,
    name2 VARCHAR(20),
    sex CHAR(2) CHECK (sex IN ('男','女')),
    age INT,
    tel VARCHAR(18) UNIQUE,
    address VARCHAR(20)
);

CREATE TABLE shop_xs (
    id INT NOT NULL,
    sale CHAR(20), quantity CHAR(20), dt2 DATETIME DEFAULT '2010-05-03',
    ywid INT,
    FOREIGN KEY (id) REFERENCES shop_jb(id),
    FOREIGN KEY (ywid) REFERENCES shop_yw(ywid)
);

常用 ALTER 速查表

操作MySQL 語法
新增欄位ALTER TABLE t ADD COLUMN c type DEFAULT val;
修改欄位名+類型+預設值ALTER TABLE t CHANGE old_c new_c type DEFAULT val;
僅修改預設值ALTER TABLE t ALTER COLUMN c SET DEFAULT val;
僅修改類型ALTER TABLE t MODIFY c new_type;
新增自增主鍵ALTER TABLE t ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY;
刪除欄位ALTER TABLE t DROP COLUMN c;

資料匯入導出

# 表級備份
mysqldump -u root -p dbname tblname > backup.sql

# 導出查詢結果
SELECT col1, col2 FROM tbl LIMIT 10 INTO OUTFILE '/tmp/out.txt';

# 導入資料 (高效)
LOAD DATA INFILE '/tmp/out.txt' INTO TABLE tbl CHARACTER SET utf8mb4;

# 字串拼接插入
INSERT INTO tx SELECT t1.c1, CONCAT(t1.c2, t2.c1) FROM t1, t2;

PHP 操作 MySQL 新增欄位範例

注意:原文使用已棄用 mysql_* 函數,現代專案請用 mysqli 或 PDO。

copyright © 萬盛學電腦網 all rights reserved