任何人都可以告诉我MySQL是否自动索引其外键?
我的MySQL正在使用MyIsam Engine.
我想知道如何创建即使外键为NULL也可以工作的视图.例如,我们有一个表Person,它有一个主键和两个外键:
两个外键都可以为NULL.现在我们还有两个表,表名:
和表姓:
现在我们创建视图以显示每个Person的名称和姓氏:
CREATE VIEW `Database`.`ViewPerson` AS
SELECT `N`.`Name`, `S`.`Surname`
FROM `Person` `P`, `Name` `N`, `Surname` `S`
WHERE (`P`.`FkName` = `N`.`IdName`) AND (`P`.`FkSurname` = `S`.`IdSurname`)
Run Code Online (Sandbox Code Playgroud)
问题是,如果外键FkSurname为NULL,则即使定义了FkName,也不会显示该行.我想要即使两个外键都是NULL,它仍然返回两列都为NULL的行.现在我知道我可以通过添加表名和表Surname行来解决它,在Name/Surname下有NULL,然后在FkName和FkSurname中引用在这两列下有NULL值的行.但我仍然想知道是否存在外键为NULL并返回行的解决方案.
我有一个关于如何使用第二个字段作为约束更新级联字段的问题.
结构是这样的(我删除了不必要的列):
表nodes与列idNode和idDimension(它们一起形成主键).
forces带列idForce(PK)的表,idNode(外键到nodes.idNode)和idDimension.
级联更新和删除所有内容.
这种结构似乎出现的问题是:
如果在nodes我有一个像(1,1)和一个像(1,2)和在forces(1,1,1)和(1,1,2)的条目,我更新或删除nodes两个条目中的第一个条目forces将是影响.
我只需要影响那个也有相应idDimension的那个.如何修改当前结构呢?
编辑:表格 - 节点:
CREATE TABLE IF NOT EXISTS `nodes` (
`idNode` varchar(11) NOT NULL,
`idDimension` int(10) unsigned NOT NULL,
`idNetwork` int(10) unsigned NOT NULL DEFAULT '0',
`level` int(11) unsigned NOT NULL DEFAULT '0',
`energy` bigint(20) DEFAULT NULL,
`resources` bigint(20) unsigned NOT NULL DEFAULT '0',
`x` int(11) NOT …Run Code Online (Sandbox Code Playgroud) 我正在使用SQL Server作为我的数据库.现在有一个表有以下列.
PK_ID FK_ID Name Description
1 5 ABC ABCDE
2 7 EFG EFT
3 8 XUZ Xyz
4 11 TEF TEF
Run Code Online (Sandbox Code Playgroud)
现在我错误地更新了一些具有空值的Fk_ID字段.现在我想回到我的所有fk_id,它由null值更新.那么有什么方法可以恢复之前有价值的fk_id?
任何人都可以帮我找出相同的解决方案吗?
我一直在寻找这里和其他地方的很多帖子,但我仍然无法使它工作.
我正在尝试在xampp上创建以下2个表.但即使添加了InnoDB,我在第二次使用外键时遇到了问题.
任何人都可以看看下面的代码,并告诉我在外键部分我做错了什么,以便xampp不接受表?谢谢!
CREATE TABLE fichas (
id_ficha INT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
cod_produto VARCHAR(20) NULL,
nome_produto VARCHAR(50),
versao INT,
data_ficha DATE,
PRIMARY KEY (id_ficha)
) ENGINE=INNODB;
CREATE TABLE ident_dangers (
id_fichas INT NOT NULL,
class_subst TEXT NULL,
simb_perigo VARCHAR(50) NULL,
words_r VARCHAR (200) NULL,
INDEX (id_fichas),
FOREIGN KEY (id_fichas) REFERENCES fichas(id_ficha),
) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud) 嘿所有我正在尝试创建一个包含a的表Foreign Key,并且由于某种原因我收到错误.错误说明00907. 00000 - "missing right parenthesis"哪个是奇怪的,因为我没有随机的左括号.我查找了如何用a创建一个表,Foreign Key并导致以下代码:
Create Table EMPHIREINFO
(
empname VARCHAR2(10) NOT NULL FOREIGN KEY REFERENCES EMPADDRESS(empname),
empno NUMBER(4,0) NOT NULL PRIMARY KEY,
startdt DATE,
enddt DATE,
cntrlgth NUMBER(5,0)
)
Run Code Online (Sandbox Code Playgroud)
我试着和没有REFERENCES EMPADDRESS(empname),我仍然得到同样的错误.任何帮助表示赞赏,谢谢.
在我们的数据库系统中,我们有学生和人事领域.他们有PersonnelCardId和StudentCardId,我们把它们作为主键.然后我们有一个持有cardID的支付设备,我们宣称它是一个外键.在这种情况下我们无法插入行,经过研究后我们了解到我们无法将两个主键引用到外键.那么我们如何解决这种情况呢?谢谢.
我正在尝试创建一个表,并且收到错误告诉我第9行周围有问题.这是代码.
CREATE TABLE shirts_link (
adult VARCHAR(1) NOT NULL,
kids VARCHAR(1) NOT NULL,
babies VARCHAR(1) NOT NULL,
shirt_id INT(4) NOT NULL,
size_id INT(4) NOT NULL,
price_id INT(4) NOT NULL,
PRIMARY KEY (shirt_id,size_id,price_id),
FOREIGN KEY (shirt_id) REFERENCES shirts(id),
FOREIGN KEY (size_id) REFERENCES shirt_sizes(id),
FOREIGN KEY (price_id) REFERENCES shirt_prices(id)
)ENGINE=INNODB;
Run Code Online (Sandbox Code Playgroud)
这是我想要链接到的其他表格..
CREATE TABLE shirts (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
shirt_name VARCHAR(20) NOT NULL,
men VARCHAR(10) NULL,
women VARCHAR(10) NULL,
boys VARCHAR(10) NULL,
girls VARCHAR(10) NULL,
babies VARCHAR(10) NULL, …Run Code Online (Sandbox Code Playgroud) 我有一个与外键有关的问题.我正在使用SQL Server 2008.
有两个表,Customer和Invoice,它们看起来像这样:
客户表:
CustomerID
名称
地址
发票表:
InvoiceID
日期
CustomerID
Customer表中的CustomerID列是主键,Invoice表中的CustomerID列具有外键.
我想删除Customer表中的一行,但不删除Invoice表中的已连接行.有没有办法做到这一点?
编辑:
我忘了提到已删除的客户存储在日志表中,因此ID仍然存在,但在另一个表中
我是一个mysql初学者,我正在研究外键.我想创建三个表:用户,项目,订单并将它们链接在一起
用户表:
CREATE TABLE users (
user_id INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
PRIMARY KEY(user_id)
);
Run Code Online (Sandbox Code Playgroud)
物品表:
CREATE TABLE items (
item_id INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
PRIMARY KEY(item_id)
);
Run Code Online (Sandbox Code Playgroud)
订单表:
CREATE TABLE orders (
order_id INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
item_id INT,
quantity INT(10) NOT NULL,
user_id INT,
PRIMARY KEY (order_id),
FOREIGN KEY (item_id) REFERENCES items (item_id),
FOREIGN KEY (user_id) REFERENCES users (user_id)
);
Run Code Online (Sandbox Code Playgroud)
但我收到错误1005:无法创建表'new.orders'(错误:150)
我的代码出了什么问题?
谢谢!
foreign-keys ×10
mysql ×6
sql ×6
database ×2
oracle ×2
create-table ×1
indexing ×1
isam ×1
myisam ×1
revert ×1
sql-server ×1
sql-update ×1
view ×1