SQL建表时外键约束报错无法执行,求错误原因及解决方法
SQL建表报错问题修复方案
错误原因定位
你代码里一共有3类语法错误,都和字段、约束定义的分隔符、外键语法有关:
- 创建
VENDAS表时,ID_VENDEDOR对应的外键约束定义结束后,没有加逗号分隔后续的ID_CLIENTE字段定义,语法不合法 - 创建
ITENS_VENDAS表时,外键约束的语法错误:外键关联的字段名必须用小括号包裹,你漏写了ID_VENDA、ID_PRODUTO外层的括号 - 创建
ITENS_VENDAS表时,字段、外键约束之间缺少逗号分隔,相邻的两个定义没有符号断开
修正后的完整代码
/* criando as tabelas */ CREATE TABLE CLIENTES ( IDCLIENTE INT PRIMARY KEY AUTO_INCREMENT, CLIENTE VARCHAR(10)NOT NULL, ESTADO CHAR(2) NOT NULL, SEXO ENUM ('M','F') NOT NULL, STATUS VARCHAR (10) ); CREATE TABLE VENDEDORES ( IDVENDEDOR INT PRIMARY KEY AUTO_INCREMENT, NOME VARCHAR (20) NOT NULL ); CREATE TABLE PRODUTOS ( IDPRODUTO INT PRIMARY KEY AUTO_INCREMENT, PRODUTO VARCHAR (20) NOT NULL, PRECO FLOAT(10,2) NOT NULL ); CREATE TABLE VENDAS ( IDVENDA INT PRIMARY KEY AUTO_INCREMENT, TOTAL INT NOT NULL, ID_VENDEDOR INT, FOREIGN KEY (ID_VENDEDOR) REFERENCES VENDEDORES(IDVENDEDOR), ID_CLIENTE INT, FOREIGN KEY (ID_CLIENTE) REFERENCES CLIENTES(IDCLIENTE) ); CREATE TABLE ITENS_VENDAS( ID_VENDA INT NOT NULL, ID_PRODUTO INT NOT NULL, FOREIGN KEY (ID_VENDA) REFERENCES VENDAS(IDVENDA), FOREIGN KEY (ID_PRODUTO) REFERENCES PRODUTOS(IDPRODUTO), QUANTIDADE INT NOT NULL, VALOR_UNITARIO FLOAT(10,2) NOT NULL, VALOR_TOTAL FLOAT(10,2) NOT NULL, DESCONTO FLOAT(10,2) NOT NULL );
补充注意事项
SQL中创建表时,所有字段、约束的定义都是同级并列项,每一项结束后必须加逗号分隔,最后一项可以不加;外键约束的标准语法为FOREIGN KEY (当前表关联字段) REFERENCES 关联表(关联表字段),括号不能省略。
内容的提问来源于stack exchange,提问作者Andre Retorta
相关产品推荐
相关产品推荐

