SQL server外键自引用时,表中无记录的话可以添加吗?oracle重建表时出现表中的唯一/主键被外键引用

本文目录
- SQL server外键自引用时,表中无记录的话可以添加吗
- oracle重建表时出现表中的唯一/主键被外键引用
- SQL的外键必须引用另一个表的主键吗可以是其他列吗
- powerdesigner 中如何取消外键的引用,复选框点不了
- PL/SQL数据库一个表中一个字段设为外键引用另一个表中的主键字段,用语句怎么写
- SQL找出一个外键所被引用过的表
SQL server外键自引用时,表中无记录的话可以添加吗
可以先添加字段,然后再在字段上建立外键,分以下两步:
如表名为sc,其中添加一个字段为sid,是student表中sid的外键,可用以下语句:
1、
1
alter table sc add sid varchar(20);
2、
1
alter table sc add constraint fk_sid foreign key (sid) references student(sid);
外键含义:
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
oracle重建表时出现表中的唯一/主键被外键引用
你的问题根在要删除的两个表与其他表有关联,也就是说这两个表的主键被其他表作为外键使用了。如果你删掉这两个表重建的话,与其他表的关联被切断了,破坏了数据的完整性。
为了保持表之间的关联性可以使用Truncate语句删掉所有记录,而不删掉表结构。
例:truncate table bookstable; truncate table customertable;
这样表也不用重建了。
如果强制删掉表,可以用
drop table bookstable cascade constraints;
drop table customertable cascade constraints;
另外,create和drop语句本身带有自动提交,不用再执行commit语句。
SQL的外键必须引用另一个表的主键吗可以是其他列吗
一般来说引用的都是主键,主要是由主键的性质决定的,主键是一些唯一非空的元素的集合,那么才有引用的意义。
之所以限制主键,主要是建立外键的表一般都是基础属性表,这种键值如果重复那么后果比较严重,所以一般都用主键进行限制。
powerdesigner 中如何取消外键的引用,复选框点不了
PowerDesigner一些小技巧
修改外键命名规则
选择Database—》Edit Current DBMS
选择Scripts-》Objects-》Reference-》ConstName
可以发现右侧的Value为:
FK_%.U8:CHILD%_%.U9:REFR%_%.U8:PARENT%
可见,该命名方法是:’FK_’+8位子表名+9位Reference名+8位父表名,你可以根据这中模式自定义为:
FK_%.U7:CHILD%_RELATIONS_%.U7:PARENT%,
可以使FK名称变为FK_TABLE_2_RELATIONS_TABLE_1
掌握这种方法后就可以按照自己的想法修改了
生成建库脚本SQL文件中的表头注释很讨厌,可以在 Databse -》 Generate Database (Ctrl+G)窗口中,选择Options卡片,去掉Usage的Title钩选项即可。
添加外键
Model -》 References新建一条外键后,双击进入外键属性,在“Joins”卡片中可以选择子表的外键字段
PL/SQL数据库一个表中一个字段设为外键引用另一个表中的主键字段,用语句怎么写
这里,我跟你写个例子,你看看吧。
创建一个班级表:
CREATE TABLE ban_ji( id integer , ban_ji varchar(25));
INSERT INTO ban_ji VALUES(1,’1-(1)’);
INSERT INTO ban_ji VALUES(2,’1-(2)’);
----------------------------------------------
insert into xue_sheng values(5,’dd’,0,50,3);
现在在学生表插入数据,如果不对应 班级表的id也是可以插入的,不过这是没有意义的记录
ALTER TABLE xue_sheng ADD CONSTRAINT fk_xue_sheng FOREIGN KEY(b_id) REFERENCES ban_ji(id);
ERROR at line 1:
ORA-02270: no matching unique or primary key for this column-list
错误提示要 班级表的id必须是主键或者具有唯一值
SQL》 ALTER TABLE ban_ji ADD CONSTRAINT pk_ban_ji PRIMARY KEY( id );
SQL》 ALTER TABLE xue_sheng ADD CONSTRAINT fk_xue_sheng FOREIGN KEY(b_id) REFERENCES ban_ji(id);
一旦创建了这个外键, 就不能在学生表随意插入数据,要参照班级表的id 。
insert into xue_sheng values(5,’dd’,0,50,3);
还有班级表的id 也不能随便修改或者删除, 因为如果修改了,学生表就没有数据参照了。
SQL找出一个外键所被引用过的表
select
oSub.name AS ,
fk.name AS ,
SubCol.name AS ,
oMain.name AS ,
MainCol.name AS
from
sys.foreign_keys fk
JOIN sys.all_objects oSub
ON (fk.parent_object_id = oSub.object_id)
JOIN sys.all_objects oMain
ON (fk.referenced_object_id = oMain.object_id)
JOIN sys.foreign_key_columns fkCols
ON (fk.object_id = fkCols.constraint_object_id)
JOIN sys.columns SubCol
ON (oSub.object_id = SubCol.object_id
AND fkCols.parent_column_id = SubCol.column_id)
JOIN sys.columns MainCol
ON (oMain.object_id = MainCol.object_id
AND fkCols.referenced_column_id = MainCol.column_id)
自己在最后 加一个 WHERE fk.name = ’Plan01_FK’
注: 上面的 SQL Server 2008 下的 sql 语句。

更多文章:
全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)
2026年9月7日 17:10
matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)
2026年9月7日 16:30
oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)
2026年9月7日 15:30
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20
scrollthrough意思(“scroll”是什么意思)
2026年9月7日 08:00
怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)
2026年9月7日 06:30



