麻辣家族討論版版's Archiver

小誌 發表於 2010-5-17 18:37

(PHP+IIS+MsSQL教學第33篇) 使用DDL指令

[color=Red]DDL:資料定義語言(Data Definition Language),用來建立與刪除資料庫、資料表…等的SQL指令群。[/color]

[color=DarkOrange][size=5][b]建立與卸除資料庫[/b][/size][/color]
要在前端的PHP程式中建立後端SQL Server控管的新資料庫,必須使用DDL指令群中的「Create」指令:
創建資料庫[code]Create DataBase 新資料庫名[/code]例如:利用前端PHP程式中的Command物件執行Create指令,於後端SQL Server新增一個名為「PHP測試」的新資料庫:
[attach]601[/attach][code]<?
    $conn = mssql_connect("127.0.0.1", "sa", "12345");
      //建立SQL命令字串
      $SQL="Create DataBase PHP測試";
      //執行資料庫建立
     mssql_query($SQL);
?>[/code]要在後端SQL Server中建立新資料庫,也就是使用CREATE DATABASE指令(),權限是預設給sysadmin和dbcreator固定伺服器角色的成員,因此,並非每個登入SQL Serve的帳號都可以建立新資料庫,也就是用不同的登入帳號就有不同存取資料和執行功能的權限。

在上例中,我們使用的登入帳號為「sa(系統管理者)」,因此擁有最大的SQL Server使用權限,所以能在後端SQL Server中建立新資料庫,小誌建議您,如果要讓別人使用您的SQL Server機器,最好建立一個有權限限制的帳號,不要將系統管理者帳號與密碼隨便交給別人使用!


要透過前端PHP程式中的Command物件卸除後端SQL Server中的資料庫必須使用使用DDL指令群中的「Drop」指令:
卸離資料庫[code]Drop DataBase 資料庫名[/code]例如:卸除上一個範例於後端SQL Server新增的「PHP測試」資料庫:[code]<?
    $conn = mssql_connect("127.0.0.1", "sa", "12345");
      //建立SQL命令字串
      $SQL="DROP DataBase PHP測試";
      //執行資料庫卸除
     mssql_query($SQL);
?>[/code]

小誌 發表於 2010-5-17 18:42

[color=darkorange][size=5][b]建立與刪除資料表[/b][/size][/color]
如果我們要利用前端的PHP程式建立資料庫中的資料表,則可使用DDL指令群中的「Create Table」指令,指令格式如下:
建立資料表[code]CREATE TABLE
    [ database_name.[ owner ] . | owner. ] table_name
       ( { < column_definition >
        | column_name AS computed_column_expression
        | < table_constraint > ::= [ CONSTRAINT constraint_name ] }
            | [ { PRIMARY KEY | UNIQUE } [ ,...n ]
    ) [/code]看不懂?沒關係,小誌把它白話的簡單說明如下的格式:
建立資料表[code]CREATE TABLE
    要新增的資料表名稱
       (
        欄位名1 資料型態 Default 預設值 是否允許NULL,
欄位名2 資料型態 Default 預設值 是否允許NULL,

    ) [/code]例如:[code]Create Table
PHP測試資料表
(
PersonID char(10) Not NULL,
Name NvarChar(10),_
Email NvarChar(100) Default '無' Not NULL
)[/code]小誌拿一句欄位定義敘述來說明:[code]Email NvarChar(100) Default '無' Not NULL_[/code][list]
[*]Email【欄位名稱】:建立資料表中的某個欄位抬頭。[*]NvarChar(100)【資料型態】:定義存放於欄位內資料的資料型態與存放資料的長度。[*]Default ‘無’【欄位預設值】:當新增資料錄時,若該欄位沒有資料輸入,則以「Default」關鍵後的資料值填入欄位內。[*]Not NULL【是否允許無值輸入】:若於欄位定義中加入「Not NULL」,則新增資料錄時,該欄位一定要輸入。[/list]


[color=magenta][size=4][b]實做學習:[/b][/size][/color]
於之前範例所建立的「PHP測試」資料庫中新增一個名為「PHP測試資料表」的資料表,資料表中的欄位如下表所示:
[table]
[tr][td=1,1,96][p=30, 2, center][b][size=3][font=細明體]名稱[/font][color=white][/color][/size][/b][/p][/td][td=1,1,103][p=30, 2, center][b][size=3][font=細明體]資料型態[/font][color=white][/color][/size][/b][/p][/td][td=1,1,103][p=30, 2, center][b][size=3][font=細明體]資料長度[/font][color=white][/color][/size][/b][/p][/td][td=1,1,129][p=30, 2, center][b][size=3][font=細明體]是否允許無值[/font][color=white][/color][/size][/b][/p][/td][td=1,1,78][p=30, 2, center][b][size=3][font=細明體]預設值[/font][color=white][/color][/size][/b][/p][/td][/tr]
[tr][td=1,1,96][p=30, 2, left][font=Courier New][color=#000000][size=2]PersonID[/size][/color][/font][/p][/td][td=1,1,103][p=30, 2, left][font=Courier New][color=#000000][size=2]Char[/size][/color][/font][/p][/td][td=1,1,103][p=30, 2, center][font=Courier New][color=#000000][size=2]10[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, center][color=#000000][size=2][font=細明體]否[/font][/size][/color][/p][/td][td=1,1,78][p=30, 2, center][font=Courier New][size=2][color=#000000] [/color][/size][/font][/p][/td][/tr]
[tr][td=1,1,96][p=30, 2, left][font=Courier New][color=#000000][size=2]Name[/size][/color][/font][/p][/td][td=1,1,103][p=30, 2, left][font=Courier New][color=#000000][size=2]NvarChar[/size][/color][/font][/p][/td][td=1,1,103][p=30, 2, center][font=Courier New][color=#000000][size=2]10[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, center][color=#000000][size=2][font=細明體]是[/font][/size][/color][/p][/td][td=1,1,78][p=30, 2, center][color=#000000][size=2][font=Courier New]“[/font][font=細明體]無[/font][font=Courier New]”[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,96][p=30, 2, left][font=Courier New][color=#000000][size=2]Email[/size][/color][/font][/p][/td][td=1,1,103][p=30, 2, left][font=Courier New][color=#000000][size=2]Nvarchar[/size][/color][/font][/p][/td][td=1,1,103][p=30, 2, center][font=Courier New][color=#000000][size=2]100[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, center][color=#000000][size=2][font=細明體]否[/font][/size][/color][/p][/td][td=1,1,78][p=30, 2, center][font=Courier New][size=2][color=#000000] [/color][/size][/font][/p][/td][/tr]
[/table]

[color=Red][b]注意:[/b]必須先指明預設的操作資料庫為「PHP測試」,當我們以『Create Table』指令建立新資料表時,這新增的資料表才會建立到「PHP測試」資料庫中,若未加以指定資料庫,則新增的資料表將會建立於Connection物件連結登入帳號所預設的資料庫中。[/color]

[attach]602[/attach][code]<?
$conn = mssql_connect("127.0.0.1", "sa", "12345");
if(@mssql_select_db("PHP測試", $conn))
{
//資料庫存在,建立SQL命令字串
$SQL="Create Table " .
"PHP測試資料表 " .
"(" .
"PersonID char(10) Not NULL," .
"Name NvarChar(10)," .
"Email NvarChar(100) Default '無' not NULL" .
")";

//建立資料表
if (@mssql_query($SQL))
{
echo "資料表建立成功\" ;
}
else
{
echo "資料表建立失敗或資料表已經存在";
}
}
else
{
//建立SQL命令字串
$SQL="CREATE DataBase PHP測試";
//執行資料庫建立
mssql_query($SQL);
//資料庫已建立後存在,建立新增資料表命令字串
$SQL="Create Table " .
"PHP測試資料表 " .
"(" .
"PersonID char(10) Not NULL," .
"Name NvarChar(10)," .
"Email NvarChar(100) Default '無' not NULL" .
")";

//切換資料庫
mssql_select_db("PHP測試", $conn);

//建立資料表
if (@mssql_query($SQL))
{
echo "資料表建立成功\" ;
}
else
{
echo "資料表建立失敗或資料表已經存在";
}
}
?>
[/code]

小誌 發表於 2010-5-17 18:46

[color=magenta][size=4][b]實做練習:[/b][/size][/color]
於之前範例所建立的「PHP測試」資料庫中新增一個名為「員工名單」的資料表,資料表中的欄位如下表所示:
[table]
[tr][td=1,1,129][p=30, 2, center][b][size=2]名稱[/size][/b][/p][/td][td=1,1,129][p=30, 2, center][b][size=2]資料型態[/size][/b][/p][/td][td=1,1,129][p=30, 2, center][b][size=2]資料長度[/size][/b][/p][/td][td=1,1,129][p=30, 2, center][b][size=2]是否允許Null[/size][/b][/p][/td][/tr]
[tr][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=細明體]姓名[/font][/size][/color][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2]nvarchar[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2](8)[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=細明體]非[/font][font=Courier New] Null ([/font][font=細明體]空值[/font][font=Courier New])[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=細明體]現任職稱[/font][/size][/color][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2]nvarchar[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2](10)[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=Courier New]NULL ([/font][font=細明體]空值[/font][font=Courier New])[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=細明體]部門代號[/font][/size][/color][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2]nvarchar[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2](10)[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=細明體]非[/font][font=Courier New] Null ([/font][font=細明體]空值[/font][font=Courier New])[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=細明體]縣市[/font][/size][/color][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2]nvarchar[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2](10)[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=Courier New]NULL ([/font][font=細明體]空值[/font][font=Courier New])[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=細明體]地址[/font][/size][/color][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2]nvarchar[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2](50)[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=Courier New]NULL ([/font][font=細明體]空值[/font][font=Courier New])[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=細明體]電話[/font][/size][/color][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2]nvarchar[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2](10)[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=Courier New]NULL ([/font][font=細明體]空值[/font][font=Courier New])[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=細明體]郵遞區號[/font][/size][/color][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2]nvarchar[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2](5)[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=Courier New]NULL ([/font][font=細明體]空值[/font][font=Courier New])[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=細明體]目前月薪資[/font][/size][/color][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2]smallint[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][size=2][color=#000000] [/color][/size][/font][/p][/td][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=Courier New]NULL ([/font][font=細明體]空值[/font][font=Courier New])[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=細明體]年假天數[/font][/size][/color][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][color=#000000][size=2]smallint[/size][/color][/font][/p][/td][td=1,1,129][p=30, 2, center][font=Courier New][size=2][color=#000000] [/color][/size][/font][/p][/td][td=1,1,129][p=30, 2, left][color=#000000][size=2][font=Courier New]NULL ([/font][font=細明體]空值[/font][font=Courier New])[/font][/size][/color][/p][/td][/tr]
[/table]

完成後的資料表規劃應該如下圖所示:
[attach]603[/attach][code]<?
$conn = mssql_connect("127.0.0.1", "sa", "12345");
if(@mssql_select_db("PHP測試", $conn))
{
//資料庫存在,建立SQL命令字串
$SQL="CREATE TABLE 員工名單 (" .
"姓名 nvarchar (8) NOT NULL ," .
"現任職稱 nvarchar (10) NULL ," .
"部門代號 nvarchar (10) NOT NULL ," .
"縣市 nvarchar (10) NULL ," .
"地址 nvarchar (50) NULL ," .
"電話 nvarchar (10) NULL ," .
"郵遞區號 nvarchar (5) NULL ," .
"目前月薪資 smallint NULL ," .
"年假天數 smallint NULL " .
")";

//建立資料表
if (@mssql_query($SQL))
{
echo "資料表建立成功\" ;
}
else
{
echo "資料表建立失敗或資料表已經存在";
}
}
else
{
//建立SQL命令字串
$SQL="CREATE DataBase PHP測試";
//執行資料庫建立
mssql_query($SQL);
//資料庫已建立後存在,建立新增資料表命令字串
$SQL="CREATE TABLE 員工名單 (" .
"姓名 nvarchar (8) NOT NULL ," .
"現任職稱 nvarchar (10) NULL ," .
"部門代號 nvarchar (10) NOT NULL ," .
"縣市 nvarchar (10) NULL ," .
"地址 nvarchar (50) NULL ," .
"電話 nvarchar (10) NULL ," .
"郵遞區號 nvarchar (5) NULL ," .
"目前月薪資 smallint NULL ," .
"年假天數 smallint NULL " .
")";

//切換資料庫
mssql_select_db("PHP測試", $conn);

//建立資料表
if (@mssql_query($SQL))
{
echo "資料表建立成功\" ;
}
else
{
echo "資料表建立失敗或資料表已經存在";
}
}
?>
[/code]

小誌 發表於 2010-5-17 18:47

要透過前端PHP程式中的Command物件刪除後端SQL Server中的資料庫必須使用使用DDL指令群中的「Drop Table」指令:
刪除資料表[code]Drop Table 資料表名[/code]例如:刪除之前範例於後端SQL Server「PHP測試」資料庫中新增的「PHP測試資料表」:[code]<?
    $conn = mssql_connect("127.0.0.1", "sa", "12345");
      //建立SQL命令字串
      $SQL="Drop Table PHP測試資料表";
      //執行資料庫建立
     mssql_query($SQL);
?>[/code]

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供