MySQL深度知識三(摘自sql官方文檔)

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容