SQL Server初識(語言基礎及數據定義功能)

一.Sql Management的簡單的使用:
1.第一次運行默認windows混合模式直接點擊鏈接sql

clipboard.png

2.建立一個數據庫數據庫

clipboard.png

粘貼如下代碼到查詢窗口windows

USE master
GO
IF NOT EXISTS (
   SELECT name
   FROM sys.databases
   WHERE name = N'TutorialDB'
)
CREATE DATABASE [TutorialDB]
GO

點擊F5或者執行服務器

3.建立一個表
首先將master更改成以前建立的數據庫的名字
clipboard.png
而後在窗口裏面輸入以下sql語句學習

-- Create a new table called 'Customers' in schema 'dbo'
-- Drop the table if it already exists
IF OBJECT_ID('dbo.Customers', 'U') IS NOT NULL
DROP TABLE dbo.Customers
GO
-- Create the table in the specified schema
CREATE TABLE dbo.Customers
(
   CustomerId        INT    NOT NULL   PRIMARY KEY, -- primary key column
   Name      [NVARCHAR](50)  NOT NULL,
   Location  [NVARCHAR](50)  NOT NULL,
   Email     [NVARCHAR](50)  NOT NULL
);
GO

4.插入一個行編碼

-- Insert rows into table 'Customers'
INSERT INTO dbo.Customers
   ([CustomerId],[Name],[Location],[Email])
VALUES
   ( 1, N'Orlando', N'Australia', N''),
   ( 2, N'Keith', N'India', N'keith0@adventure-works.com'),
   ( 3, N'Donna', N'Germany', N'donna0@adventure-works.com'),
   ( 4, N'Janet', N'United States', N'janet1@adventure-works.com')
GO

5.查看查詢結果spa

-- Select rows from table 'Customers'
SELECT * FROM dbo.Customers;

clipboard.png
這裏能夠更改顯示方式和保存結果.net

clipboard.png

6.更改查詢窗口的服務器鏈接code

clipboard.png

注意:這並無改變你的服務器對象資源管理器鏈接,只是當前查詢窗口。
二者之間的區別:否容許鏈接到數據庫引擎」和「登陸」的區別--轉載自CSDN的xcntime。對象

(舒適提示:必定要選擇本身要操做的數據庫而後選中所須要的代碼區域再點擊執行!)

下面正式開始SQL的學習

一. SQL包含的主要動詞

1.數據定義:

CREATE (建立)、DROP(刪除)、ALTER(修改)

2.數據查詢:

SELECT (查詢出數據,也可用於變量賦值)

3.數據操做:

INSERT(插入)、UPDATE(更新)、DELETE(刪除)

4.數據控制:

GRANT(受權)、REVOKE(回收權限)、DENY(拒絕權限)

二. 經常使用的SQL的數據類型
1.精確數字

數據類型 範圍 存儲
bigint -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807 8 字節
int -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) 4 字節
smallint -2^15 (-32,768) 到 2^15-1 (32,767) 2 字節
tinyint 0 到 255 1 字節
bit 能夠取值爲 一、0 或 NULL 的 integer 數據類型。 1(2)個字節

2.近似數字

float -1.79E + 308 至 -2.23E - 30八、0 以及 2.23E - 308 至 1.79E + 308 8 字節
realt -3.40E + 38 至 -1.18E - 3八、0 以及 1.18E - 38 至 3.40E + 38 4 字節

3.日期和時間

datetime 存儲從1753年1月1日到9999年12月31日的日期和時間數據,精確到百分之三秒 8 字節
smalldatetime 存儲從1900年1月1日到2079年6月6日的日期和時間數據,精確到分鐘 4 字節

4.字符串

char(n) char:字符型,存儲指定長度的定長非統一編碼型的數據,必須指定列寬,列寬最大爲8000 個字符
varchar(n) 字符型,存儲非統一編碼型字符數據,數據類型爲變長,要指定該列的最大長度,存儲的長度不是列長,而是數據的長度
text 字符型,存儲大量的非統一編碼型字符數據

5.Unicode 字符串

nchar(n) 統一編碼字符型,存儲定長統一編碼字符型數據,能存儲4000種字符,統一編碼用雙字節結構來存儲每一個字符
nvarchar(n) 統一編碼字符型,用做變長的統一編碼字符型數據
ntext 統一編碼字符型,用來存儲大量的統一編碼字符型數據

6.二進制字符串

binary(n) 二進制數據類型,存儲可達8000 字節長的定長的二進制數據
varbinary(n) 二進制數據類型,用來存儲可達8000 字節長的變長的二進制數據
image 二進制數據類型,用來存儲變長的二進制數據

基本表的定義和刪除

注意:默認的sql語言不區分大小寫。
1.

CREATE TABLE<表名>()
 <列名> 數據類型[列級完整性的約束定義]
 {,<列名> 數據類型[列級完整性約束定義]...}
 [,表級完整性約束定義])

值得提的一點是:
大部分完整性約束都既能夠在「列級完整性約束定義」出定義,也能夠在「表級完整性約束定義」,但有些涉及多個列的完整性約束必須在「表級完整性約束定義」

文法描述經常使用符號解釋(在sql語法中並不輸入):
'[]'表示內容是可選的
'{}'與'...'一塊兒表示能夠出現0次或者屢次
'|'表示在多個短語中選擇一個,好比:term1|term2|trem3

在列級完整性約束能夠定義以下的約束

  • NOT NULL:限制列的取值非空
  • DEFAULT:指定列的默認值
  • UNIQUE:限制列的取值不能重複
  • CHECK:限制列的取值範圍
  • PRIMARY KEY:指定本列的主碼
  • FOREIGN KEY:定義本列爲引用其餘表的外碼

表級完整性約束除了NOT NULL和DEFAULT不能定義外其餘約束均可以。
如下須要注意幾點:
一.若是check約束定義多列之間的取值約束則只能定義在表級完整性約束定義
二.若是在"表級完整性約束定義"處定義主碼,則主碼列要用括號括起來,即:PRIMARY KEY(列 1{[,列 2]*});
三.若是在"表級完整性約束定義"處定義外碼,則FOREIGN KEY和<列名>均不能省略。

2.定義主碼約束
若是是在列級完整性約束處定義主碼,則語法格式爲:

<列名> 數據類型 PRIMARY KEY[(<列名> [,....n])]

若是是在表級完整性約束處定義主碼,則語法格式爲:

PRIMARY KEY(<列名> [,...n])

3.定義外碼的約束
通常狀況下外碼是單列的,他能夠定義在列級完整性約束處,也能夠定義在表級完整性約束處。定義外碼的語法格式爲:

[FOREIGN KEY(<列名>)] REFERENCES <外表名>(<外表列名>)
[ON DELETE { CASCADE |NO ACTION }]
[ON UODATE { CASCADE |NO ACTION }]

其中各項含義爲:

  • ON DELETE CASCADE:級聯刪除。表示當刪除主表中的記錄時,若是在子表之中有對這些記錄的主碼值的引用,則一塊兒刪除這些記錄。
  • ON DELETE NO ACTION:限制刪除。表示當刪除主表的記錄時,若是在子表中有對這些記錄的主碼值的引用,則拒絕刪除主表中的記錄。
  • ON UODATE CASCADE:級聯更新。表示當更新主表中有子表引用的列值時,若是在子表中有對這個列的值的引用,則一塊兒更改。
  • ON UODATE NO ACTION:限制更新。表示當更新主表中的有子表引用的列值時,若是在子表中有對這個列值的引用,則拒絕更改主表的值

舉例

建立三張表:

代碼:
CREATE TABLE Student(
sno  char(7)      PRIMARY KEY,/*在列級完整性約束處定義主碼的約束*/
Sname char(10)    NOT NULL,
Ssex char(2),
Sage tinyint,
Sdept char(20)
)

CREATE TABLE COURES(
Cno  char(6)     NOT NULL,
Cname char(20)   NOT NULL,
Credit tinyint,
Semester tinyint, 
PRIMARY KEY(cno)            /*在表級完整性約束處定義主碼的約束*/  
)

CREATE TABLE SC (
Sno char(7) NOT NULL,
Cno char(6) NOT NULL,
Grade tinyint,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
)

刪除表

SQL語句爲:

DROP TABLE  <表名> {[, <表名>]...}

例如刪除test表:

DROP TABLE test

修改表結構

若是須要添加列刪除列或者修改列定義,實現添加刪除約束功能,則可使用ALTER TABLE 語句實現。
alter table的語法:

ALTER TABLE<表名>
[ ALTER COLUMN <列名>新數據類型]      --修改列的定義
| [ADD <列名>數據類型約束定義]         --添加新的列
| [DROP COLUMN<列名>]                --刪除列
| [ADD [constraint <約束名>] 約束定義]--添加約束
| [DROP [constraint] <約束名>]       --刪除約束

舉例:
添加"專業"這個新列

ALTER TABLE  Student
ADD Spec char(10) NULL

修改類型爲char(20)

ALTER TABLE  Student
ADD COLUMN Spec char(20)

刪除該列

ALTER TABLE  Student
DROP COLUMN Spec

添加和刪除約束在後面會提到

數據的完整性

1.列級約束
主要是對列的數據類型,數據格式(學號各個位所表明的意義),取值範圍(學生成績取值範圍)和取值集合,是否能爲空值的約束。
2.元組約束
元組約束指元組各個字段之間的相互約束,如開始日期小於結束日期。
3.關係約束
若干個元組之間,關係之間的聯繫的約束。學號的取值不能重複也不能取空值,學生選課表的學號要受學生表中的學號約束。

實現數據的完整性

1.主碼約束
添加主碼約束注意:

  • 每一個表只有能有一個PRIMARY KEY約束
  • 用PRIMARY KEY 約束的列取值不能有重複,並且不容許有空值。

語法格式:

ALTER TABLE 表名
     ADD [ CONSTRAINT <約束名>]  PRIMARY KEY (<列名> [,... n])

舉例:對僱員表和工做表分別添加主碼約束

ALTER TABLE 僱員表
 ADD CONSTRAINT PK_EMP PRIMARY KEY(僱員編號)
ALTER TABLE 工做表
 ADD CONSTRAINT PK_JOB PRIMARY KEY(工做編號)

2.UNIQUE約束
限制一個列中不能有重複的值

  • UNIQUE約束的列容許有一個空值;(主碼約束不容許)
  • 一個表中能夠定義多個UNIQUE約束;(主碼只能定義一個)
  • 能夠在多個列上定義一個UNIQUE約束,表示這些組合起來不能有重複值。

語法:

ALTER TABLE 表名
 ADD [CONSTRAINT <約束名>]  UNIQUE(<列名> [, ....n])

爲僱員表「電話號碼」列添加UNIQUE約束。

ALTER TABLE 僱員表
 ADD CONSTRAINT UK_UID UNIQUE (電話號碼)

3.外碼約束
注意:外碼所引用的列必須是又primary key約束的或者unique約束定義的列。
語法:

ALTER TABLE 表名
ADD [CONSTRIANT <約束名>] FOREIGN KEY(<列名>) REFERENCES 引用表名(<列名>)

爲僱員表的工做編號添加外碼引用約束,此列引用工做表的工做編號列

ALTER TABLE 僱員表
ADD CONSTRAINT JOB_ID FOREIGN KEY (工做編號)REFERENCES 工做表(工做編號)

4.default約束

用於初始化數據

ALTER TABLE  表名
ADD [CONSTRAINT <約束名>] DEFAULT 默認值 FOR 列名

設置默認工資爲1000

ALTER TABLE 僱員表
ADD CONSTRAINT DEFAULT 1000 FOR 工資

5.CHECK約束

限制值的取值範圍,讓每個數據都有意義

語法:

ALTER TABLE 表名
 ADD [CONSTRAINT<約束名>] CHECK (邏輯表達式)

在僱員表中添加員工的工資大於1000

ALTER TABLE 僱員表
   ADD CONSTRAINT CHK_Salary CHECK(工資>=1000)

在工做表中添加最低工資小於等於最大工資

ALTER TABLE 工做表
   ADD CONSTRAINT CHK_job_Salary CHECK(最低工資<=最高工資)

上述這些約束均可以在定義表時同時定義

CREATE TABLE 工做表(
    工做編號 char(8) PRIMARY KEY,
    最低工資 int,
    最高工資 Int,
    CHECK (最低工資<=最高工資)
    )
  
CREATE TABLE 僱員表(
 僱員編號 char(7) primary key,
 僱員名  char(10),
 工做編號 char(8) REFERENCES 工做表(工做編號),
 工資  int DEFAULT 1000 CHECK(工資>=1000),
 電話號碼 char(8)NOT NULL UNIQUE
)
相關文章
相關標籤/搜索