数据库表建立关于表名的问题

数据库表建立关于表名的问题

问题描述:

CREATE TABLE userextra (
uid int(5) NOT NULL,
uname varchar(20) NOT NULL,
col_uni varchar(20) DEFAULT NULL,
maj_dep varchar(20) DEFAULT NULL,
grade int(4) DEFAULT '0',
type varchar(255) DEFAULT NULL,
PRIMARY KEY (uid),
UNIQUE KEY uname (uname),
CONSTRAINT userextra_ibfk_1 FOREIGN KEY (uid) REFERENCES userbasic (uid) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我根据这串代码在navicat建立数据库表后为什么一直说我表名是错误的

外键关联那一条语句有问题
CONSTRAINT userextra_ibfk_1 FOREIGN KEY (uid) REFERENCES userbasic (uid) ON DELETE CASCADE ON UPDATE NO ACTION
你再仔细检查一下,建表的要求

首先你看看你的数据库名字是否与你代码中的一致,然后再看下你表名有没有写错。

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].userextra NOT NULL,
[col_uni] nvarchar NULL,
[maj_dep] varchar NULL,
[grade] [int] NOT NULL,
[type] varchar NULL,
CONSTRAINT [PK_userextra] PRIMARY KEY CLUSTERED
(
[uid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[userextra] ADD CONSTRAINT [DF_userextra_grade] DEFAULT ((0)) FOR [grade]
GO

表名改为大写的试下,或者只是建一个简单的表然后只有一个key值

贴出来错误看看,有没有其他提示信息,比如重名了。

1、首先要确定数据库是不是使用对了。
2、确定外键的表是否存在,也就是userbasic,这个表
3、实在不行,可以在表名字段名都加上反向引号 ,注意这个符号不是单引号,在键盘的左上角的

unique key 后面不要表名,请参考https://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations-partitioning-keys-unique-keys.html的例子:
CREATE TABLE t1 (
col1 INT NOT NULL,
col2 DATE NOT NULL,
col3 INT NOT NULL,
col4 INT NOT NULL,
UNIQUE KEY (col1, col2)
)

建立表的语句:
CREATE TABLE userextra (
uid int(5) NOT NULL PRIMARY KEY auto_increment,
uname varchar(20) NOT NULL,
col_uni varchar(20) DEFAULT NULL,
maj_dep varchar(20) DEFAULT NULL,
grade int(4) DEFAULT '0',
type varchar(255) DEFAULT NULL,
UNIQUE KEY uname (uname),
constraint userextra_ibfk_1 foreign key (uid) references userbasic(uid)
) ENGINE=InnoDB CHARSET=utf8;

效果图:
图片说明

EWvt无用功舡 秀预热瞎折腾扔扔的睥打文质彬彬牺授权扔

或者用:
constraint userextra_ibfk_1 foreign key (uid) references userbasic(uid) ON DELETE CASCADE ON UPDATE NO ACTION ,我试过也是可以的
用外键的前提是这个表 userbasic 必须提前创建好,而且列名必须要有 uid 的字段

检查下 表名 是不是 存在

CONSTRAINT userextra_ibfk_1 FOREIGN KEY (uid) REFERENCES userbasic (uid) ON DELETE CASCADE ON UP 这行代码的问题

检查数据库表名是否是关键字并且确定是否和代码一致。

是不是表名重复了,好好检查一下

首先检查下表名是否存在,
然后再看下外键表是否存在userbasic ,
外键表有没有指定主键PRIMARY KEY (uid),
还有就是看下数据库的版本,是否有新的关键字;
还有就是建表对应的库是否正确,是否建到别的库里,最好在建表的时候加上数据库

unique key 后面不要表名,请参考https://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations-partitioning-keys-unique-keys.html的例子:
CREATE TABLE t1 (
col1 INT NOT NULL,
col2 DATE NOT NULL,
col3 INT NOT NULL,
col4 INT NOT NULL,
UNIQUE KEY (col1, col2)
);

userbasic 数据库存在了吗?
表名字没有问题,你的外链好像有点问题吧

外键关联那一条语句有问题

肯定是建立外键的语法写错了

原因:你试图引用的其中一个外键没有建立起索引,或者不是一个primary key , 如果其中一个不是primary key 的放,你必须为它创建一个索引。
第一步:创建表 userbasic

CREATE TABLE userbasic (
uid int(5) NOT NULL,
uname varchar(20) NOT NULL,
col_uni varchar(20) DEFAULT NULL,
PRIMARY KEY (uid)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

第二步:创建表 userextra
CREATE TABLE userextra (
uid int(5) NOT NULL,
uname varchar(20) NOT NULL,
col_uni varchar(20) DEFAULT NULL,
maj_dep varchar(20) DEFAULT NULL,
grade int(4) DEFAULT '0',
type varchar(255) DEFAULT NULL,
PRIMARY KEY (uid),
UNIQUE KEY uname (uname),
KEY userbasic (uid),
CONSTRAINT userextra_ibfk_1 FOREIGN KEY (uid) REFERENCES userbasic (uid) ON DELETE CASCADE ON UPDATE NO ACTION
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
按照以上操作可以建表成功,希望对你有用

首先你看看你的数据库名字是否与你代码中的一致,然后再看下你表名有没有写错。

[SQL]CREATE TABLE userextra (
uid int(5) NOT NULL,
uname varchar(20) NOT NULL,
col_uni varchar(20) DEFAULT NULL,
maj_dep varchar(20) DEFAULT NULL,
grade int(4) DEFAULT '0',
type varchar(255) DEFAULT NULL,
PRIMARY KEY (uid),
UNIQUE KEY uname (uname),
CONSTRAINT userextra_ibfk_1 FOREIGN KEY (uid) REFERENCES userbasic (uid) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
[Err] 1215 - Cannot add foreign key constraint

CONSTRAINT userextra_ibfk_1 FOREIGN KEY (uid) REFERENCES userbasic (uid) ON DELETE CASCADE ON UPDATE NO ACTION
这句有问题,大侠你能不能检测一下自己是否已经建立userbasic 没有关联表,键JB的主外键关联

你的是数据库不允许字段重名吧,去看看? 没错 表里面的字段名也有限制重名的

应该是外键那条语句写的有问题吧

1、确定数据中是否已同名对象
2、建标指明了外键 表userbasic uid 需确定userbasic一存在