1)禁止所有表約束的SQL
成都創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為皮山企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站制作,皮山網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
select 'alter table '+name+' nocheck constraint all' from sysobjects where type='U'
2)刪除所有表數(shù)據(jù)的SQL
select 'TRUNCATE TABLE '+name from sysobjects where type='U'
3)恢復(fù)所有表約束的SQL
select 'alter table '+name+' check constraint all' from sysobjects where type='U'
4)刪除某字段的約束
declare @name varchar(100)
--DF為約束名稱前綴
select @name=b.name from syscolumns a,sysobjects b where a.id=object_id('表名') and b.id=a.cdefault and a.name='字段名' and b.name like 'DF%'
--刪除約束
alter table 表名 drop constraint @name
--為字段添加新默認(rèn)值和約束
ALTER TABLE 表名 ADD CONSTRAINT @name DEFAULT (0) FOR [字段名]
--刪除約束
ALTER TABLE tablename
Drop CONSTRAINT 約束名
--修改表中已經(jīng)存在的列的屬性(不包括約束,但可以為主鍵或遞增或唯一)
ALTER TABLE tablename
alter column 列名 int not null
--添加列的約束
ALTER TABLE tablename
ADD CONSTRAINT DF_tablename_列名 DEFAULT(0) FOR 列名
--添加范圍約束
alter table tablename add check(性別 in ('M','F'))
首先刪除emp表中關(guān)聯(lián)dept的外鍵約束:
alter table EMP drop constraint FK_DEPTNO;
再刪除dept的主鍵約束:
alter table DEPT drop constraint PK_DEPT;
這樣就能插入重復(fù)數(shù)據(jù)了。
首先你得確定數(shù)據(jù)庫約束表里是否有AN_SHORT_NAME_INDEX這個約束
(如果你有管理員權(quán)限的話)select * from dba_constraints where constraint_name='AN_SHORT_NAME_INDEX';
如果有的話,會顯示這個約束的所有信息。
剩下的自己看著弄吧。
希望能解決你的問題。
使用PowerDesigner生成數(shù)據(jù)庫 建表SQL 腳 本時,尤其是Oracle數(shù)據(jù)庫時,表名一般會帶引號。其實(shí)加引號是PL/SQL的規(guī)范,數(shù)據(jù)庫會嚴(yán)格按照“”中的名稱建表,如果沒有“”,會按照 ORACLE默認(rèn)的設(shè)置建表(DBA STUDIO里面),默認(rèn)是全部大寫,這樣,在ORACLE數(shù)據(jù)庫里的字段就如“Column_1”。如果你把引號去掉,ORACLE自動默認(rèn)為全部大 寫,即“COLUMN_1”,所以這段SQL在PL/SQL中執(zhí)行的時候是沒有任何問題的,如果不加引號,在PL/SQL會自動識別為大寫。如果加了引 號,sql或者h(yuǎn)ql查詢“Column_1='XXX'”時,就會報錯:ORA-00904: "COLUMN_1": 無效的標(biāo)識符,除非寫為“‘Column_1’='XXX'”。
這個問題是生成腳本格式的問題,因此,我們可以 嘗試在DBMS配置文件中修改相應(yīng)的格式設(shè)置來解決這個問題。選擇DBMS Properties,選擇Script-Sql-Format,有一項(xiàng)CaseSensitivityUsingQuote, 它的comment為“Determines if the case sensitivity for identifiers is managed using double quotes”,表示是否適用雙引號來規(guī)定標(biāo)識符的大小寫,可以看到右邊的values默認(rèn)值為“YES”,改為“No”,點(diǎn)擊【應(yīng)用】按鈕。
1、去掉Oracle生成的SQL創(chuàng)建語句中的雙引號
用powerdesigner導(dǎo)出orale數(shù)據(jù)庫的建表sql時,默認(rèn)會給表名和字段名加上雙引號,如下圖:
這樣給操作數(shù)據(jù)庫帶來很大的不便,解決的辦法是設(shè)置Database菜單,
然后點(diǎn)擊Edit Current DBMS菜單,再依次點(diǎn)開Script-Format,然后找到CaseSensitivityUsingQuote
將其設(shè)為NO,即可。如下圖:
如果帶有包的話,導(dǎo)出時要選擇包中的表。
2、PowerDesign高級應(yīng)用
編寫相關(guān)的VBS腳本在PowerDesign里自定義一些命令與操作等,具體的可以參考C:\Program Files\Sybase\PowerDesigner 9\VB Scripts目錄下的腳本示例。怎么運(yùn)用這些腳本呢?
在Tools-Execute Commands里可以進(jìn)行操作。具體說明在幫助里寫的很清楚。幫助的位置在 PowerDesigner General Features Guide- PART 2. Modeling Guide-CHAPTER 8. Managing Objects-Accessing objects using VBScript-VBScript uses in PowerDesigner
PowerDesign的使用主要是DBMS的配置
3、修改建表腳本生成規(guī)則。
如果每個表格都有相同的字段,可以如下修改:
Database - Edit Current DBMS 展開 Script - Object - Table - Create 見右下的Value值,可以直接修改如下:
/* tablename: %TNAME% */
create table [%QUALIFIER%]%TABLE% (
%TABLDEFN%
ts char(19) null default convert(char(19),getdate(),20),
dr smallint null default 0
)
[%OPTIONS%]
其中的 ts、dr 兩列會在生成SQL腳本的時候自動的插入每個表格中,其中的%TNAME% 變量是給每個表格的SQL添加一個該表的Name值注釋。
4、修改字段生成規(guī)則。
要給每個字段都添加一個注釋的話,同一窗口中展開 Script - Object - Column - Add 的 Value修改為:
%20:COLUMN% [%COMPUTE%?AS (%COMPUTE%):%20:DATATYPE% [%IDENTITY%?%IDENTITY%:[%NULL%][%NOTNULL%]][ default %DEFAULT%]
[[constraint %CONSTNAME%] check (%CONSTRAINT%)]]/*%COLNNAME%*/
其中的%COLNNAME%就是列的Name值(可以是中文)
5、修改外鍵命名規(guī)則。
選擇Database—Edit Current DBMS
選擇Scripts-》Objects-》Reference-》ConstName
可以發(fā)現(xiàn)右側(cè)的Value為:
FK_%.U8:CHILD%_%.U9:REFR%_%.U8:PARENT%
可見,該命名方法是:'FK_'+8位子表名+9位Reference名+8位父表名,你可以根據(jù)這中模式自定義為:
FK_%.U7:CHILD%_RELATIONS_%.U7:PARENT%,
可以使FK名稱變?yōu)镕K_TABLE_2_RELATIONS_TABLE_1
掌握這種方法后就可以按照自己的想法修改了
生成建庫腳本SQL文件中的表頭注釋很討厭,可以在 Databse - Generate Database (Ctrl+G)窗口中,選擇Options卡片,去掉Usage的Title鉤選項(xiàng)即可。
6、添加外鍵
Model - References新建一條外鍵后,雙擊進(jìn)入外鍵屬性,在“Joins”卡片中可以選擇子表的外鍵字段。如下圖:
接著出現(xiàn)如下畫面:
按照步驟操作即可。
7、取消name和code聯(lián)動
在修改name的時候,code的值將跟著變動,很不方便。修改方法:PowerDesign中的選項(xiàng)菜單里修改,在[Tool]--[General Options]-[Dialog]-[Operating modes]-[Name to Code mirroring],這里默認(rèn)是讓名稱和代碼同步,將前面的復(fù)選框去掉就行了。如圖:
編寫相關(guān)的VBS腳本在PowerDesign里自定義一些命令與操作等,具體的可以參考C:\Program Files\Sybase\PowerDesigner 9\VB Scripts目錄下的腳本示例。怎么運(yùn)用這些腳本呢?
在Tools-》Execute Commands里可以進(jìn)行操作。具體說明在幫助里寫的很清楚。幫助的位置在 PowerDesigner General Features Guide- PART 2. Modeling Guide-CHAPTER 8. Managing Objects-Accessing objects using VBScript-VBScript uses in PowerDesigner
PowerDesign的使用主要是DBMS的配置
1、修改建表腳本生成規(guī)則。如果每個表格都有相同的字段,可以如下修改:
Database - Edit Current DBMS 展開 Script - Object - Table - Create 見右下的Value值,可以直接修改如下:
/* tablename: %TNAME% */
create table [%QUALIFIER%]%TABLE% (
%TABLDEFN%
ts char(19) null default convert(char(19),getdate(),20),
dr smallint null default 0
)
[%OPTIONS%]
其中的 ts、dr 兩列會在生成SQL腳本的時候自動的插入每個表格中,其中的%TNAME% 變量是給每個表格的SQL添加一個該表的Name值注釋。
2、修改字段生成規(guī)則。要給每個字段都添加一個注釋的話,同一窗口中展開 Script - Object - Column - Add 的 Value修改為:
%20:COLUMN% [%COMPUTE%?AS (%COMPUTE%):%20:DATATYPE% [%IDENTITY%?%IDENTITY%:[%NULL%][%NOTNULL%]][ default %DEFAULT%]
[[constraint %CONSTNAME%] check (%CONSTRAINT%)]]/*%COLNNAME%*/
其中的%COLNNAME%就是列的Name值(可以是中文)
3、修改外鍵命名規(guī)則。選擇Database—Edit Current DBMS
選擇Scripts-》Objects-》Reference-》ConstName
可以發(fā)現(xiàn)右側(cè)的Value為:
FK_%.U8:CHILD%_%.U9:REFR%_%.U8:PARENT%
可見,該命名方法是:'FK_'+8位子表名+9位Reference名+8位父表名,你可以根據(jù)這中模式自定義為:
FK_%.U7:CHILD%_RELATIONS_%.U7:PARENT%,
可以使FK名稱變?yōu)镕K_TABLE_2_RELATIONS_TABLE_1
掌握這種方法后就可以按照自己的想法修改了
生成建庫腳本SQL文件中的表頭注釋很討厭,可以在 Databse - Generate Database (Ctrl+G)窗口中,選擇Options卡片,去掉Usage的Title鉤選項(xiàng)即可。
4、添加外鍵
Model - References新建一條外鍵后,雙擊進(jìn)入外鍵屬性,在“Joins”卡片中可以選擇子表的外鍵字段
5、去掉生成的SQL腳本雙引號的問題:ORACLE 8I2::Script\Sql\Format\CaseSensitivityUsingQuote改成No,默認(rèn)是Yes所以會有雙引號。
在修改name的時候,code的值將跟著變動,很不方便。修改方法:PowerDesign中的選項(xiàng)菜單里修改,在[Tool]--[General Options]-[Dialog]-[Operating modes]-[Name to Code mirroring],這里默認(rèn)是讓名稱和代碼同步,將前面的復(fù)選框去掉就行了。
假如有主表 test_main 與 子表 test_sub
SQL -- 創(chuàng)建外鍵(默認(rèn)選項(xiàng))
SQL ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main;
Table altered.
刪除外鍵約束
ALTER TABLE test_sub DROP CONSTRAINT main_id_cons;
約束用于限制加入表數(shù)據(jù)的類型,目的是保證數(shù)據(jù)的一致性和完整性
創(chuàng)建格式:在創(chuàng)建表時規(guī)定約束(在Create添加),也可以在創(chuàng)建之后添加(Alter table)。
約束類型:NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK、DEFAULT。
非空約束就是限制必須為某個列提供值,不允許有空值的存在。
空值(NULL)是不存在的值,它既不是數(shù)字0也不是空字符串,而是不存在未知的情況,即:該列的所有值不能為空,但可以為空字符或者0。
結(jié)果:通過desc查看會發(fā)現(xiàn)Nullable那一列的Y消失,表示此列不能為空。且在插入數(shù)值的時候此列必須添加數(shù)值,否則會報錯。
取消非空約束使用alter方法:alter table test1 modify Author null; 設(shè)置test1的Author可以
唯一性約束強(qiáng)調(diào)所在的列不允許有相同的值,但可以有多個Null。
其定義比主鍵約束弱,即他的列允許有空值(主鍵不允許有空值),唯一性約束的主要作用是保證在除主鍵外,其他列值得唯一性。
即:直接在列后面添加unique,
或在列后面添加 constraint 約束名 unique,
或在最后添加constraint 約束 unique(列名),
或者alter table 表名 add constraint 約束名 unique(列名);
建議使用的方法為alter和在最后添加最后添加constraint 約束 unique(列名)。
注:添加約束名的好處為:便于刪除操作,在刪除時需要通過約束名來完成操作。同時如果不添加約束名則系統(tǒng)會自動生成約束名,在表移動等操作時,約束名也會更改,會造成后期操作的麻煩。
取消唯一性約束:alter table test3 drop constraint QQ_UK2;
主鍵約束唯一地標(biāo)識了每一行記錄(非空+唯一),在一個表中,最多只能有一個主鍵約束,主鍵約束既可以由一個列組成,也可以由兩個或兩個以上列組成(這種稱聯(lián)合主鍵)。
具體的方法和添加唯一約束相同,建議使用的方法為alter和在最后添加最后添加constraint 約束 unique(列名)。
刪除主鍵:alter table 表名 drop constraint 約束名
外鍵約束主要是在B表中的某一列受到A表的制約,B的那一列的值只能是A內(nèi)的值,比如工資表的員工號必須受員工表的員工號限制一樣,工資表不能有不存在的員工號。
一般外鍵約束會使用兩個表進(jìn)行關(guān)聯(lián),外鍵是指"當(dāng)前表"引用"另一個表"的某一列或某幾列。在另一個表中,被引用的列必須具有主鍵約束或者唯一性約束,不存在的數(shù)據(jù)不能出現(xiàn)在當(dāng)前表的對應(yīng)列中。一般情況下當(dāng)刪除被引用表中數(shù)據(jù)時,該數(shù)據(jù)也不能出現(xiàn)在外鍵列中,如果存在則刪除失敗。
刪除外鍵約束:alter table test5_1 drop constraint FK_test_5_1;
check約束是為了讓表中某字段值只能輸入固定的值。
check設(shè)置數(shù)值范圍:constraint check 表名 check (列名 between 小范圍 and 大范圍);
設(shè)置為大寫:constraint check 表名 check (列名 = upper(列名));
取消 alter table test6_2 drop constraint check_test_6_2;
默認(rèn)約束是設(shè)置列的默認(rèn)值,即當(dāng)插入一行時,若不給出該列的值,就用默認(rèn)值代替。
結(jié)果:在添加數(shù)據(jù)的時候,如果在設(shè)置有默認(rèn)值的列沒有添加數(shù)據(jù)則會把默認(rèn)值添加進(jìn)去。
取消默認(rèn)約束 alter table test2 modify BOOKNAME default null;
注:
add用于修改字段類型和長度的(即修改字段的屬性)
modify修改表的數(shù)據(jù)結(jié)構(gòu)。
update是修改數(shù)據(jù)內(nèi)容的。
drop是刪除數(shù)據(jù)內(nèi)容。