SELECT INTO 語(yǔ)句
SELECT INTO 語(yǔ)句從一個(gè)表中選取數(shù)據(jù)诗芜,然后把數(shù)據(jù)插入另一個(gè)表中杭棵。
SELECT INTO 語(yǔ)句常用于創(chuàng)建表的備份復(fù)件或者用于對(duì)記錄進(jìn)行存檔扒腕。
SQL SELECT INTO 語(yǔ)法
您可以把所有的列插入新表:
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 實(shí)例 - 制作備份復(fù)件
下面的例子會(huì)制作 "Persons" 表的備份復(fù)件:
SELECT
*INTO
Persons_backup FROM Persons
IN 子句可用于向另一個(gè)數(shù)據(jù)庫(kù)中拷貝表:
SELECT
*INTO
Persons
IN
'Backup.mdb' FROM Persons
如果我們希望拷貝某些域,可以在 SELECT 語(yǔ)句后列出這些域:
SELECT LastName,FirstName
INTO
Persons_backup FROM Persons
SQL SELECT INTO 實(shí)例 - 帶有 WHERE 子句
我們也可以添加 WHERE 子句。
下面的例子通過(guò)從 "Persons" 表中提取居住在 "Beijing" 的人的信息颗胡,創(chuàng)建了一個(gè)帶有兩個(gè)列的名為 "Persons_backup" 的表:
SELECT LastName,Firstname
INTO
Persons_backup FROM Persons WHERE City='Beijing'
SQL SELECT INTO 實(shí)例 - 被連接的表
從一個(gè)以上的表中選取數(shù)據(jù)也是可以做到的八回。
下面的例子會(huì)創(chuàng)建一個(gè)名為 "Persons_Order_Backup" 的新表酷愧,其中包含了從 Persons 和 Orders 兩個(gè)表中取得的信息:
SELECT Persons.LastName,Orders.OrderNo
INTO
Persons_Order_Backup FROM PersonsINNER
JOIN
OrdersON Persons.Id_P=Orders.Id_P
CREATE DATABASE 語(yǔ)句
CREATE DATABASE 用于創(chuàng)建數(shù)據(jù)庫(kù)。
SQL CREATE DATABASE 語(yǔ)法
CREATE DATABASE database_name
SQL CREATE DATABASE 實(shí)例
現(xiàn)在我們希望創(chuàng)建一個(gè)名為 "my_db" 的數(shù)據(jù)庫(kù)缠诅。
我們使用下面的 CREATE DATABASE 語(yǔ)句:
CREATE DATABASE my_db
可以通過(guò) CREATE TABLE 來(lái)添加數(shù)據(jù)庫(kù)表溶浴。
CREATE TABLE 語(yǔ)句
CREATE TABLE 語(yǔ)句用于創(chuàng)建數(shù)據(jù)庫(kù)中的表。
SQL CREATE TABLE 語(yǔ)法
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) int(size) smallint(size) tinyint(size) |
僅容納整數(shù)士败。在括號(hào)內(nèi)規(guī)定數(shù)字的最大位數(shù)。 |
decimal(size,d) numeric(size,d) |
容納帶有小數(shù)的數(shù)字褥伴。 "size" 規(guī)定數(shù)字的最大位數(shù)谅将。"d" 規(guī)定小數(shù)點(diǎn)右側(cè)的最大位數(shù)。 |
char(size) | 容納固定長(zhǎng)度的字符串(可容納字母重慢、數(shù)字以及特殊字符)饥臂。 在括號(hào)中規(guī)定字符串的長(zhǎng)度。 |
varchar(size) | 容納可變長(zhǎng)度的字符串(可容納字母似踱、數(shù)字以及特殊的字符)隅熙。 在括號(hào)中規(guī)定字符串的最大長(zhǎng)度稽煤。 |
date(yyyymmdd) | 容納日期。 |
SQL CREATE TABLE 實(shí)例
本例演示如何創(chuàng)建名為 "Person" 的表囚戚。
該表包含 5 個(gè)列酵熙,列名分別是:"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 | LastName | FirstName | Address | City |
---|---|---|---|---|
Id_P 列的數(shù)據(jù)類型是 int,包含整數(shù)拳芙。其余 4 列的數(shù)據(jù)類型是 varchar察藐,最大長(zhǎng)度為 255 個(gè)字符。
空的 "Persons" 表類似這樣:
Id_P | LastName | FirstName | Address | City |
---|---|---|---|---|
可使用 INSERT INTO 語(yǔ)句向空表寫入數(shù)據(jù)态鳖。
SQL 約束
約束用于限制加入表的數(shù)據(jù)的類型转培。
可以在創(chuàng)建表時(shí)規(guī)定約束(通過(guò) CREATE TABLE 語(yǔ)句),或者在表創(chuàng)建之后也可以(通過(guò) ALTER TABLE 語(yǔ)句)浆竭。
我們將主要探討以下幾種約束:
- ①
NOT NULL
約束強(qiáng)制列不接受 NULL 值浸须。 - ②
UNIQUE
約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄。 - ③
PRIMARY KEY
約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄邦泄。 - ④
FOREIGN KEY
一個(gè)表中的 FOREIGN KEY 指向另一個(gè)表中的 PRIMARY KEY删窒。 - ⑤
CHECK
約束用于限制列中的值的范圍。 - ⑥
DEFAULT
約束用于向列中插入默認(rèn)值顺囊。
① NOT NULL 約束強(qiáng)制列不接受 NULL 值肌索。
NOT NULL 約束強(qiáng)制字段始終包含值。這意味著特碳,如果不向字段添加值诚亚,就無(wú)法插入新記錄或者更新記錄。
下面的 SQL 語(yǔ)句強(qiáng)制 "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)
)
② UNIQUE 約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄午乓。
UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證站宗。
PRIMARY KEY 擁有自動(dòng)定義的 UNIQUE 約束。
請(qǐng)注意益愈,每個(gè)表可以有 多個(gè) UNIQUE 約束梢灭,但是每個(gè)表只能有 一個(gè) PRIMARY KEY 約束。
SQL UNIQUE Constraint on CREATE TABLE
下面的 SQL 在 "Persons" 表創(chuàng)建時(shí)在 "Id_P" 列創(chuàng)建 UNIQUE 約束:
MySQL:
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)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如果需要命名 UNIQUE 約束蒸其,以及為多個(gè)列定義 UNIQUE 約束敏释,請(qǐng)使用下面的 SQL 語(yǔ)法:
MySQL / SQL Server / Oracle / MS Access:
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)
)
SQL UNIQUE Constraint on ALTER TABLE
當(dāng)表已被創(chuàng)建時(shí),如需在 "Id_P" 列創(chuàng)建 UNIQUE 約束摸袁,請(qǐng)使用下列 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD UNIQUE (Id_P)
如需命名 UNIQUE 約束钥顽,并定義多個(gè)列的 UNIQUE 約束,請(qǐng)使用下面的 SQL 語(yǔ)法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
撤銷 UNIQUE 約束
如需撤銷 UNIQUE 約束靠汁,請(qǐng)使用下面的 SQL:
MySQL:
ALTER TABLE Persons DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access:
ALTER TABLE Persons DROP CONSTRAINT uc_PersonID
③ PRIMARY KEY 約束唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每條記錄耳鸯。
主鍵必須包含唯一的值湿蛔。
主鍵列不能包含 NULL 值膀曾。
每個(gè)表都應(yīng)該有一個(gè)主鍵县爬,并且每個(gè)表只能有一個(gè)主鍵。
表單主鍵
1添谊、數(shù)據(jù)庫(kù)的每張表只能有一個(gè)主鍵财喳,不可能有多個(gè)主鍵。
2斩狱、所謂的一張表多個(gè)主鍵耳高,我們稱之為聯(lián)合主鍵。
注:聯(lián)合主鍵:就是用多個(gè)字段一起作為一張表的主鍵所踊。
3泌枪、主鍵的主鍵的作用是保證數(shù)據(jù)的唯一性和完整性,同時(shí)通過(guò)主鍵檢索表能夠增加檢索速度秕岛。
SQL PRIMARY KEY Constraint on CREATE TABLE
下面的 SQL 在 "Persons" 表創(chuàng)建時(shí)在 "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)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如果需要命名 PRIMARY KEY 約束碌燕,以及為多個(gè)列定義 PRIMARY KEY 約束(即定義復(fù)合主鍵),請(qǐng)使用下面的 SQL 語(yǔ)法:
MySQL / SQL Server / Oracle / MS Access:
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)
)
SQL PRIMARY KEY Constraint on ALTER TABLE
如果在 表已存在 的情況下為 "Id_P" 列創(chuàng)建 PRIMARY KEY 約束继薛,請(qǐng)使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD PRIMARY KEY (Id_P)
如果需要命名 PRIMARY KEY 約束修壕,以及為多個(gè)列定義 PRIMARY KEY 約束,請(qǐng)使用下面的 SQL 語(yǔ)法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD
CONSTRAINT pk_PersonID PRIMARY KEY
(Id_P,LastName)
注釋:如果您使用 ALTER TABLE 語(yǔ)句添加主鍵遏考,必須把主鍵列聲明為不包含 NULL 值(在表首次創(chuàng)建時(shí))慈鸠。
撤銷 PRIMARY KEY 約束
如需撤銷 PRIMARY KEY 約束,請(qǐng)使用下面的 SQL:
MySQL:
ALTER TABLE Persons DROP PRIMARY KEY
SQL Server / Oracle / MS Access:
ALTER TABLE Persons DROP CONSTRAINT pk_PersonID
④ FOREIGN KEY 約束
一個(gè)表中的 FOREIGN KEY 指向另一個(gè)表中的 PRIMARY KEY灌具。
讓我們通過(guò)一個(gè)例子來(lái)解釋外鍵青团。請(qǐng)看下面兩個(gè)表:
"Persons" 表:
Id_P | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
"Orders" 表:
Id_O | OrderNo | Id_P |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
請(qǐng)注意,"Orders" 中的 "Id_P" 列指向 "Persons" 表中的 "Id_P" 列咖楣。
"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY督笆。
"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 約束用于預(yù)防破壞表之間連接的動(dòng)作截歉。
FOREIGN KEY 約束也能防止非法數(shù)據(jù)插入外鍵列胖腾,因?yàn)樗仨毷撬赶虻哪莻€(gè)表中的值之一。
SQL FOREIGN KEY Constraint on CREATE TABLE
下面的 SQL 在 "Orders" 表創(chuàng)建時(shí)為 "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)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
如果需要命名 FOREIGN KEY 約束瘪松,以及為多個(gè)列定義 FOREIGN KEY 約束咸作,請(qǐng)使用下面的 SQL 語(yǔ)法:
MySQL / SQL Server / Oracle / MS Access:
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)
)
SQL FOREIGN KEY Constraint on ALTER TABLE
如果在 "Orders" 表已存在的情況下為 "Id_P" 列創(chuàng)建 FOREIGN KEY 約束,請(qǐng)使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
如果需要命名 FOREIGN KEY 約束宵睦,以及為多個(gè)列定義 FOREIGN KEY 約束记罚,請(qǐng)使用下面的 SQL 語(yǔ)法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
撤銷 FOREIGN KEY 約束
如需撤銷 FOREIGN KEY 約束,請(qǐng)使用下面的 SQL:
MySQL:
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders
⑤ CHECK 約束用于限制列中的值的范圍壳嚎。
如果對(duì)單個(gè)列定義 CHECK 約束桐智,那么該列只允許特定的值末早。
如果對(duì)一個(gè)表定義 CHECK 約束,那么此約束會(huì)在特定的列中對(duì)值進(jìn)行限制说庭。
SQL CHECK Constraint on CREATE TABLE
下面的 SQL 在 "Persons" 表創(chuàng)建時(shí)為 "Id_P" 列創(chuàng)建 CHECK 約束然磷。CHECK 約束規(guī)定 "Id_P" 列必須只包含大于 0 的整數(shù)。
My SQL:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如果需要命名 CHECK 約束刊驴,以及為多個(gè)列定義 CHECK 約束姿搜,請(qǐng)使用下面的 SQL 語(yǔ)法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)
SQL CHECK Constraint on ALTER TABLE
如果在表已存在的情況下為 "Id_P" 列創(chuàng)建 CHECK 約束,請(qǐng)使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD CHECK (Id_P>0)
如果需要命名 CHECK 約束捆憎,以及為多個(gè)列定義 CHECK 約束舅柜,請(qǐng)使用下面的 SQL 語(yǔ)法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
撤銷 CHECK 約束
如需撤銷 CHECK 約束,請(qǐng)使用下面的 SQL:
SQL Server / Oracle / MS Access:
ALTER TABLE Persons DROP CONSTRAINT chk_Person
MySQL:
ALTER TABLE Persons DROP CHECK chk_Person
⑥ DEFAULT 約束用于向列中插入默認(rèn)值躲惰。
如果沒(méi)有規(guī)定其他的值致份,那么會(huì)將默認(rèn)值添加到所有的新記錄。
SQL DEFAULT Constraint on CREATE TABLE
下面的 SQL 在 "Persons" 表創(chuàng)建時(shí)為 "City" 列創(chuàng)建 DEFAULT 約束:
My SQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
通過(guò)使用類似 GETDATE() 這樣的函數(shù)础拨,DEFAULT 約束也可以用于插入系統(tǒng)值:
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()
)
SQL DEFAULT Constraint on ALTER TABLE
如果在表已存在的情況下為 "City" 列創(chuàng)建 DEFAULT 約束氮块,請(qǐng)使用下面的 SQL:
MySQL:
ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'
SQL Server / Oracle / MS Access:
ALTER TABLE Persons ALTER COLUMN City SET DEFAULT 'SANDNES'
撤銷 DEFAULT 約束
如需撤銷 DEFAULT 約束,請(qǐng)使用下面的 SQL:
MySQL:
ALTER TABLE Persons ALTER City DROP DEFAULT
SQL Server / Oracle / MS Access:
ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT