當前位置:首頁 » 編程語言 » 怎麼刪除sql主碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

怎麼刪除sql主碼

發布時間: 2022-06-15 06:28:21

❶ 在sql怎麼刪除 含主碼的一個元組

你好!我覺得你說的是主鍵吧?如果沒有主外鍵關系,可以直接刪除就好了!具體代碼:DELETE SET student(表名) WHERE sno=2010(條件)點擊執行就好了!

❷ (1)、資料庫中一般不允許更改數據。如果需要更改主碼數據時,怎樣處理

打開sql查詢分析器,鍵入語句
update 表名 set key='改後主鍵' where key='改前主鍵';
需要此表中主鍵的聯系不能實現。

❸ SQL如何同時設置更新刪除級聯

級聯刪除你可以把它認為是一個觸發器,也就是你刪除主表中的數據,那麼從表中的相關聯的也就一起刪除了。。。看個例子:======================create table a
(
id varchar(20) primary key,
password varchar(20) not null
)

create table b
(
id int identity(1,1) primary key,
name varchar(50) not null,
userId varchar(20),
foreign key (userId) references a(id) on delete cascade
)
表B創建了外碼userId 對應A的主碼ID,聲明了級聯刪除
測試數據:
insert a values ('11','aaa')
insert a values('23','aaa')
insert b values('da','11')
insert b values('das','11')
insert b values('ww','23')
刪除A表內id為『11』的數據,發現B表內userId 為「11」也被資料庫自動刪除了,這就是級聯刪除
delete a where id='11'=============================================================級聯更新也大同小異。。只是關鍵字為:on update希望回答對你有所幫助........

❹ sql創建表的時候設置主碼,突然發現要設的主碼的列有重復的項,怎麼辦

有重復肯定是不行的,
一、可以刪除重復的資料。
二、可以將重復的資料修改為不重復。

❺ sql,如何用sql語句對一個已經編輯好的表在設置主碼和外碼

  1. sql中的主碼和外碼,屬於索引,SQL索引有兩種,聚集索引和非聚集索引,索引主要目的是提高了SQLServer系統的性能,加快數據的查詢速度與減少系統的響應時間

  2. 創建索引的語法:

    CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEXindex_name

    ON{table_name|view_name}[WITH[index_property[,....n]]

    說明:

    UNIQUE:建立唯一索引。

    CLUSTERED:建立聚集索引。

    NONCLUSTERED:建立非聚集索引。

    Index_property:索引屬性。

    UNIQUE索引既可以採用聚集索引結構,也可以採用非聚集索引的結構,如果不指明採用的索引結構,則SQLServer系統默認為採用非聚集索引結構。

  3. 刪除索引語法:

    DROPINDEXtable_name.index_name[,table_name.index_name]

    說明:table_name:索引所在的表名稱。

    index_name:要刪除的索引名稱。

  4. 修改索引的語法:

  5. ALTER INDEX命令在其用來做什麼方面多少有些欺騙性。截止到現在,ALTER命令總是與修改對象的定義有關。例如ALTER表以添加或禁用約束和列。ALTER INDEX是不同的-該命令與維護有關,而與結構完全不相干。如果需修改索引的組成,那麼只能DROP然後CREATE索引,或者用DROP_EXISTING=ON選項CREATE並使用索引。

  6. ALTER INDEX {<name of index> | ALL}
    ON<table or view name>
    { REBUILD
    [[ WITH (
    [PAD_INDEX = {ON | OFF}]
    | [[,] FILLFACTOR = <fillfactor>
    | [[,] SORT_IN_TEMPDB = { ON | OFF }]
    | [[,] IGNORE_DUP_KEY = { ON | OFF }]
    | [[,] STATISTICS_NORECOMPUTE = { ON | OFF }]
    | [[,] ONLINE = { ON| OFF }]
    | [[,] ALLOW_ROW_LOCKS = { ON | OFF }]
    | [[,] ALLOW_PAGE_LOCKS = { ON | OFF }]
    | [[,] MAXDOP = <max degree of parallelism>
    )]
    |[ PARTITION = <partition number>
    [ WITH (< partition rebuild index option>
    [,...N])]]]
    | DISABLE
    | REORGANIZE
    [ PARTITION = <partition number> ]
    [ WITH (LOB_COMPACTION = { ON | OFF })]
    | SET ([ ALLOW_ROW_LOCKS = { ON | OFF} ]
    | [[,] ALLOW_PAGE_LOCKS = { ON | OFF } ]
    | [[,] IGNORE_DUP_KEY = { ON | OFF } ]
    | [[,] STATISTICS_NORECOMPUTE = { ON | OFF }]
    )
    }[;]

❻ sql多表關聯刪除

刪除多表關聯數據的三種方法

1、級聯刪除

createtablea
(
idvarchar(20)primarykey,
passwordvarchar(20)notnull
)
createtableb
(
idintidentity(1,1)primarykey,
namevarchar(50)notnull,
userIdvarchar(20),
foreignkey(userId)referencesa(id)ondeletecascade
)



表B創建了外碼userId 對應A的主碼ID,聲明了級聯刪除

測試數據:

insertavalues('11','aaa')
insertavalues('23','aaa')
insertbvalues('da','11')
insertbvalues('das','11')
insertbvalues('ww','23')


刪除A表內id為『11』的數據,發現B表內userId 為「11」也被資料庫自動刪除了

deleteawhereid='11'


2、採用存儲過程

A表:AID Aname 主健:AID

B表:BID BelongAID Bname 主健:BID,外健:BelongAID

C表:CID BelongBID Cname 主健:CID,外健:BelongBID

D表:DID BelongCID Dname 主健:DID,外健:BelongCID

其中:

A表和B表通過A.AID和B.BelongAID 創建了外健關系

B表和C表通過B.BID和C.BelongBID 創建了外健關系

C表和D表通過C.CID和D.BelongCID 創建了外健關系


3、採用觸發器

刪除Class表中的一條記錄的同時刪除該記錄Class_No欄位值在Student表中對應的記錄。

CreateTriggerClass_delete
onClass
fordelete
as
begin
deletefromStudent
whereClass_No=(selectClass_Nofromdeleted)
end

❼ 資料庫中一般不允許更改主碼數據。如果需要更改主碼數據時,怎樣處理

如果數據量大的話,建議先刪除索引。只要更改的主碼沒有重復值和NULL就可以了。

❽ sql 主碼和外碼

表外建主鍵:alter table 課程表add constraint major_id_pk primary key(課程號);表外建外碼:alter table 成績表add constraint major_id_fk foreign key
(課程號) references 課程表(課程號);成績表外碼 課程號 參照課程表 課程號

❾ SQL中如果主碼的前2個字元一樣,怎麼辦

3.1 SQL 中的完整性約束

SQL把各種完整性約束作為資料庫模式定義的一部分。既有效防止了對資料庫的意外破壞,提高了完整性檢測的效率,又可以減輕編程人員的負擔。

SQL對三種不同完整性約束的設置及檢測,採取了不同的方式加以實現。下面分別介紹。

3.1.1 實體完整性和主碼

實體完整性規定,主碼的任何屬性都不能為空,因為,概念模型中實體和聯系都是可區分的,而且它們以碼為唯一性標識。如果,主碼的屬性值可以為空,則意味著在概念模型中存在著不以碼為唯一性標識的實體。這顯然是前後矛盾的。

那麼怎樣保證實體完整性呢?SQL中實體完整性是通過主碼來實現的。一旦某個屬性或屬性組被定義為主碼,該主碼的每個屬性就不能為空值,並且在關系中不能出現主碼值完全相同的兩個元組。

主碼的定義是在Create Table 語句中使用 Primary Key關鍵字來實現的。方法有兩種:

a) 在屬性定義後加上關鍵字 Primary Key;

b) 在屬性表定義後加上額外的定義主碼的子句:Primary Key(<主碼屬性名表>)

說明:

² 如果主碼僅由一個屬性組成,上述兩種方法都可定義,若由兩個或以上的屬性組成,則只能用上述第二種方法定義了。

² 對於候選碼的說明方法,可以用Unique說明該屬性的值不能重復出現。Unique的使用與Primary Key相似。

² 一個表中只能有一個主碼定義,但可以有多個Unique說明。

² SQL中,並沒有強制為每個關系指定主碼,但為每個關系指定主碼通常會更好一些。(因為主碼的指定可以確保關系的實體完整性)

3.1.2 參照完整性約束與外部碼

參照完整性是對關系間引用數據的一種限制。即:若屬性組A是基本關系R1的外碼,它與基本關系R2的主碼K相對應,則R1中每個元組在A上的值必須:要麼取空值,要麼等於R2中某元組的主碼值。

一、外部碼約束的說明:

SQL中就是利用外部碼的說明來實現參照完整性約束,限製表中某些屬性的取值的。外部碼的說明也有兩種方法:

1、在該屬性的說明後直接加上關鍵字」REFERENCES <表名>(<屬性名>)」,其中表名稱為參照關系名,屬性名稱為參照關系的主碼。

2、在Create Table 語句的屬性清單後,加上外部碼說明子句,格式為:

FOREIGN KEY <屬性名表1> REFERENCES <表名>(<屬性名表2>)

上式中的屬性名表1和屬性名表2中屬性可以多於一個,但必須前後對應。

二、參照完整性約束的實現策略

前面講了,外部碼的取值只有兩種情況:要麼取空,要麼取參照關系中的主碼值。可是當用戶操作違反了這個規則時,如何保持此約束呢?

SQL提供了三種可選方案:

1、RESTRICT(限制策略):

當用戶對表進行違反了上述完整性約束、條件的插入、刪除或修改操作時,將會被系統拒絕。

2、CASCADE(級聯策略):

當對參照關系進行刪除和修改時,SQL所提供的一種方案。在這種策略下,當刪除或修改參照關系中某元組的主碼值時,被參照關系中,那些外部碼具有該值的元組也將被刪除或修改,以保證參照完整性。

3、SET NULL(置空策略):

置空策略也是針對參照關系的刪除或修改操作的。在這種策略下,當刪除參照關系中的某一元組或修改某一元組的主碼值時,被參照關系中外碼值等於該主碼值的元組在該外碼上的值將被置空

說明:

當用戶不指定參照完整性的實現策略時,一般被默認為RESTRICT(限制策略)。實現策略的說明通常被加在外部碼的說明後面,格式為:ON DELETE SET NULL ON UPDATE CASCADE。

3.1.3 用戶自定義完整性約束

對於用戶自定義完整性約束,SQL提供了非空約束、對屬性的CHECK約束、對元組的CHECK約束、觸發器等來實現用戶的各種完整性要求。

1、非空約束:

在CRETE TABLE 中的屬性定義後面加上NOT NULL關鍵字即定義了該屬性不能取空值。

2、基於屬性的CHECK約束

使用CHECK(檢查)子句可保證屬性值滿足某些前提條件。其一般格式為:

CHECK(<條件>)

它既可跟在屬性定義的後面,也可在定義語句中另增一子句加以說明。

如:CHECK(age>=18 AND age<=65);

CHECK(sex IN (「男」,」女」));

CHECK(dno IN(select dno from department));

從上例中可以看出,CHECK子句的條件中還可以帶子查詢。

3、基於元組的CHECK約束

基於元組的CHECK約束往往要涉及到表中的多個域。所以它是元組約束。在對整個元組完成插入或對某一元組的修改完成之後,系統將自動檢查是否符合CHECK條件表達式。若不符合條件,系統將拒絕該插入或修改操作。

基於元組CHECK約束的說明方法是在CREATE TABLE語句中的屬性表、主碼、外部碼的說明之後加上CHECK子句。

3.1.4 約束的更新

約束與資料庫中的表和視圖一樣,可以進行增、刪、改的更新操作。為了改和刪約束,需要在定義約束時對其進行命名,在各種約束的說明前加上關鍵字CONSTRAINT 和該約束的名稱即可。

例如:在employee表的create table語句中:

eno char(4) CONSTRAINT PK_employee PRIMARY KEY,

dno char(4)CONSTRAINT FK_employee FOREIGN KEY REFERENCES department(dno);

當對各種約束進行命名後,就可以用ALTER TABLE語句來更新與屬性或表有關的各種約束。如:

ALTER TABLE employee DROP CONSTRAINT FK_employee;

ALER TABLE Salary ADD CONSTRAINT RightSalary CHECK(Insure+Fund<Rest);

上述的增加約束,實際上也是通過ALTER TABLE語句定義約束的一種形式。

SQL不能直接修改約束,修改某一個約束實際上是用ALTER TABLE 語句先刪除該約束,然後再增加一個與該約束同名的新約束。
請參考