sql中设置主键
‘壹’ sql中先建立一个表,然后想将表的一列设为主键,怎么弄
在SQL中,若要设置表中某一列为主键,首先需要确保该列的字段属性为"not null"。这可以通过以下语句实现:
alter table 表名 alter column 列名 int not null
接着,需要确保表内该主键字段的值无重复。一旦确认无重复数据,可以执行以下命令来添加主键约束:
alter table 表名 add constraint 约束名 primary key(列名)
以上步骤是设置SQL表中某一列为唯一且非空主键的基本方法。确保在执行主键约束前,表中的数据符合主键的要求,以避免因违反约束而导致的操作失败。
主键的设置有助于提升数据库的性能和数据的准确性。在设置主键时,建议仔细检查表中数据,以避免因主键约束引发的问题。
值得注意的是,如果表中已有数据,确保这些数据不会违反主键约束。如果存在重复值,可能需要先进行数据清洗或调整。
此外,为约束指定一个有意义的名字可以方便后续管理和维护。在添加主键约束时,使用有意义的名称有助于在数据库管理系统中快速识别。
在设置主键后,可以利用SQL查询来验证主键是否正确设置。例如,可以查询该列的唯一性和非空性:
SELECT COUNT(*) FROM 表名 WHERE 列名 IS NULL
通过以上步骤,可以确保SQL表中某一列正确设置为主键,提升数据管理的效率和准确性。
‘贰’ sql用命令创建主键与外键。
创建SQL的主键和外键约束的方法:
--在创建表时就可以对字段加上约束:
create table Student
(
StudentNo int PRIMARY KEY IDENTITY(1,1), --加主键约束,还有标识列属性(两者构成实体完整性)
StudentName nvarchar(15) not null, --加非空约束,不加"not null" 默认为:可以为空
StudentSchool text(20) FOREIGN KEY REFERENCES SchoolTable(SchoolName), --加外键约束,格式:FOREIGN KEY REFERENCES 关联的表名(字段名)
StudentAge int DEFAULT ((0)), --加默认值约束
StudentSex nvarchar(2) CHECK(StudentSex=N'男' or StudentSex=N'女') --加检查约束,格式:check (条件表达式)
)
--如果在表创建好了以后再加约束,则格式分别为:
-- 主键:
alter table 表名
add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,'PK_字段名'就为约束名
primary key (字段名) --字段名同上
--唯一约束:
alter table 表名
add constraint UQ_字段名
unique (字段名)
--外键约束:
alter table 表名
add constraint FK_字段名--"FK"为外键的缩写
foreign key (字段名) references 关联的表名(关联的字段名) --注意'关联的表名'和'关联的字段名'
alter table 表A add constraint FK_B foreign key (ticket_no) references 表B(ticket_no)
alter table 表A add constraint FK_C foreign key (person_no) references 表C(person_no)
alter table 成绩表 add constraint FK_StudentNo foreign key (StudentNo) references Student (StudentNo)
ON UPDATE CASCADE ON DELETE CASCADE
级联更新,级联删除,这样在删除主表Student时,成绩表中该学生的所有成绩都会删除。
--检查约束:
alter table 表名
add constraint CK_字段名
check (条件表达式) --条件表达式中的条件用关系运算符连接
--默认值约束:
alter table 表名
add constraint DF_字段名
default '默认值' for 字段名--其中的'默认值'为你想要默认的值,注意'for'
--删除创建的约束:
alter table 表名
drop constraint 约束名--约束名为你前面创建的如:PK_字段这样的约束名
--注意:如果约束是在创建表的时候创建的,则不能用命令删除
--只能在'企业管理器'里面删除
参考资料 : http://www.studyofnet.com/news/92.html
希望以上的回答能够帮到你