创建数据库和表
一、創(chuàng)建數(shù)據(jù)庫(kù)
我們知道表是屬于架構(gòu)的,而架構(gòu)又是屬于數(shù)據(jù)庫(kù)的。要在SQL Server環(huán)境中創(chuàng)建一個(gè)名為TestDB的數(shù)據(jù)庫(kù),可以運(yùn)行以下代碼:
IF DB_ID('TestDB') IS NULLCREATE DATABASE TestDB;如果不存在名為TestDB的數(shù)據(jù)庫(kù),這段代碼就會(huì)創(chuàng)建一個(gè)新的。DB_ID函數(shù)接受一個(gè)數(shù)據(jù)庫(kù)名稱作為輸入,返回它的內(nèi)部數(shù)據(jù)庫(kù)ID。如果輸入名稱指定的數(shù)據(jù)庫(kù)不存在,這個(gè)函數(shù)將返回NULL。這是一種檢查數(shù)據(jù)庫(kù)是否存在的簡(jiǎn)單方法。注意:在這個(gè)簡(jiǎn)單的CREATE DATABASE語(yǔ)句中,采用了默認(rèn)的文件設(shè)置(例如,區(qū)域和初始大小)。在產(chǎn)品環(huán)境中,通常應(yīng)該顯示指定所需要的數(shù)據(jù)庫(kù)和文件的設(shè)置。
在例子中使用的架構(gòu)是dbo,在每個(gè)數(shù)據(jù)庫(kù)中都會(huì)自動(dòng)創(chuàng)建這個(gè)架構(gòu)。當(dāng)用戶沒(méi)有默認(rèn)架構(gòu)顯示關(guān)聯(lián)到其他架構(gòu)時(shí),就會(huì)將這個(gè)dbo作為默認(rèn)架構(gòu)。
二、創(chuàng)建表
以下代碼在TestDB數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為Employees的表:
USE TestDBIF OBJECT_ID('dbo.Employees','U') IS NOT NULLDROP TABLE dbo.Employees;CREATE TABLE dbo.Employees(empid INT NOT NULL,firstname VARCHAR(30) NOT NULL,lastname VARCHAR(30) NOT NULL,hiredate DATETIME NOT NULL,mgrid INT NULL,ssn VARCHAR(20) NOT NULL,salary MONEY NOT NULL);USE語(yǔ)句將當(dāng)前的數(shù)據(jù)庫(kù)上下文切換為TestDB。在創(chuàng)建對(duì)象的腳本中加入U(xiǎn)SE語(yǔ)句,它的重要作用是確保要在正確的數(shù)據(jù)庫(kù)中創(chuàng)建對(duì)象。
IF語(yǔ)句調(diào)用調(diào)用OBJECT_ID函數(shù)來(lái)檢查當(dāng)前數(shù)據(jù)庫(kù)中是否已經(jīng)存在Employees表。OBJECT_ID函數(shù)接受一個(gè)對(duì)象名稱和類型作為它的輸入。這里,類型'U'代表用戶表。如果匹配給定輸入名稱和類型的對(duì)象存在,這個(gè)函數(shù)就會(huì)返回內(nèi)部的對(duì)象ID,否則返回NULL。如果該函數(shù)返回NULL,就可以知道檢查的數(shù)據(jù)庫(kù)對(duì)象是不存在的。在這個(gè)例子中,如果Employees表已經(jīng)存在,代碼就先刪除(DROP)這個(gè)表,接著再創(chuàng)建一個(gè)新的。當(dāng)然,也能夠選擇不同的處理辦法,例如,當(dāng)Employees表已經(jīng)存在時(shí),可以簡(jiǎn)單地不創(chuàng)建這個(gè)對(duì)象。
CREATE TABLE語(yǔ)句負(fù)責(zé)定義前面提到的關(guān)系的主題。在這個(gè)語(yǔ)句中先指定表的名稱,接著在圓括號(hào)中定義它的各個(gè)屬性(列)。注意表名使用了兩部分組成的名稱dbo.Employees。如果省略了架構(gòu)名稱,SQL Server將使用與運(yùn)行這段代碼的數(shù)據(jù)庫(kù)用戶相關(guān)聯(lián)的默認(rèn)架構(gòu)。
對(duì)于表的每個(gè)屬性,需要指定它的屬性名稱、數(shù)據(jù)類型和是否允許NULL數(shù)據(jù)值。在Employees表中,empid(雇員ID)和mgrid(經(jīng)理ID)定義為INT(4字節(jié)的整數(shù)類型);firstname、lastname和ssn(社會(huì)保險(xiǎn)號(hào),social security number)定義為VARCHAR(可變長(zhǎng)長(zhǎng)度的字符串類型,指定最多支持的字符個(gè)數(shù));hiredate定義為DATETIME,在SQL Server 2008中可以定義為DATE,DATE數(shù)據(jù)類型是SQL Server 2008新增的,salary定義為MONEY。
如果不顯示指定一個(gè)列是否允許NULL值,SQL Server則采用默認(rèn)值。ANSI規(guī)定:如果不指定一個(gè)列是否允許NULL值,則假設(shè)應(yīng)該是NULL(允許NULL值)。但SQL Server提供了一些設(shè)置可以改變這一默認(rèn)行為。我們強(qiáng)烈推薦在這種情況下要顯示指定設(shè)置,不要依賴其默認(rèn)值。而且,也強(qiáng)烈推薦將列定義為NOT NULL,除非有明顯的原因而需要支持NULL。即使認(rèn)為一個(gè)列不允許NULL值,但沒(méi)有用NOT NULL約束加以限制時(shí),NULL值仍然可以插入這個(gè)列中。在Employees表中,除了mgrid列,其他所有列都定義為NOT NULL。mgrid屬性為NULL值表示雇員沒(méi)有經(jīng)理,例如企業(yè)的CEO這種情況。
轉(zhuǎn)載于:https://www.cnblogs.com/ShaYeBlog/archive/2012/09/20/2695499.html
總結(jié)
- 上一篇: 深入浅出SQL Server中的死锁
- 下一篇: POJ 1059