從建立資料庫、資料表,到欄位增減、約束管理、資料匯入匯出,再到 PHP 動態修改結構,本文彙整 SQL Server 資料表全生命週期的核心 T-SQL 語法,附上可直接執行的範例與 PHP 整合程式碼,適合開發人員速查與複製部署。
-- 建立/切換資料庫
CREATE DATABASE school;
USE school;
-- 建立資料表
CREATE TABLE student (
id INT,
name VARCHAR(20),
sex CHAR(2),
age INT,
date DATETIME,
info TEXT,
bak VARCHAR(500)
);
-- 檢視結構
EXEC sp_help student;
-- 修改欄位
ALTER TABLE student ADD tel VARCHAR(20); -- 新增
ALTER TABLE student DROP COLUMN bak; -- 刪除
EXEC sp_rename 'student.sex', 'sex2'; -- 重命名
ALTER TABLE student ALTER COLUMN age CHAR(20); -- 變更型別
-- 刪除資料表
DROP TABLE student;
CREATE TABLE biao (
id INT PRIMARY KEY,
name VARCHAR(20),
sex CHAR(2) CHECK (sex='男' OR sex='女'),
age INT,
date DATETIME,
info TEXT,
tel CHAR(16) UNIQUE,
bak VARCHAR(500) DEFAULT '我是學生'
);
-- 動態新增約束
ALTER TABLE grade ADD CONSTRAINT aa PRIMARY KEY (id);
ALTER TABLE grade ADD CONSTRAINT bb UNIQUE (tel);
ALTER TABLE grade ADD CONSTRAINT cc CHECK (sex='男' OR sex='女');
ALTER TABLE grade ADD CONSTRAINT dd DEFAULT '我是好學生' FOR bak;
-- 查看/刪除約束
EXEC sp_helpconstraint grade;
ALTER TABLE grade DROP CONSTRAINT dd;
CREATE TABLE shop_jb (
id INT PRIMARY KEY,
namel VARCHAR(20),
spec VARCHAR(20),
stock INT,
price FLOAT,
datel DATETIME DEFAULT '2010-7-6'
);
CREATE TABLE shop_yw (
ywid INT PRIMARY KEY,
name2 VARCHAR(20),
sex CHAR(2) CHECK (sex='男' OR sex='女'),
age INT,
tel VARCHAR(18) UNIQUE,
address VARCHAR(20)
);
CREATE TABLE shop_xs (
id INT NOT NULL,
sale CHAR(20),
quantity CHAR(20),
date2 DATETIME DEFAULT '2010-5-3',
ywid INT,
FOREIGN KEY (id) REFERENCES shop_jb(id),
FOREIGN KEY (ywid) REFERENCES shop_yw(ywid)
);
| 操作 | SQL Server | MySQL |
|---|---|---|
| 新增欄位 | ALTER TABLE t ADD col INT | ALTER TABLE t ADD COLUMN col INT |
| 修改欄位名/型別 | EXEC sp_rename / ALTER COLUMN | ALTER TABLE t CHANGE old new INT |
| 修改預設值 | ADD CONSTRAINT ... DEFAULT | ALTER TABLE t ALTER col SET DEFAULT 'v' |
| 新增自增主鍵 | IDENTITY(1,1) + PK | ALTER TABLE t ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY |
| 備份單表 | BACKUP DATABASE... | mysqldump -u root -p db tbl > file.sql |
| 匯出資料 | BCP / SELECT INTO OUTFILE | SELECT ... INTO OUTFILE '/path/file.txt' |
| 匯入資料 | BULK INSERT / BCP | LOAD DATA INFILE '/path/file.txt' INTO TABLE t |
<?php
$link = mysql_connect($server, $user, $pass);
if (mysql_select_db($dbname, $link)) {
if ($link) {
echo "connect succeed";
// 新增 keywords 欄位
mysql_query("ALTER TABLE `article` ADD `keywords` VARCHAR(100) NOT NULL DEFAULT ''")
or die(mysql_error());
echo "Add succeed";
} else {
echo "connect failed";
}
mysql_close($link);
}
?>
mysql_* 函式,生產環境請改用 mysqli 或 PDO 並採用預處理語句。-- 將 t1.com2 與 t2.com1 拼接後插入 tx
INSERT INTO tx
SELECT t1.com1, CONCAT(t1.com2, t2.com1)
FROM t1, t2;
熟練這些 DDL/DML 與約束語法,能大幅加速結構變更、資料遷移與跨平台移植作業,減少人為錯誤。