SQL SELECT INTO 語句可用于創(chuàng)建表的備份復(fù)件。
SELECT INTO 語句
SELECT INTO 語句從一個表中選取數(shù)據(jù),然后把數(shù)據(jù)插入另一個表中。
SELECT INTO 語句常用于創(chuàng)建表的備份復(fù)件或者用于對記錄進行存檔。
SQL SELECT INTO 語法
您可以把所有的列插入新表:
SELECT * INTO new_table_name [IN externaldatabase]
FROM old_tablename
只把希望的列插入新表:
SELECT column_name(s) INTO new_table_name [IN externaldatabase]
FROM old_tablename
SQL SELECT INTO 實例 - 制作備份復(fù)件
下面的例子會制作 "Persons" 表的備份復(fù)件:
SELECT * INTO Persons_backup FROM Persons
IN 子句可用于向另一個數(shù)據(jù)庫中拷貝表:
SELECT * INTO Persons IN 'Backup.mdb' FROM Persons
如果我們希望拷貝某些域,可以在 SELECT 語句后列出這些域:
SELECT LastName,FirstName INTO Persons_backup
FROM Persons
SQL SELECT INTO 實例 - 帶有 WHERE 子句
下面的例子通過從 "Persons" 表中提取居住在 "Beijing" 的人的信息,創(chuàng)建了一個帶有兩個列的名為 "Persons_backup" 的表:
SELECT LastName,Firstname INTO Persons_backup FROM Persons
WHERE City='Beijing'
SQL SELECT INTO 實例 - 被連接的表
從一個以上的表中選取數(shù)據(jù)也是可以做到的。
下面的例子會創(chuàng)建一個名為 "Persons_Order_Backup" 的新表,其中包含了從 Persons 和 Orders 兩個表中取得的信息:
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
CREATE DATABASE 語句
CREATE DATABASE 用于創(chuàng)建數(shù)據(jù)庫。
SQL CREATE DATABASE 語法
CREATE DATABASE database_name
現(xiàn)在我們希望創(chuàng)建一個名為 "my_db" 的數(shù)據(jù)庫。
CREATE DATABASE my_db
可以通過 CREATE TABLE 來添加數(shù)據(jù)庫表。
CREATE TABLE 語句用于創(chuàng)建數(shù)據(jù)庫中的表。
SQL CREATE TABLE 語法
CREATE TABLE 表名稱
(
列名稱1 數(shù)據(jù)類型,
列名稱2 數(shù)據(jù)類型,
列名稱3 數(shù)據(jù)類型,
....
)
數(shù)據(jù)類型(data_type)規(guī)定了列可容納何種數(shù)據(jù)類型。下面的表格包含了SQL中最常用的數(shù)據(jù)類型:
數(shù)據(jù)類型 描述
integer(size) 僅容納整數(shù)。在括號內(nèi)規(guī)定數(shù)字的最大位數(shù)。
int(size)
smallint(size)
tinyint(size)
decimal(size,d) 容納帶有小數(shù)的數(shù)字。
numeric(size,d)
"size" 規(guī)定數(shù)字的最大位數(shù)。
"d" 規(guī)定小數(shù)點右側(cè)的最大位數(shù)。
char(size) 容納固定長度的字符串(可容納字母、數(shù)字以及特殊 字 符)。在括號中規(guī)定字符串的長度。
varchar(size)
容納可變長度的字符串(可容納字母、數(shù)字以及特殊的字 符)。在括號中規(guī)定字符串的最大長度。
date(yyyymmdd) 容納日期。
如何創(chuàng)建名為 "Person" 的表。
該表包含 5 個列,列名分別是:"Id_P"、"LastName"、"FirstName"、"Address" 以及 "City":
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
Id_P 列的數(shù)據(jù)類型是 int,包含整數(shù)。其余 4 列的數(shù)據(jù)類型是 varchar,最大長度為 255 個字符。
可使用 INSERT INTO 語句向空表寫入數(shù)據(jù)。
SQL 約束
約束用于限制加入表的數(shù)據(jù)的類型。
可以在創(chuàng)建表時規(guī)定約束(通過 CREATE TABLE 語句),或者在表創(chuàng)建之后也可以(通過 ALTER TABLE 語句)。
我們將主要探討以下幾種約束:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
SQL NOT NULL 約束
NOT NULL 約束強制列不接受 NULL 值。
NOT NULL 約束強制字段始終包含值。這意味著,如果不向字段添加值,就無法插入新記錄或者更新記錄。
下面的 SQL 語句強制 "Id_P" 列和 "LastName" 列不接受 NULL 值:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
SQL UNIQUE 約束
UNIQUE 約束唯一標識數(shù)據(jù)庫表中的每條記錄。
UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證。
PRIMARY KEY 擁有自動定義的 UNIQUE 約束。
請注意,每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。
下面的 SQL 在 "Persons" 表創(chuàng)建時在 "Id_P" 列創(chuàng)建 UNIQUE 約束:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
如果需要命名 UNIQUE 約束,以及為多個列定義 UNIQUE 約束,請使用下面的 SQL 語法:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)
當表已被創(chuàng)建時,如需在 "Id_P" 列創(chuàng)建 UNIQUE 約束,請使用下列 SQL:
ALTER TABLE Persons ADD UNIQUE (Id_P)
如需命名 UNIQUE 約束,并定義多個列的 UNIQUE 約束,請使用下面的 SQL 語法:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
撤銷 UNIQUE 約束
如需撤銷 UNIQUE 約束,請使用下面的 SQL:
MySQL:
ALTER TABLE Persons DROP INDEX uc_PersonID
SQL PRIMARY KEY 約束
PRIMARY KEY 約束唯一標識數(shù)據(jù)庫表中的每條記錄。
主鍵必須包含唯一的值。
主鍵列不能包含 NULL 值。
每個表都應(yīng)該有一個主鍵,并且每個表只能有一個主鍵。
下面的 SQL 在 "Persons" 表創(chuàng)建時在 "Id_P" 列創(chuàng)建 PRIMARY KEY 約束:
MySQL:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)
如果需要命名 PRIMARY KEY 約束,以及為多個列定義 PRIMARY KEY 約束,請使用下面的 SQL 語法:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
)
如果在表已存在的情況下為 "Id_P" 列創(chuàng)建 PRIMARY KEY 約束,請使用下面的 SQL:
ALTER TABLE Persons ADD PRIMARY KEY (Id_P)
如果需要命名 PRIMARY KEY 約束,以及為多個列定義 PRIMARY KEY 約束,請使用下面的 SQL 語法:
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
注釋:如果您使用 ALTER TABLE 語句添加主鍵,必須把主鍵列聲明為不包含 NULL 值(在表首次創(chuàng)建時)。
撤銷 PRIMARY KEY 約束
如需撤銷 PRIMARY KEY 約束,請使用下面的 SQL:
MySQL:
ALTER TABLE Persons DROP PRIMARY KEY
SQL FOREIGN KEY 約束
一個表中的 FOREIGN KEY 指向另一個表中的 PRIMARY KEY。
讓我們通過一個例子來解釋外鍵。
請注意,"Orders" 中的 "Id_P" 列指向 "Persons" 表中的 "Id_P" 列。
"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 約束用于預(yù)防破壞表之間連接的動作。
FOREIGN KEY 約束也能防止非法數(shù)據(jù)插入外鍵列,因為它必須是它指向的那個表中的值之一。
下面的 SQL 在 "Orders" 表創(chuàng)建時為 "Id_P" 列創(chuàng)建 FOREIGN KEY:
MySQL:
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)
如果需要命名 FOREIGN KEY 約束,以及為多個列定義 FOREIGN KEY 約束,請使用下面的 SQL 語法:
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)
如果在 "Orders" 表已存在的情況下為 "Id_P" 列創(chuàng)建 FOREIGN KEY 約束,請使用下面的 SQL:
ALTER TABLE Orders ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
如果需要命名 FOREIGN KEY 約束,以及為多個列定義 FOREIGN KEY 約束,請使用下面的 SQL 語法:
ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
撤銷 FOREIGN KEY 約束
如需撤銷 FOREIGN KEY 約束,請使用下面的 SQL:
MySQL:
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders