1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          SQL命令 CREATE TABLE

          來源:互聯網轉載 時間:2024-01-29 08:01:57

          唯一字段約束

          唯一字段約束對多個字段的組合值施加唯一值約束。它具有以下語法:

          CONSTRAINT uname UNIQUE (f1,f2)

          此約束指定字段f1f2的值組合必須始終是唯一的,即使這兩個字段本身的值可能不是唯一的??梢詾榇思s束指定一個、兩個或多個字段。

          此約束中指定的所有字段都必須在字段定義中定義。如果在此約束中指定的字段沒有出現在字段定義中,則會生成SQLCODE-86錯誤。指定的字段應定義為非空。任何指定的字段都不應定義為唯一的,因為這會使指定此約束變得毫無意義。

          字段可以按任何順序指定。字段順序指定相應索引定義的字段順序。允許重復的字段名稱。雖然可以在唯一字段約束中指定單個字段名稱,但這與為該字段指定唯一數據約束在功能上是相同的。單字段約束確實提供了約束名稱以供將來使用。

          可以在表定義中指定多個唯一字段約束語句。約束語句可以在字段定義中的任何位置指定;按照慣例,它們通常放在已定義字段列表的末尾。

          約束名稱

          Constraint關鍵字和唯一字段約束名稱是可選的。以下各項在功能上等效:

          CONSTRAINT myuniquefields UNIQUE (name,dateofbirth)UNIQUE (name,dateofbirth)

          約束名唯一地標識約束,并且還用于派生相應的索引名。 建議指定約束名稱; 當使用ALTER TABLE命令從表定義中刪除約束時,需要此約束名。 約束名稱可以是任何有效的標識符; 如果指定為分隔符,則約束名可以包含".", "^", ",", "->"字符。

          ALTER TABLE無法刪除約束UNIQUE中列出的列。嘗試這樣做會生成SQLCODE-322錯誤。

          RowID記錄標識符

          在 SQL 中,每條記錄都由一個唯一的整數值標識,稱為 RowID。在 SQL 中,不需要指定 RowID 字段。創建表并指定所需的數據字段時,會自動創建 RowID 字段。此 RowID 在內部使用,但未映射到類屬性。默認情況下,它的存在僅在類投影到 SQL 表時可見。在這個投影的 SQL 表中,會出現一個額外的 RowID 字段。默認情況下,此字段命名為“ID”并分配給第 1 列。

          %PUBLICROWID

          默認情況下,RowID是隱藏和私有的。指定%PUBLICROWID關鍵字使RowID不會隱藏和公開。如果指定%PUBLICROWID關鍵字,則使用“not SqlRowIdPrivate”定義與表對應的類。此可選關鍵字可以在逗號分隔的表元素列表中的任何位置指定。ALTER TABLE不能用于指定%PUBLICROWID。

          如果RowID是公共的:

          • RowID值通過select *顯示。
          • RowID可以用作外鍵引用。
          • 如果沒有定義主鍵,RowID將被視為具有約束名稱RowIDField_As_PKey的隱式主鍵約束。
          • 如果沒有指定要復制的字段名,則不能使用該表將數據復制到重復表中。

          位圖擴展索引

          使用CREATE TABLE創建表時,缺省情況下, IRIS會自動定義相應類的位圖范圍索引。位圖區索引的SQL MapName%%DDLBEIndex:

          Index DDLBEIndex [ Extent, SqlName = "%%DDLBEIndex", Type = bitmap ];

          在以下任何情況下都不會創建該位圖范圍索引:

          • 該表被定義為臨時表。
          • 該表定義了顯式IDKEY索引。
          • 該表包含定義的標識字段,該字段沒有MINVAL=1。
          • $SYSTEM.SQL.Util.SetOption()方法DDLDefineBitmapExtent選項設置為0以覆蓋系統范圍的默認設置。要確定當前設置,請調用$SYSTEM.SQL.CurrentSettings()方法,該方法顯示a Do classes created by a DDL CREATE TABLE statement define a bitmap extent index。

          如果在創建位圖索引后,對自動定義位圖范圍索引的表調用CREATE BITMAPEXTENT INDEX,則先前定義的位圖范圍索引將重命名為CREATE BITMAPEXTENT INDEX語句指定的名稱。

          有關自動刪除現有位圖范圍索引的DDL操作,請參閱ALTER TABLE。

          IDENTITY標識字段

          SQL自動為每個表創建一個RowID字段,其中包含一個系統生成的整數,作為唯一的記錄id。 可選的IDENTITY關鍵字允許定義一個具有與RowID記id字段相同屬性的命名字段。 IDENTITY字段作為一個單字段IDKEY索引,其值是系統生成的唯一整數。

          定義標識字段可防止將主鍵定義為IDKEY。

          與任何系統生成的ID字段一樣,IDENTITY字段具有以下特征:

          • 每個表只能將一個字段定義為IDENTITY字段。 試圖為表定義多個IDENTITY字段會產生SQLCODE -308錯誤。
          • IDENTITY字段的數據類型必須是整數數據類型。 如果不指定數據類型,則將其數據類型自動定義為BIGINT。 可以指定任何整數數據類型,如integerSMALLINT; 建議使用BIGINT匹配RowID的數據類型。 接受任何指定的字段約束,如NOT NULLUNIQUE,但忽略。
          • 數據值由系統生成。 它們由唯一的非零正整數組成。
          • 默認情況下,IDENTITY字段數據值不能由用戶指定。 默認情況下,insert語句沒有也不能指定IDENTITY字段值。 嘗試這樣做會產生SQLCODE -111錯誤。 要確定是否可以指定IDENTITY字段值,調用$SYSTEM.SQL.Util.GetOption("IdentityInsert")方法; 默認值是0。要更改當前進程的此設置,請調用$SYSTEM.SQL.Util.SetOption()方法,如下所示:設置status=$SYSTEM.SQL.Util.SetOption(“IdentityInsert”,1,.oldval)。也可以在表定義中指定%CLASSPARAMETER ALLOWIDENTITYINSERT=1。指定ALLOWIDENTITYINSERT=1將覆蓋使用SetOption(“IdentityInsert”)應用的任何設置。
          • 不能在update語句中修改標識字段數據值。嘗試這樣做會生成SQLCODE-107錯誤。
          • 系統會自動將標識字段上的主鍵投影到ODBCJDBC。如果CREATE TABLEALTER TABLE語句在標識字段或包括標識字段的一組列上定義了主鍵約束或唯一約束,則會忽略約束定義,并且不會創建相應的主鍵或唯一索引定義。
          • select*語句確實返回表的標識字段。

          insert、updatedelete操作之后,可以使用LAST_IDENTITY函數返回最近修改的記錄的標識字段的值。如果未定義標識字段,LAST_IDENTITY將返回最近修改的記錄的RowID值。

          以下嵌入式SQL程序創建一個具有標識字段的表,然后在表中插入一條記錄,從而生成標識字段值:

          /// d ##class(PHA.TEST.SQLCommand).CreateTable5()ClassMethod CreateTable5(){    d $SYSTEM.Security.Login("_SYSTEM","SYS")    &sql(        CREATE TABLE Employee         (            EmpNum INT NOT NULL,            MyID   IDENTITY NOT NULL,            Name   char(30) NOT NULL,            CONSTRAINT EMPLOYEEPK PRIMARY KEY (EmpNum)        )    )    if SQLCODE '= 0 {        w !,"創建表錯誤是: ",SQLCODE     } else {        w !,"表已創建"     }    &sql(        insert INTO Employee         (            EmpNum,Name        )         select ID,Name FROM SQLUser.Person WHERE Age >= '25'    )    if SQLCODE '= 0 {        w !,"插入錯誤 error is: ",SQLCODE     } else {        w !,"插入到表中的記錄"     }}

          在本例中,主鍵(EmpNum)取自另一個表的ID字段。因此,EmpNum值是唯一的整數,但是(因為WHERE子句)它們的序列中可能包含空格。標識字段myid為每條記錄分配一個用戶可見的唯一順序整數。

          ROWERSION、SERIAL和AUTO_INCREMENT字段

          SQL提供三種類型的系統生成的整數計數器字段。這三種數據類型都是擴展%Library.BigInt數據類型類的子類。

          計數器類型

          計數器范圍

          自動增加

          當用戶提供的值為

          用戶提供的值

          重復的值

          類型字段

          計數器復位

          分片表支持

          AUTO_INCREMENT

          per-table

          insert

          NULL or 0

          允許,不影響系統計數器

          允許

          每個表一個

          截斷表

          Yes

          SERIAL

          per-serial計數器字段

          insert

          NULL or 0

          允許,可增加系統計數器

          Allowed

          multiple per table

          截斷表

          No

          ROWVERSION

          namespace-wide

          insert and update

          Not Allowed

          Not Allowed

          one per table

          not reset

          No

          下面的CREATE TABLE示例定義了這些字段:

          CREATE TABLE MyStudents (   Name VARCHAR(16) NOT NULL,   DOB DATE,   AutoInc BIGINT AUTO_INCREMENT,   Counter SERIAL,   RowVer ROWVERSION   )

          指定ROWVERSIONSERIAL關鍵字,而不是顯式的數據類型。 因此以下是有效的字段定義語法:MySerial SERIALMyRowVer ROWVERSION。

          AUTO_INCREMENT關鍵字在顯式數據類型之后指定。也可以使用%Library.AutoIncrement數據類型定義AUTO_INCREMENT字段。因此,以下是有效的字段定義語法:MyAutoInc %AutoIncrement, MyAutoInc %AutoIncrement AUTO_INCREMENT, or MyAutoInc INTEGER AUTO_INCREMENT。

          定義主鍵

          定義主鍵是可選的。定義表格時,IRIS會自動創建一個生成的字段,即RowID Field(默認名稱“ID”),它的作用是唯一的行標識符。在將每條記錄添加到表中時, IRIS會為該記錄的RowID字段分配一個唯一的不可修改的正整數??梢杂羞x擇地定義一個主鍵,該主鍵還用作唯一的行標識符。主鍵允許用戶定義對應用程序有意義的行標識符。例如,主鍵可以是員工ID字段、社會保險號、患者記錄ID字段或庫存庫存編號。

          可以使用PRIMARY KEY子句將一個字段(或一組字段)顯式定義為主記錄標識符。定義主鍵有三種語法形式:

          CREATE TABLE MyTable (Field1 INT PRIMARY KEY, Field2 INT)CREATE TABLE MyTable (Field1 INT, Field2 INT, PRIMARY KEY (Field1))CREATE TABLE MyTable (Field1 INT, Field2 INT, CONSTRAINT MyTablePK PRIMARY KEY (Field1))

          第一種語法將一個字段定義為主鍵;通過將其指定為主鍵,根據定義,該字段是唯一的,并且不為空。第二和第三種語法可用于單個字段主鍵,但允許包含多個字段的主鍵。例如,主鍵(Field1、Field2)。如果指定單個字段,則根據定義,此字段是唯一的,并且不為空。如果指定逗號分隔的字段列表,則每個字段都被定義為非NULL,但只要字段值的組合是唯一值,就可以包含重復值。第三種語法允許顯式地命名主鍵;前兩種語法形式生成一個主鍵名稱,如下所示:表名“PKEY”約束COUNT INTEGER。

          主鍵只接受唯一值,不接受NULL。(主鍵索引屬性不會根據需要自動定義;但是,它實際上是必需的,因為不能為主鍵字段歸檔或保存空值。)。主鍵的排序規則類型在字段本身的定義中指定。

          作為IDKEY的主鍵

          默認情況下,主鍵不是唯一的IDKEY索引。在許多情況下,這樣做更可取,因為它使能夠更新主鍵值、設置主鍵的排序規則類型等。在某些情況下,最好將主鍵定義為IDKEY索引。請注意,這會對主鍵的未來使用施加IDKEY限制。

          如果向現有字段添加主鍵約束,則該字段還可能自動定義為IDKEY索引。這取決于數據是否存在,以及通過以下方式之一建立的配置設置:

          • SQL SET OPTION PKEY_IS_IDKEY語句。
          • 系統范圍的$SYSTEM.SQL.Util.SetOption()方法配置選項DDLPKeyNotIDKey。要確定當前設置,請調用$SYSTEM.SQL.CurrentSettings(),它顯示的是通過DDL而不是ID鍵創建的主鍵;默認值為1。
          • 進入管理門戶,選擇系統管理,配置,SQL和對象設置,SQL。 查看通過DDL創建的表的將主鍵定義為ID鍵的當前設置。
            • 如果沒有選中復選框(默認情況下),則Primary Key不會成為類定義中的IDKEY索引。 使用非IDKEY的主鍵訪問記錄的效率顯著降低; 但是,這種類型的主鍵值是可以修改的。
            • 如果選中了復選框,當通過DDL指定Primary Key約束時,它將自動成為類定義中的IDKEY索引。 選擇了這個選項后,數據訪問更加有效,但是主鍵值一旦設置,就永遠不能修改。

          但是,如果在表中定義了IDENTITY字段,則不能將主鍵定義為IDKEY,即使使用了這些配置設置之一來建立將主鍵定義為IDKEY。

          IRIS支持作為IDKEY索引的一部分的屬性(字段)成為SqlComputed。 例如,父引用字段。 屬性必須是一個觸發的計算字段。 定義為SqlComputedIDKEY屬性僅在首次保存新Objectinsert操作時計算。 不支持update計算,因為作為IDKEY索引一部分的字段不能被更新。

          沒有主鍵

          在大多數情況下,應該顯式定義主鍵。但是,如果未指定主鍵, IRIS將根據以下規則嘗試使用另一個字段作為ODBC/JDBC投影的主鍵:

          1. 如果單個字段上有IDKEY索引,則將IDKEY字段報告為SQLPrimaryKey字段。
          2. 否則,如果使用SqlRowIdPrivate=0(默認值)定義類,則將RowID字段報告為SQLPrimaryKey字段。
          3. 否則,如果有IDKEY索引,則將IDKEY字段報告為SQLPrimaryKey字段。
          4. 否則,不報告SQLPrimaryKey。

          多個主鍵

          只能定義一個主鍵。默認情況下,當主鍵已經存在時, IRIS拒絕定義主鍵的嘗試,或者拒絕定義同一主鍵兩次,并發出SQLCODE-307錯誤。即使主鍵的第二個定義與第一個定義相同,也會發出SQLCODE-307錯誤。要確定當前配置,請調用$SYSTEM.SQL.CurrentSettings(),該函數顯示當鍵存在時允許通過DDL創建主鍵設置。默認值為0(否),這是建議的配置設置。如果此選項設置為1(是), IRIS將刪除現有的主鍵約束,并將最后指定的主鍵建立為表的主鍵。

          在管理門戶、系統管理、配置、SQL和對象設置中,通過選中忽略冗余DDL語句復選框,可以在系統范圍內設置此選項(以及其他類似的創建、更改和刪除選項)。

          例如,下面的CREATE TABLE語句:

          CREATE TABLE MyTable (f1 VARCHAR(16), CONSTRAINT MyTablePK PRIMARY KEY (f1))

          創建主鍵(如果不存在)。隨后的ALTER TABLE語句:

          ALTER TABLE MyTable ADD CONSTRAINT MyTablePK PRIMARY KEY (f1)

          生成SQLCODE-307錯誤。

          標簽:createtable-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          如何才能得到騰訊QQ公仔?你好!這是微信登錄的活動。您需要在手機上安裝微信應用程序,單擊我的,然后單擊登錄保存金幣。如果金幣夠了,你可以兌換或者畫QQ玩偶。大家還記得馬化騰的拍拍網嗎?大家都知道拍拍網是騰訊的購物網站。然而,即使有騰訊的堅強后盾,與同類淘寶網相比,其銷量也“慘不忍睹”。深圳哪有正版qq公仔買最好是南山或者是福田?不太清楚外面的商店在哪里能賣。我的QQ娃娃是騰訊公司和騰訊內部員工買的...

          北京到杭州高鐵里程數?從北京到杭州全程約1200公里。目前北京到杭州沒有直達線路,推薦19條中轉線路,分別是:G177、G197、C2079、G33、G35、G181、G37、G185、G187、C2559、G189、G191、G193、Z284、G133至G7613、G137。222北京到杭州高鐵多少公里,北京到杭州高鐵最新消息?北京到杭州的航班列表類別順序始發站末端的耗費時間的方案1G177細...

          whist翻頁筆的使用說明?PPT翻頁激光筆有接收器,插在電腦的USB接口上。一般會有說明,根據安裝直接使用即可。ppt翻頁筆怎么對碼?按住激光筆的翻頁鍵,打開激光筆的開關,將接收器插入電腦的usb接口,指示燈閃爍。松開向下翻頁按鈕,指示燈停止閃爍。如果配對成功,激光筆可以正常使用。ppt用激光筆不能切換怎么處理?激光翻頁筆一般用來直接打開PPT課件演示,功能其實和鼠標點擊差不多。如果在白板軟件中...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>