精华内容
下载资源
问答
  • 如何查看MySQL数据库主外键关系

    千次阅读 2019-08-23 16:45:51
    查看所有的主外键关系,例如有一张表为:role,输入以下命令 SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME='role'

    查看所有的主外键关系,例如有一张表为:role,输入以下命令

    SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME='role'
    
    展开全文
  • MySql数据库主键外键与数据库设计

    千次阅读 2019-05-20 01:38:57
    MySql数据库主键外键与数据库设计

    MySql数据库主键外键与数据库设计

    首先要指出的:
    列、字段、属性是一个概念
    行、记录、元组是一个概念

    MySQL数据库CONSTRAINT约束:非空约束,唯一约束,主键约束,外键约束
    show create table table_name\G;可以查看已建表的相关信息,包括主外键,外键名,存储引擎,编码方式等等

    主键约束

    主键:表中经常有一个列或者多列的组合,其值能唯一的标识表中的每一行,这样的一列或多列称为表的主键,通过它可以强制表的实体完整性,当创建或更改标识可以通过定义primary key约束来创建主键,一个表只能有一个primary key约束,而且primary key约束的列不能接受空值,由于primary key约束确保该列数据的唯一性,所以经常用来定义标识列。主键自带索引,并且一个表只能有一个主键约束
        实体完整性这项规则要求每个数据表都必须有主键,而作为主键的所有字段,其属性必须是独一及非空值。

    主键的作用
    用作标识列,区分其他字段
    强制表的实体完整性
    用于其他表的外键关联
    用于记录的修改与删除
    加速查询

    • 创建主键约束
    1. 建表时创建主键
      create table Student(id int primary key,name varchar(32) default null)
    2. 建表后添加主键
      create table Student(id int,name varchar(32));
      alter table Student add primary key(id);
    3. 建表后新加字段并设为主键
      create table Mother(id int,name varchar(32));
      alter tabler Mother add age int primary key;

    删除主键约束
    alter table Student drop primary key;

    联合主键:用两个或两个以上的字段组成的主键,用这个主键包含的字段作为主键约束,这个组合在数据表中是唯一,且加了主键索引。

    创建表时创建联合主键
    create table STUDENT(id int auto_increment,courser int,name varchar(10),primary key(id,courser));

    已有的表添加联合主键
    create table Person(id int,province varchar(8),city varchar(8),country varchar(8));
    alter table Person add constraint main_key primary key(id,province);
    Person是表名,main_key 是联合主键名。在建好的表中我们添加了如下数据:
    在这里插入图片描述

    由于id、province是联合主键,所以我们想要创立
    在这里插入图片描述
    时,会出现如下报错
    在这里插入图片描述
    但是我们可以让一个联合主键的一个字段名一样,另一个字段名不一样来创建,即联合主键的字段名不完全一致:
    在这里插入图片描述

    删除联合主键的主键约束,由于主键约束在表单中的唯一性,我们可以直接删除:
    alter table Person drop primary key;

    外键约束

    为了满足关系型数据库的第三范式,降低数据冗余,在表与表之间需要满足响应的关系,可以为表和表之间设置外键。
    外键约束:用于两个表的数据的数据连接,一个表可以有多个外键,MySQL中的innodb存储引擎支持外键;
    外键对应的是参照完整性,一个表的外键可以是空值,若不为空值,则每一个外键的值必须等于另一个表中的主键的某个值。定义一个外键后,不允许删除另一个表中具有关联关系的行;外键的主要作用是保持数据的一致性、完整性。一个主键表某一字段的和跟他有关联的外键表的某一字段有直接的关联。
    对于有外键关联的两个表来说:
    主表(父表):主键所在的表
    从表(字表):外键所在的表

    mysql设置外键约束字段选取
    父表必须是已经存在或者正在创建的表
    父表主键不能包含空值,但外键可以有
    外键列的数目必须和父表的主键中列的数目相同
    从表外键列和主表主键列对应的列的数据类型相同

    创建表时设置外键约束
    create table friend(id int ,name varchar(20),foreign key(id) references child(id));
    父表child,子表friend

    在已有的表中设置外键约束
    alter table subject add foreign key(id) references child(id);
    注意:子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配,如果类型不一样,则创建子表时会出现错误。

    删除外键约束
    有外键约束的列必须先删除外键,然后才能删除该列:
    alter table subject drop foreign key subject_ibfk_1;
    subject_ibfk_1是外键的名字,我们可以自己设,也可以系统生成,这样的话我们要查看建表信息才能知道外键名字是什么。

    查看表中的外键
    show create table table_name
    select * from information_schema.key_column_usage;

    数据库设计

    数据库范式与设计:一对一,一对多,多对多
    关系型数据库的特点:基本组成但对为二维表,各二维表之间存在一定的关系,数据库范式级别越高,数据冗余越低
    第一范式:字段不可再分,只要是个二维表都符合第一范式
    第二范式:每个表都有一个能区分每条记录的主键(非空 唯一 索引)
    第三范式:表中所用数据元素不但能惟一的被主关键字所标识,而且它们之间还必须相互独立,不存在其他的函数关系,只有通过外键来互相联系

    表与表之间的三种关系:
    一对一:如学生分数表与学生信息表,两表有一样的主键ID
    一对多:如教学楼和教室,班级表和学生表的班级ID,多个从表通过外键连接主表主键完成一对多的关系
    多对多:如学生表和课程表,演员和电影;以演员和电影为例,分别建立演员表和课程表,演员表电影表不重复,然后建立一个关系表,将两个表连接起来,变成连个一对多的关系:
    在这里插入图片描述

    建立演员表
    create table actors(id int auto_increment primary key,name varchar(10));
    建立电影表
    create table films(id int auto_increment primary key,name varchar(20));
    建立中间表,并通过外键连接其他相关表
    create table link(id int auto_increment primary key,id_a int,id_f int);
    alter table link add foreign key(id_a) references films(id);
    alter table link add foreign key(id_f) references actors(id);

    这里我们想查询成龙演过的电影:
    select name,f_name from(select * from actors inner join(select id_a,id_f,name as f_name from link inner join films on films.id=link.id_f) as a on a.id_a=id having id=1) as b;

    展开全文
  • mysql数据库创建外键老是失败? 可能原因: 1、这是建外键的列与要关联的列类型不匹配造成的; 2、一个表用powerdesigner导入的整型长度为11,另一个直接在mysql中建立的表默认整型长度是10; 3、外键...

    mysql数据库创建外键老是失败?

    可能原因:


    1、这是建外键的列与要关联的列类型不匹配造成的;

    2、一个表用powerdesigner导入的整型长度为11,另一个直接在mysql中建立的表默认整型长度是10;

    3、外键的名称重复,如果是自动生成的外键名,一般不会重复;

    4、两个表中本来已有数据了,建立外键时没保证:参照表 中的所有记录 的外键所在列 的值 均需在 被参照表 中 存在 某条唯一的记录 的 主键值 与之相等。一旦不存在,则无法建立外键。此时,你可以考虑在 被参照表 中 补充所需的记录,或者直接把两个表中任一个的所有记录清空。

    展开全文
  • mysql数据库创建外键

    千次阅读 2019-01-09 17:02:04
    创建外键注意的地方 必须是innodb引擎 注意外键字段类型和另一张表主键字段类型一致否则报“cannot add foreign key constraint“ 创建 create table class(cid int not null auto_increment, caption ...

    创建外键注意的地方

    1. 必须是innodb引擎

    2. 注意外键字段类型和另一张表主键字段类型一致否则报“cannot add foreign key constraint“

    创建

    create table class(cid int not null auto_increment, caption char(50) not null, primary key(cid)) engine=innodb charset=utf8;

    create table student(sid int not null auto_increment, sname char(20) not null, class_id int not null, 
        primary key(sid), foreign key(class_id) references class(cid) )engine=innodb charset=utf8;

     

    注:references class 是另一张表,(cid)是class表的主键

    若表已创建好,则通过如下规则:

    alter table 要添加外键的表 add foreign key(要添加外键的表将要被设为外键的字段) references 与外键相关的表 (与外键相关的表的主键)

    alter table score add foreign key (corse_id) references course (cid);

     

     

     

    展开全文
  • 传递依赖:A→B→C,则对于同一个B可能存在不同的C,此时将B作为外键,重新设计数据库外键是空值或等于R1关系中某个主键值。 关系的完整性约束 实体完整性:关键字非空,如关键字是多个属性的组合,则所有...
  • mysql数据库_外键

    2016-03-03 17:24:31
    回顾一下存储引擎 innoDB:支持事务,支持外键 myISAM:不支持事务,不支持外键 ...1.去除数据库垃圾数据 2.连带更新 举例: 部门表: department 班级表 :classes 学生表: student department(表) id name 1
  • java获取数据库主外键

    2014-02-19 14:56:01
    使用eclipse获取mysql数据库中的表结构以及主外键
  • mysql 数据库添加外键的几种方式

    万次阅读 2019-01-06 11:32:57
    创建表: 班级 CREATE TABLE class(cid INT PRIMARY KEY AUTO_INCREMENT, sname VARCHAR(15) NOT NULL) INSERT INTO class VALUES(NULL,'六年级一班') INSERT INTO class VALUES(NULL,'六年级二班') 第一种...
  • 数据库的基本查询级一对多的外键创建 1 创建两张表,学生表和班级表,创建命令如下: 班级表:有两个字段:id 和 班级名称 create table classes( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, name VARCHAR(10) ...
  • Navicat for Mysql在对外键操作时 1.外键的作用: 使两张表形成关联,外键只能引用外表中的指定列的值! 2.建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表的主键)。 3.事件触发限制: on ...
  • MySQL数据库主外键

    2020-09-08 22:48:14
    1、主外键的定义 主关键字(primary key ): 简称主键,它是表中的一个字段,它的值用于唯一地标识表中的某一条记录。 外关键字(foreign key) : 简称外键,是用于建立或加强两个表数据之间的链接的一列。 如果公共...
  • 今天对已存在的两个表中的一个表添加另一个表的主键为外键,遇到以下错误: sql 1452 Cannot add or update a child row:a foreign key constraint fails 原因: 设置的外键和对应的另一个表的...
  • MYSQL多表设计; 一对多 ,多对多,一对一。 外键的使用; 一对多 的关系; 在一对多的关系时候,用单的主键作为多的外键约束。保证数据的完整性。PS;AVG()聚合函数不能和SUM()聚合函数嵌套使用,需要进行...
  • mysql数据库主外键的设置语句

    千次阅读 2019-07-04 10:09:52
    create table tableName( k1 int auto_increment, k2 varchar(50) not null, k3… primary key(k1), foreign key(kn) reference otherTable(ok) ...//此表中外键kn参照主键表otherTable的主键ok ...
  • mysql删除数据库所有外键

    千次阅读 2018-10-22 17:06:52
    删除所有表的外键  查询schema中所有外键名称然后拼接生成删除语句,再执行。 SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME,' ;')  FROM information_schema...
  • MySQL数据库基本操作————主外键 我们熟悉了如何创建一个数据库,我也不细说了,只要注意一下登录问题就行了,当然最好每一个地方注释一下,或回车一下保持代码的整齐,以便于查看 首先我们创建一个数据库:...
  • MySQL数据库外键的相关知识详解本文我们以一个具体的例子来介绍了MySQL数据库外键的相关知识,以及使用外键时的一些相关的注意事项,希望能够对您有所帮助。作者:ljfbest来源:CSDN博客|2011-09-01 10:56 收藏 ...
  • mysql查询主外键

    千次阅读 2012-09-27 10:47:50
    #查询数据库的所有主外键 SELECT TABLE_NAME '表名',CONSTRAINT_NAME '主/外键名称',COLUMN_NAME '字段名' ,REFERENCED_TABLE_NAME '主表名称',REFERENCED_COLUMN_NAME '主表字段' FROM information_schema.KEY_...
  • mysqlmysql主外键关系(详细精讲) 作者:yjqyyjw 一、外键: 1、什么是外键 2、外键语法 3、外键的条件 4、添加外键 5、删除外键 1、什么是外键: 主键:是唯一标识一条记录,不能有重复...
  • Mysql数据库主键外键的理解 1:什么是主键 在一张表中,用来唯一标识一条记录的字段集,叫做关键字或者关键码,简称主键 2:什么是外键 一张表的非属性是另一个表的属性就是这个表的外键 一张表的...
  • mysql主外键关系

    2017-02-23 21:01:51
    1、什么是外键 2、外键语法 3、外键的条件 4、添加外键 5、删除外键 1、什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复...
  • MySQL 创建主外键

    千次阅读 2016-10-03 10:53:25
    外键定义语法: [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, …) REFERENCES tbl_name (index_col_name, …) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] [ON UPDATE {...
  • 数据库物理外键和逻辑外键

    千次阅读 2020-11-02 17:01:45
    物理外键性能问题 物理外键性能问题总结:...mysql外键设计问题 虽然很多人都不推荐你在关系型数据库使用外键 但你更多听到的是mysql的,而不是SQLserver或者其他。比较公认的是,他的外键设计的 的确不是很好, 限制
  • MySql数据库外键关联

    2016-08-24 22:21:08
    设置外键关联是可以设置在删除时和在更新时的操作,其中有三个比较重要的。 (1)层叠(级联):cache ...(2)设为null,当表删除一条记录,那么从表对应的引用了被删除的记录的主键作为外键的记录的外键将会设
  • 1.不管是在企业级的数据库设计中还是在...因为在MySQL中只有InnoDB类型的表才支持外键(两张表的存储引擎一致)。 第三,设置外键时“删除时”设置为“SET NULL”。 第四,是外键所关联的主键不能是无符号或者自...
  • 直接把需要同步的表从主服务器的库表拖到从服务器的,这个时候因为主服务器的一些表有主外键联系,也会一并在从服务器,当主服务器的有主外键关系的表增加数据的时候,会报主外键错误    解决方案:    ...
  • (1)我们在进行SSH开发大※的项目的时候,使用myeclipse自带的hibernate的逆向工程工具时,发现竟然无法生成one-to-one one-to-many等的主外键关系,明明的数据库建时已经有主外键关系了.为啥逆向生成时就不行了呢?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,731
精华内容 21,092
关键字:

mysql数据库主外键

mysql 订阅