当前位置:首页 » 编程语言 » 怎么删除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 语句先删除该约束,然后再增加一个与该约束同名的新约束。
请参考