精华内容
下载资源
问答
  • 如何查看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'
    
    展开全文
  • 需要建立主外键关系的两个表的存储引擎必须是InnoDB。 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型。 外键列和参照列必须创建索引,如果外键列不存在索引,mysql将自动创建索引。 一、SQL...
  • MySQL数据库主外键

    2020-09-08 22:48:14
    1、主外键的定义 主关键字(primary key ): 简称主键,它是表中的一个字段,它的值用于唯一地标识表中的某一条记录。 外关键字(foreign key) : 简称外键,是用于建立或加强两个表数据之间的链接的一列。 如果公共...

    1、主外键的定义

    主关键字(primary key ): 简称主键,它是表中的一个字段,它的值用于唯一地标识表中的某一条记录。

    外关键字(foreign key) : 简称外键,是用于建立或加强两个表数据之间的链接的一列。

    如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。
    以另一个关系的外键作主关键字的表被称为主表(父表)具有此外键的表被称为主表的从表(子表)
    外键又称作外关键字

    2、主外键的区别

    主键:
    定义:唯一标识一条记录,不能有重复的,不允许为空。
    作用:用来保证数据完整性
    个数:只有一个

    外键:
    定义:表的外键是另一个表的主键,外键可以有重复的,可以是空值。
    作用:用来和其他表建立联系。
    个数:一个表可以有许多外键。

    3、创建主外键

    3.1、创建主键

    # 创建学生表加主键方法一
    create table student(
    	sid char(4) primary key,# 设置主键
    	sname char(20),
    	sage int,
    	ssex char(2)
    );
    
    # 创建课程表加主键方法二
    create table course(
    	cid char(4),
    	cname char(8),
    	primary key(cid)
    );
    

    3.2、创建外键

    # 创建成绩表设置外键
    create table score(
    	sid char(4),
    	cid char(4),
    	score int(3),
    	foreign key(sid)references student(sid),
    	foreign key(cid)references course(cid),
    )
    

    4、增删主外键

    4.1、增删主键

    alter table 表名 drop primary key;# 删除主键
    alter table 表名 add primary key (列名);# 现有列上添加主键
    

    4.2、增删外键

    alter table 子表名 add [constraint fk_son]foreign key(子表的外键名称)references 父表名(父表的主键名称); #添加外键约束。fk_sno为外键ID名,若不添加,系统会自动配一个。
    alter table 子表名 drop foreign key fk_sno; #删除外键约束。fk_sno为外键ID名, 若不知,可查询建表明细(show create table 表名)。
    
    展开全文
  • 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 查看数据库中有主外键关系的表信息 SQL: SELECT C.TABLE_SCHEMA 拥有者, C.REFERENCED_TABLE_NAME 父表名称 , C.REFERENCED_COLUMN_NAME 父表字段 , C.TABLE_NAME 子表名称, C.COLUMN_NAME 子表字段, C...

    MySQL 查看数据库中有主外键关系的表信息

    1.根据库

    
    SQLSELECT C.TABLE_SCHEMA            拥有者,
               C.REFERENCED_TABLE_NAME  父表名称 ,
               C.REFERENCED_COLUMN_NAME 父表字段 ,
               C.TABLE_NAME             子表名称,
               C.COLUMN_NAME            子表字段,
               C.CONSTRAINT_NAME        约束名,
               T.TABLE_COMMENT          表注释,
               R.UPDATE_RULE            约束更新规则,
               R.DELETE_RULE            约束删除规则
          FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE C
          JOIN INFORMATION_SCHEMA. TABLES T
            ON T.TABLE_NAME = C.TABLE_NAME
          JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS R
            ON R.TABLE_NAME = C.TABLE_NAME
           AND R.CONSTRAINT_NAME = C.CONSTRAINT_NAME
           AND R.REFERENCED_TABLE_NAME = C.REFERENCED_TABLE_NAME
          WHERE C.REFERENCED_TABLE_NAME IS NOT NULL ; 
    

    • UPDATE/DELETE_RULE 类型:
    1. CASCADE: 从父表中删除或更新对应的行 ,同时自动的删除或更新自表中匹配的行 。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持 。
    2. SET NULL: 从父表中删除或更新对应的行 ,同时将子表中的外键列设为空 。注意, 这些在外键列没有被设为NOT NULL时才有效。 ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持 。
    3. NO ACTION: InnoDB拒绝删除或者更新父表 。
    4. RESTRICT: 拒绝删除或者更新父表 。指定RESTRICT( 或者NO ACTION )和忽略ON DELETE或者ON UPDATE选项的效果是一样的 。
    5. SET DEFAULT: InnoDB目前不支持 。

    表信息参考列表:
    REFERENTIAL_CONSTRAINTS表注释参考:
    KEY_COLUMN_USAGE表注释参考:

    2.根据表

    SELECT 
      TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
    FROM
      INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    WHERE
      REFERENCED_TABLE_SCHEMA = '库名' AND
      REFERENCED_TABLE_NAME = '表名';
    

    3.根据字段

    SELECT 
      TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
    FROM
      INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    WHERE
      REFERENCED_TABLE_SCHEMA = '库名' AND
      REFERENCED_COLUMN_NAME = '字段名';
    

    转载出处
    http://blog.itpub.net
    http://www.voidcn.com/article/p-hanjbxdp-bsg.html

    展开全文
  • E-R 图 (实体关系模型) E-R图也称实体-联系图(Entity Relationship Diagram), 提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。  它是描述现实世界关系概念模型的有效方法。  是表示...
  • 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 ...
  • java获取数据库主外键

    2014-02-19 14:56:01
    使用eclipse获取mysql数据库中的表结构以及主外键
  • mysqlmysql主外键关系(详细精讲) 作者:yjqyyjw 一、外键: 1、什么是外键 2、外键语法 3、外键的条件 4、添加外键 5、删除外键 1、什么是外键: 主键:是唯一标识一条记录,不能有重复...
  • DROP TABLE IF EXISTS News ;... COMMENT ‘主键’ 备注 PRIMARY KEY (Id) 主键标识符 创建外键: alter table News add constraint fk foreign key (NewsClassifyId) references NewsClassify(Id);
  • 今天对已存在的两个表中的一个表添加另一个表的主键为外键,遇到以下错误: sql 1452 Cannot add or update a child row:a foreign key constraint fails 原因: 设置的外键和对应的另一个表的...
  • 还有十五分钟图书馆关闭,赶紧来把今天的关于MySQL外键修改的内容记录一下。 背景: 在写作业的时候必要的建立了两个数据表。 users表和records表修改前如下所示: 可以看出开始的情况是: records的user_id是外键...
  • 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数据库创建外键老是失败? 可能原因: 1、这是建外键的列与要关联的列类型不匹配造成的; 2、一个表用powerdesigner导入的整型长度为11,另一个直接在mysql中建立的表默认整型长度是10; 3、外键...
  • MySQL数据库中添加外键的两种方式

    千次阅读 2019-04-11 17:02:42
    关于MySQL数据表中添加外键的两种方式: 第一种方式          Alter table 表名 add [constraint 外键名字] foreign key [外键字段] references 父表(主键字段);...
  • mysql数据类型 1.1数值型:int tinyint微整型 smallint 小整型 1.2小数类型:decimal(总位数,小数位) 例:价格 decimal(5,2) 100.00-999.99 日期和时间类型 datetime 年月日时分秒 字符串类型 char(字符串的长度)...
  • create table tableName( k1 int auto_increment, k2 varchar(50) not null, k3… primary key(k1), foreign key(kn) reference ...//此表中外键kn参照主键表otherTable的主键ok 主键的作用:其值能唯一的标识每一...
  • 数据库主外键概念详细介绍

    千次阅读 多人点赞 2020-05-17 18:18:33
    关于数据库主外键设置问题 一、主外键概念 主键 ​ 1、主键 ​ 简单而言,能够唯一的表示表中的每一行数据,这样的列属性成为表的主键,使用表主键可以保证实体的完整性,可对表内数据进行修改、删除时使用主键来...
  • 数据库物理外键和逻辑外键

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

    千次阅读 2020-03-20 20:15:42
    MySQL数据库的主键和外键详解 主键 主键的定义 主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 ...
  • 需要建立主外键关系的两个表的存储引擎必须是InnoDB。 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型。 外键列和参照列必须创建索引,如果外键列不存在索引,mysql将自动创建索引。 一、SQL...
  • MySQL数据库外键和数据完整性

    千次阅读 2019-07-02 19:51:35
    传递依赖:A→B→C,则对于同一个B可能存在不同的C,此时将B作为外键,重新设计数据库外键是空值或等于R1关系中某个主键值。 关系的完整性约束 实体完整性:关键字非空,如关键字是多个属性的组合,则所有...
  • MYSQL多表设计; 一对多 ,多对多,一对一。 外键的使用; 一对多 的关系; 在一对多的关系时候,用单的主键作为多的外键约束。保证数据的完整性。PS;AVG()聚合函数不能和SUM()聚合函数嵌套使用,需要进行...
  •  主外键关系 一个宿舍有多位同学,一个同学只有一个宿舍 一对多 创建同学和宿舍表 CREATE TABLE student (study_num INT PRIMARY KEY auto_increment,name CHAR(30),gender CHAR(10),age int,home_id ...
  • 数据库的基本查询级一对多的外键创建 1 创建两张表,学生表和班级表,创建命令如下: 班级表:有两个字段:id 和 班级名称 create table classes( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, name VARCHAR(10) ...
  • 换句话说如果关系模式R1中的某属性集不是自己的主键,而是关系模式R2的主键,则该属性集称为是关系模式R1的外键。 二:主键表和外键表的理解 (1)以公共关键字作主键的表为主键表(父表,表) (2)以公共关键字...
  • PHP操作mysql: ...mysql扩展:纯面向过程,里面全是函数,加载扩展后可以调用函数。(当前只能使用面向过程) mysqli扩展:面下过程+面向对象,里面有函数也有类,加载扩展后可以选择调用函数或者调用类...
  • Navicat for Mysql在对外键操作时 1.外键的作用: 使两张表形成关联,外键只能引用外表中的指定列的值! 2.建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表的主键)。 3.事件触发限制: on ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,545
精华内容 21,418
关键字:

mysql数据库主外键关系

mysql 订阅