精华内容
下载资源
问答
  • 最近在玩数据库的时候,偶尔会有外键创建不成功的时候,于是上网查阅资料,整合自己的理解有了以下这篇文章:mysql创建外键不成功的原因以及处理方法:第一种:外键的字段与关联的字段的类型不匹配(包括编码格式的...

    最近在玩数据库的时候,偶尔会有外键创建不成功的时候,于是上网查阅资料,整合自己的理解有了以下这篇文章:

    mysql创建外键不成功的原因以及处理方法:



    第一种:外键的字段与关联的字段的类型不匹配(包括编码格式的不匹配):


    两个不同的表格(一个是record(借书记录表),一个是reader(读者信息表)):然后关联的两个readerid 字段要保持一致,包括长度,类型要保持一致。

    然后是编码格式


    两个表的引擎,字符集要保持一致,这样才能关联成功;

    另外,若读者对表的设计有unsign与sign的设定,要注意设定的外键的字段与关联的字段也要保持一致。


    第二种情况:外键的名字是一个已经存在的键值,要保证名字的唯一,如下:


    一般创建外键名字的时候是用 表名+FK+数字来区别于其他外键 ,如上表是record表,创建的外键名字是recordFK1,recordFK2等等.

    可以尝试,在外键名字后面加几个数字判断是否是这个引起的错误。




    第三种情况:mysql引擎引起的外键创建不能保存或者不能发挥作用的情况,mysql一般的默认引擎是myisam,而myisam是不能创建外键的。

    具体的判断方法以及问题处理方法大家可以去博主的另外一篇博客查看:mysql创建外键无法保存的原因及处理



    第四种情况:试图创建的一个外键没有建立起索引,或者不是一个primary key 并且如果其中不是一个primary key,你必须为他创建一个索引。


    第五种情况:外键的动作设置成on delete set null 或者 on update set null,但是在关联的表的字段又设置的no null,导致冲突:



    (这张表是正确操作)

    而错误操作是, 外键设定了 当admin的 username更新时,这张表(traffic)会跟着把关联的字段设为null

    而在traffic这张表的对应 username字段(本来应该null的),但是却设定了 不允许为空,引起的冲突。


    解决方法:设置为CASCADE级联更新,或者修改为允许为空。


    第六种情况:在navicat设定的表格主键中 有 主键1,主键2,主键3,的区别,主键1不能被级联更新(删除)(CASCADE)


    第七种情况:外键存在默认值,引起的冲突


    第八种情况:混合键值缺少索引引起的情况,需要为他单独申请索引


    第九种情况:在sql语句创建外键时,create 或者 alter语法错误


    展开全文
  • Can't create table xxx (errno: 150)错误解决办法 第一种情况,很简单,就是列的类型不匹配另外一种情况,虽然数据类型一致了,但是字符编码不一致最后一种情况则是,找不到外键引用的列。 总的来说,这个...

    总的来说,这个问题的原因就是创建的外键和关联的表的主键类型不匹配。下面用个简单的例子来说明。

    两张很简单的表,学生表和教师表:

    
     
    1. CREATE TABLE `t_teacher` (
    2. `id` varchar( 11) NOT NULL,
    3. `name` varchar( 20) DEFAULT NULL,
    4. PRIMARY KEY ( `id`)
    5. ) ENGINE= InnoDB DEFAULT CHARSET=utf8;
    6. CREATE TABLE `t_student` (
    7. `id` varchar( 11) NOT NULL DEFAULT '',
    8. `name` varchar( 20) DEFAULT NULL,
    9. PRIMARY KEY ( `id`)
    10. ) ENGINE= InnoDB DEFAULT CHARSET=utf8;


    现在需要给学生表创建一个外键来关联教师表:

    第一种情况,很简单,就是列的类型不匹配

    比如用int类型的列去关联varchar的列:

    
     
    1. ALTER TABLE `t_student`
    2. ADD COLUMN `teacher_id` int( 11) NULL AFTER `name`;
    3. ALTER TABLE `t_student` ADD CONSTRAINT `teacher_id_fk` FOREIGN KEY ( `teacher_id`) REFERENCES `t_teacher` ( `id`) ON DELETE RESTRICT ON UPDATE RESTRICT;

    另外一种情况,虽然数据类型一致了,但是字符编码不一致

    例如:





    最后一种情况则是,找不到外键引用的列。

    列在增加外键的时候,可能已经存在数据了(历史数据,或者更新数据库表时设置的默认值),但这些数据并不一定能在外键关联表中找到对应的行记录。这种情况也会导致外键创建失败。




    持续更新中…
    文章参考学习地址:https://blog.csdn.net/imhuqiao/article/details/51432051

    展开全文
  • 总的来说,这个问题的原因就是创建外键和关联的表的主键类型不匹配。下面用个简单的例子来说明。 两张很简单的表,学生表和教师表: CREATE TABLE `t_teacher` ( `id` varchar(11) NOT NULL, `name` varchar...

    总的来说,这个问题的原因就是创建的外键和关联的表的主键类型不匹配。下面用个简单的例子来说明。

    两张很简单的表,学生表和教师表:

    CREATE TABLE `t_teacher` (
      `id` varchar(11) NOT NULL,
      `name` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `t_student` (
      `id` varchar(11) NOT NULL DEFAULT '',
      `name` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


    现在需要给学生表创建一个外键来关联教师表:

    第一种情况,很简单,就是列的类型不匹配,比如用int类型的列去关联varchar的列:

    ALTER TABLE `t_student`
    ADD COLUMN `teacher_id`  int(11) NULL AFTER `name`;
    
    ALTER TABLE `t_student` ADD CONSTRAINT `teacher_id_fk` FOREIGN KEY (`teacher_id`) REFERENCES `t_teacher` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;

    另外一种情况,虽然数据类型一致了,但是字符编码不一致,例如:





    最后一种情况则是,找不到外键引用的列。列在增加外键的时候,可能已经存在数据了(历史数据,或者更新数据库表时设置的默认值),但这些数据并不一定能在外键关联表中找到对应的行记录。这种情况也会导致外键创建失败。



    展开全文
  • 2007年6月28日MySql错误:ERROR 1005: Cant create table 2007-06-28 21:35:49 一,sql脚本(红色为修改后正确的语句)drop table if exists products;create table products( id int not null auto_increment, ...
     2007年6月28日MySql错误:ERROR 1005: Can't create table 
     2007-06-28 21:35:49 
    
    

    一,sql脚本(红色为修改后正确的语句)

    drop table if exists products; create table products(  id  int  not null auto_increment,  title  varchar(100) not null,  description text  not null,  image_url varchar(200) not null,  price  decimal(10,2) not null,  date_available  datetime not null,  primary key(id) )type=innodb;

    drop table if exists line_items;

    create table line_items(  id  int  not null auto_increment,  product_id int  not null,  quantity int  not null default 0,  unit_price decimal(10,2) not null,

     constraint fk_items_product foreign key (product_id) references producets(id),

    index(product_id)  primary key(id) )type=innodb;

    二,执行提示错误:ERROR 1005: Can't create table

    三,原因:

    1,MySQL支持外键约束,并提供与其它DB相同的功能,但表类型必须为 InnoDB 2、建外键的表的那个列要加上index 四 更改表的type语句        alter table type=innoDB 五.创建索引       create index indexName on article_class(article_class_id); 六 .创建外建      alter table jspmo add constraint FK_Reference_1 foreign key (class_id)       references article_class (article_class_id) on delete restrict on update restrict;

    展开全文
  • 今天创建表添加外键时遇见这种错误,查阅了两篇文章,觉得有点扯,不过给了我灵感,原来是外键要引用的主表的字段没有添加约束,修改后的代码如下,不再报错。嘻嘻嘻。看了一下笔记,下面添加一下外键需要注意的点:...
  • MySQL 1005- Can't create table 'myschool.#sql-1200 48'(errno: 150)错误:创建外键失败,显示的确实创建表失败??? 错误示例: 解决方案: 因为从表的外键列,允许了为空值,要设置为不允许为空 把...
  • 创建外键出现上述150错误,多方排查。 有3个原因 1、类型不一样不匹配 2、找不到引用的列(非sql手动设计表添加约束外键应该不会出现此问题) 3、2张表的字符编码不一致或者存储引擎不一样,比如一张是MyISAM,...
  • pymysql.err.InternalError: (1005, "Can't create table 'bigdt.#sql-3f2_f045' (errno: 150)") 看到这个错误挺让人头秃的,莫名其妙。总的来说解决方向大致分为: 1、数据类型不相同,可能一个int,一个int ...
  • 像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经被报告是一个mysql本身的bug并出现在mysql 开发者列表当中很多年了,然而这...
  •  为数据库中某一个表创建外键时,提示上面的错误,在网上搜索了下错误原因,看到说有可能是“两个字段的类型或者大小不严格匹配” 看到自己的两个表果然有这个问题,就是两个关联的字段一个是INT(10),...
  • 当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。
  • Oracle创建外键约束

    2019-10-23 13:50:21
    1. 创建时创建外键 CREATE TABLE T1 (employee_id NUMBER(4), last_name VARCHAR2(10), job_id VARCHAR2(9), salary NUMBER(7,2), department_id CONSTRAINT fk_dep...
  • MySQL创建外键方式

    2019-12-20 17:11:24
    CREATE table if not exists grade( gradeid int(10) primary key auto_increment, gradeName varchar(50) not NULL ); #创建外键方式一:创建子表的同时创建外键 #学生信息表(学号、姓名、性别、年级、...
  • 错误信息如下 Cant create table xx.#sql-d14_4f (errno: 150) 经查 建立外键的列于关联列的类型不一致导致的
  • 在MySQL里创建外键时,提示错误,但只提示很简单的信息:ERROR 1005 (HY000): Can’t create table ‘db_qxztc.qx_userssssnew’ (errno: 150)。根本起不到解决问题的作用。 要看错误的详细提示,可以使用命令:(在...
  • 当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的。像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql...
  • mysql创建外键失败

    2020-05-18 14:42:50
    在用sql yog创建时创建外键失败 create table Course (Cno char(4) primary key, Cname char(40) not null, Cpno char(4) foreign key references //表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列...
  • sql创建外键

    千次阅读 2015-09-15 08:39:59
    创建外键约束有两种情形,一是在建立表的时候就创建,另一种是在表建立以后再修改...create table UserInfo( UserID int identity(1,1) primary key, --递增主键 UserAccounts varchar(20), UserName varchar(20), U
  • 总得来说是因为两个表的字段类型不一致,例如: 两个字段的类型或大小不严格匹配,一个为tinyint,另一个为char;...外键的名字有重复或与键值重复。两个表必须都是用InnoDB引擎,事实上MyISAM引擎是不会产生
  • 创建主键 创建外键 创建约束

    千次阅读 2015-06-24 11:46:56
    笔记本 创建表(包括创建主键,外键,非空列,唯一) **************** 创建主键(三种方法) ...create table student (sno char(5) primary key,/*学号*/ /*可以直接指定主键*/ sname char(20) not null,/*姓名*/
  • alter table xx_shop_info add index FK9050F5D83304CDDC (shop_area), add constraint FK9050F5D83304CDDC foreign key (shop_area) references xx_shop_area (id) ...Error : Can't create table '#s
  • mysql创建外键

    2016-07-17 14:33:10
    如果数据库两个表有相同字段,通过外键将两个表联系...查看创建表命令:show create table 表名字; 创建表: mysql> create table provience( -> id smallint unsigned auto_increment primary key, -> uname v
  • mysql数据库创建外键

    千次阅读 2019-01-09 17:02:04
    创建外键注意的地方 必须是innodb引擎 注意外键字段类型和另一张表主键字段类型一致否则报...create table class(cid int not null auto_increment, caption char(50) not null, primary key(cid)) engine...
  • 1、外键的引用类型不一样,主键是int外键是char  2、找不到主表中 引用的列  3、主键和外键的字符编码不一致  4.还有要建立外键的话,要先建立索引。没有建立索引也会出错 然后看了一下我数据库,发现的...
  • 【MySQL】创建外键的两种方式

    万次阅读 多人点赞 2019-02-19 10:55:21
    目录 前言 1.创建增加外键 2.已存在表增加外键 参考资料 ...使用MySQL关联数据表创建外键的两种方式:创建增加外键,已存在表增加外键。...CREATE TABLE Vendors ( -- 供应商ID:主键列,自增...
  • 教你快速掌握DB2数据库创建外键时的选项创建外键时的选项: 1.创建测试表: drop table student; drop table class; drop table student_class; Create table student(student_id integer not null,student_name ...
  • 在两个ENGINE为InnoDB的table执行增加外键的语句 alter table dongtong_product add foreign key (type_parent) references dongtong_product_type(id);

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 105,399
精华内容 42,159
关键字:

createtable时创建外键