פקודות DDL משמשות ליצירת הסכמה של בסיס הנתונים ועדכון האובייקטים שקיימים בה.
הסכמה היא רשימה של הקשרים הלוגיים בין הטבלות של בסיס הנתונים. הסכמה היא מעין namespace שתחתיו יושב בסיס הנתונים. בסכימה יכולות להיות גם הרשאות.
Sql Server מגיע עם כמה סכמות מוכנות, למשל dbo.
CREATE TABLE
Create table שם טבלה
(
Column_name data_type [DEFAULT] [IDENTITY] [CONSTRAINT]
[,column_name….]
)
דוגמא, יצירת טבלה לפרטי הזמנה.
CREATE TABLE [Order Details]
(
OrderID INT ,
ProductID INT ,
UnitPrice MONEY,
Quantity SMALLINT (1),
Discount REAL
)
אפשר ליצור טבלה שמבוססת על טבלה אחרת.
Create table שם טבלה
SELECT */column_name
INTO new_table_name
FROM table_name
[WHERE condition]
אפשר לקבוע ערכי ברירת מחדל לטבלה
…Quantity SMALLINT DEFAULT (1)
ניתן להגדיר שדה מיספור אוטומטי. השדה יקבל ערך התחלתי ובכמה להגדיל את המונה.
…Id_num int identity(1,1)
ALTER TABLE
יצירת שינויים בטבלה.
הוספת עמודה לטבלה:
ALTER TABLE customers ADD phone nvarchar(10)
מחיקת עמודה מטבלה:
ALTER TABLE customers DROP COLUMN phone
DROP TABLE
מחיקת טבלה.
Drop table שם טבלה
אילוצים
להגדרת הטבלה אפשר להוסיף אלוצים.
- Primary Key – מפתח ראשי. עמודה או שילוב עמודות שמהווה ערך חד ערכי בטבלה. מונע כפילויות.
- Foreign Key – ערכים המוגדרים כמפתח ראשי בטבלה אחרת.
- Not Null – אי אפשר לשים ערך NULL.
- Check – תנאי שמוסיפים לטבלה. אם הערך המתקבל הוא TRUE, רק אז יוכנס הערך לטבלה. למשל, כמות שמקבלת מספר הגדול מ-0 בלבד.
- Unique – כמו PKת אבל כאן אפשר להכניס ערך NULL לשדה.
CREATE TABLE [Order Details]
(
OrderID int CONSTRAINT ord_det_ord_id_nn NOT NULL,
ProductID int NOT NULL,
UnitPrice money NOT NULL DEFAULT (0),
Quantity smallint NOT NULL DEFAULT (1),
Discount real NOT NULL DEFAULT (0),
PRIMARY KEY (OrderID,ProductID),
FOREIGN KEY (OrderID) REFERENCES Orders,
FOREIGN KEY(ProductID) REFERENCES Products,
CHECK (Discount >= 0 and Discount <= 1),
CHECK (Quantity > 0),
CHECK (UnitPrice >= 0)
)
אפשר להוסיף אילוצים בעזרת ALTER TABLE.
ALTER TABLE [schema.]table
[ADD / DROP / RENAME]
-- הוספת אילוץ
ADD [CONSTRAINT constraint_nick_name] constraint_type (column)
-- מחיקת אילוץ
DROP PRIMARY KEY [CASCADE]
DROP UNIQUE (column,...)
DROP CONSTRAINT constraint_name [CASCADE]
תרגול DDL
-- ex2
Create table employees
(
Employee_id int PRIMARY KEY identity(1,1),
Last_name VARCHAR(20) NOT NULL,
Hire_date DATETIME DEFAULT(GETDATE()) NOT NULL,
Salary MONEY DEFAULT(5000),
Email VARCHAR(30) UNIQUE NULL
)
Create table departments
(
department_id int PRIMARY KEY identity(10,10),
department_name VARCHAR(20) NOT NULL,
location VARCHAR(30) NOT NULL
)
-- ex3
ALTER TABLE employees
ADD department_id int FOREIGN KEY (department_id) REFERENCES departments
-- ex4
SELECT *
INTO emp_history
FROM employees
-- ex5
Drop table emp_history