精华内容
下载资源
问答
  • mysql一对多设置外键
    2021-01-19 23:41:06

    作者:二歪求知iSk2y

    链接:https://www.jianshu.com/p/2b27c7ba0653

    来源:简书

    下面以departments和staff_info表为例(为staff_info添加指向departments的外键)

    一个表的字段作为外键的条件:

    列值必须非空且唯一

    测试例子如下:

    mysql> create table departments (dep_id int(4),dep_name varchar(11));

    Query OK,0 rows affected (0.02sec)

    mysql>desc departments;+----------+-------------+------+-----+---------+-------+

    | Field | Type | Null | Key | Default | Extra |

    +----------+-------------+------+-----+---------+-------+

    | dep_id | int(4) | YES | | NULL | |

    | dep_name | varchar(11) | YES | | NULL | |

    +----------+-------------+------+-----+---------+-------+rowsin set (0.00sec)

    # 创建外键不成功

    mysql> create table staff_info (s_id int,name varchar(20),dep_id int,foreign key(dep_id) references departments(dep_id));

    ERROR1215(HY000): Cannot add foreign key

    # 设置dep_id非空,仍然不能成功创建外键

    mysql> alter table departments modify dep_id int(4) not null;

    Query OK,0 rows affected (0.02sec)

    Records:0 Duplicates: 0 Warnings: 0mysql>desc departments;+----------+-------------+------+-----+---------+-------+

    | Field | Type | Null | Key | Default | Extra |

    +----------+-------------+------+-----+---------+-------+

    | dep_id | int(4) | NO | | NULL | |

    | dep_name | varchar(11) | YES | | NULL | |

    +----------+-------------+------+-----+---------+-------+rowsin set (0.00sec)

    mysql> create table staff_info (s_id int,name varchar(20),dep_id int,foreign key(dep_id) references departments(dep_id));

    ERROR1215(HY000): Cannot add foreign key constraint

    # 当设置字段为unique唯一字段时,设置该字段为外键成功

    mysql> alter table departments modify dep_id int(4) unique;

    Query OK,0 rows affected (0.01sec)

    Records:0 Duplicates: 0 Warnings: 0mysql> desc departments;

    +----------+-------------+------+-----+---------+-------+

    | Field | Type | Null | Key | Default | Extra |

    +----------+-------------+------+-----+---------+-------+

    | dep_id | int(4) | YES | UNI | NULL | |

    | dep_name | varchar(11) | YES | | NULL | |

    +----------+-------------+------+-----+---------+-------+rowsin set (0.01sec)

    mysql> create table staff_info (s_id int,name varchar(20),dep_id int,foreign key(dep_id) references departments(dep_id));

    Query OK,0 rows affected (0.02 sec)

    特别注意:需要主外结合的两个表必须是使用同样的一个引擎类型:两个表必须都是innodb存储引擎

    添加外键的方法

    一般有两种方法,在创建表的时候添加,或者后期再添加

    创建时添加

    mysql>create table score(-> sid int not nullauto_increment primary key,-> student_id int,-> corse_id int,-> number int not null,->constraint fk_sid foreign key (student_id) references student(sid),->constraint fk_corse_id foreign key (corse_id) references course(cid));-----------------------------------------------------------------------------------[CONSTRAINT symbol] FOREIGN KEY [id] (从表的字段1)

    REFERENCES tbl_name (主表的字段2)

    [ON DELETE {RESTRICT| CASCADE | SET NULL |NO ACTION}]

    [ON UPDATE {RESTRICT| CASCADE | SET NULL | NO ACTION}

    CONSTRAINT symbol:可以给这个外键约束起一个名字,有了名字,以后找到它就很方便了。如果不加此参数的话,系统会自动分配一个名字。

    FOREIGN KEY:将从表中的字段1作为外键的字段。

    REFERENCES:映射到主表的字段2。

    ON DELETE后面的四个参数:代表的是当删除主表的记录时,所做的约定。

    b6d4600f910da84a23efc6432f2d9a3b.png

    创建后添加

    ALTER TABLE employee ADD FOREIGN KEY(dept_id) REFERENCES department(id);

    ALTER TABLE employee:在从表employee中进行操作;

    ADD FOREIGN KEY(dept_id):将从表的字段dept_id添加为外键;

    REFERENCES department(id):映射到主表department当中为id的字段。

    删除外键

    删除外键时如果你不知道外键名字 就先获取外键名字

    show create table emp \G;

    删除外键

    alter table emp drop foreign key 外键名;

    下面的才是重点

    关系的实现

    在实体关系模型中,我们知道有三种关系:一对一、一对多、多对多。这只是概念上的关系,但是在真实的关系数据库中,我们只有外键,并没有这三种关系,那么我们就来说一说在关系数据库管理系统中,怎么实现这三种关系。

    一对多

    这里先讲解一对多,因为这个关系最简单。一对多和多对一是一回事,所以就不再提多对一这个词。一对多的概念是一个对象A会对应多个对象B,而从B的角度看,一个对象B只会对于一个对象A。比如说班级和学生就是一对多关系。一个班级对应多个学生,一个学生只会对于一个班级。

    ​ 一对多的关系之所以说简单,是因为RDBMS的【外键】其实就是表示一对多关系。对于一对多关系,我们只需要在“多”的这个表中建立“一”的外键关联即可,而“一”这边的表不需要做任何修改。比如前面说到的班级学生关系。班级表不变,学生表增加班级Id作为外键。

    多对多

    多对多的关系在数据库设计时比一对一要常见,所以这里先说说多对多。多对多是一个对象A对应多个对象B,从B角度看,一个对象B也会对应多个对象A。比如说学生和课程的关系就是多对多关系。一个学生会学习多门课程,一门课程会有多个学生来选修。

    ​ 在RDBMS中,必须使用中间表来表示多对多的关系。中间表我们可以分成两种,一种是纯粹表示关系的中间表,一种是表示中间实体的中间表。

    ​ 纯粹表示关系的中间表很简单,只需要两列:AID和BID,AID以外键关联到A表的主键,BID以外键关联到B表的主键,然后这两个列组成联合主键。这个中间表纯粹是表示多对多关系而存在,在业务上不会有对应的实体与之对应。比如前面提到的学生和课程的关系,如果我们只需要知道哪些学生上哪些课,哪些课有哪些学生选,不需要有更多的信息的情况下,我们就可以建立“学生课程”中间表,里面只有学生ID和课程ID两个字段。

    ​ 中间实体是在纯粹的中间关系表的基础上,加上了更多的属性,从而形成了一个新的实体。比如前面提到的学生和课程的关系,如果我们需要记录学生选课的时间、学生选择这门课程后的考试成绩,那么我们就像建立一个“选课”实体,该实体具有如下属性:

    更多相关内容
  • 当然很自动化工具也可以做这样的事情。 删除表的时候有时会遇到这样的错误消息: ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails 这是因为你尝试删除的表中的字段...
  • 、创建表时添加外键 create table users( id int(10), name varchar(20), primary key(id), FOREIGN KEY (id) REFERENCES departments(id) ); 二、数据表已经创建了,如何添加外键? 有两种方式: 第种:打开...

    前言

    这篇文章适用的是一对多关系,如何判断一对多,多对多关系?请点下面的链接:
    【数据库】快速判断一对多,多对多关系,并建立数据库实体之间的映射

    一、创建表时添加外键

    create table users(
    id int(10),
    name varchar(20),
    primary key(id),
    FOREIGN KEY (id) REFERENCES departments(id)
    );
    

    二、数据表已经创建了,如何添加外键?

    有两种方式:
    第一种:打开SQLyog,照着下图操作,可视化关联外键
    在这里插入图片描述

    第二种,写SQL语句:

    alter table 表名 add constraint (外键名称) foreign key(外键列名称) REFERENCES 主表名称(主表列名称);
    

    三、一图搞明白一对多关系和创建外键:

    (图系本人于黑马程序员视频学习总结)
    在这里插入图片描述
    添加外键注意事项:
    1.
    在这里插入图片描述
    2.
    在这里插入图片描述

    展开全文
  • 外键约束 概念: 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。 语法: (1)添加约束 -- 创建表是添加外键约束 CREATE TABLE 表名( 列名 数据类型, … ...

    一、外键约束

    		概念:
    			外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。
    			
    		语法:
    			(1)添加约束
    				-- 创建表是添加外键约束
    				CREATE TABLE 表名(
    					列名 数据类型,
    					…
    					[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCE 主表(主表列名)
    				);
    				
    				-- 建完表后添加外键约束
    				ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCE 主表名称(主表列名称)
    				
    			(2)删除约束
    				ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
    

    案例

    首先创建员工信息表和部门信息表,并在员工表中添加外键。(把员工表当作从表,部门表当作主表),员工表和部门表就是一个多对一的案例
    
    -- 员工表
    CREATE TABLE emp(
    	id int PRIMARY KEY auto_increment, -- id
    	name VARCHAR(20),-- 姓名
    	age int, -- 年龄
    	dep_id int, -- 部门
    	-- 添加外键dep_id,关联dept表的id主键
    	CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
    );
    
    -- 部门表
    CREATE TABLE dept(
    	id int PRIMARY KEY auto_increment, -- 部id
    	dep_name VARCHAR(20), -- 部门名称
    	addr VARCHAR(20) -- 地址
    );
    
    
    INSERT INTO emp(NAME,age,dep_id) VALUES
    ('张三',20,1),
    ('李四',20,1),
    ('王五',20,1),
    ('赵六',20,2),
    ('田七',22,2),
    ('周八',18,2);
    
    INSERT INTO dept(dep_name,addr) VALUES
    ('研发部','广州'),
    ('销售部','深圳');
    
    -- 删除外键
    ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept;
    

    按照如下图所示顺序执行sql语句:部门表–>员工表–>部门信息–>员工信息
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    执行完毕后如下图点击对象选中这两个表,点击鼠标右键,选中‘逆向表到模型’。
    

    在这里插入图片描述

    可以看到这两个表的模型中间有一条线,这条线代表外键。
    

    在这里插入图片描述

    此时我们执行删除外键的语句
    

    在这里插入图片描述

    然后再次执行上述‘逆向表到模型’ 可以看到线消失了,表示我们删除成功。
    

    在这里插入图片描述

    二、表关系之一对多

    1、一对多(多对一)
    	如:部门和员工,一个部门对应多个员工,一个员工对应一个部门
    	
    2、实现方式:在多的一方建立外键,指向一的一方的主键
    
    3、具体实现参照上例,部门和员工。
    

    三、表关系之多对多

    	1、多对多
    		如:商品和订单,一个商品对应多个订单,一个订单包含多个商品
    		
    	2、实现方式
    		建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
    	
    	3、实现案例:
    
    -- 订单表
    CREATE TABLE tb_order(
    	id int PRIMARY KEY auto_increment, -- id
    	payment double(10,2),
    	payment_type TINYINT,
    	status TINYINT
    );
    
    -- 商品表
    CREATE TABLE tb_goods(
    	id int PRIMARY KEY auto_increment,
    	title VARCHAR(100),
    	price DOUBLE(10,2)
    );
    
    
    -- 订单商品中间表
    CREATE TABLE tb_order_goods(
    	id int PRIMARY KEY auto_increment,
    	order_id int,
    	goods_id int,
    	count int
    );
    
    -- 添加外键,向订单商品中间表添加两个外键,关联商品表和订单表的主键。
    ALTER TABLE tb_order_goods ADD CONSTRAINT fk_order_id FOREIGN KEY(order_id) REFERENCES tb_order(id);
    ALTER TABLE tb_order_goods ADD CONSTRAINT fk_goods_id FOREIGN KEY(goods_id) REFERENCES tb_goods(id);
    
    
    
    如图执行创建三个表
    

    在这里插入图片描述

    执行添加外键的语句
    

    在这里插入图片描述

    再次执行上述‘逆向表到模型’  具体对应关系如图标注。
    

    在这里插入图片描述

    四、表关系之一对一

    	1、一对一
    		如:用户信息和用户详情信息
    		一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询能力
    	
    	2、实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)
    	
    	3、实现案例
    
    -- 创建用户表
    CREATE TABLE tb_user(
    	id int PRIMARY KEY auto_increment,
    	photo VARCHAR(30),
    	nickname VARCHAR(20),
    	age int,
    	sex char(2),
    	desc_id int NOT NULL UNIQUE -- 设置关联的用户详情表主键不为空且唯一
    );
    
    -- 创建用户详情表
    
    CREATE TABLE tb_user_desc(
    	id int PRIMARY KEY auto_increment,
    	city VARCHAR(10),
    	edu VARCHAR(10),
    	income DOUBLE(7,2),
    	status VARCHAR(10)
    );
    
    
    -- 添加用户
    INSERT INTO TABLE tb_user(photo,nickname,age,sex,desc_id) VALUES
    ('a.jpg','一场梦',23,'女',1),
    ('b.png','风清扬',35,'男',2),
    ('c.jpg','赵云',41,'男',3),
    
    -- 添加用户详情信息
    INSERT INTO TABLE tb_user_desc(city,edu,income,status) VALUES
    ('广州','硕士',300000,'单身'),
    ('湖北','本科',100000,'离异'),
    ('河南','本科',200000,'单身'),
    
    -- 添加外键
    ALTER TABLE tb_user ADD CONSTRAINT fk_user_userdesc FOREIGN KEY(desc_id) REFERENCES tb_user_desc(id);
    
    
    如图执行语句创建用户表和用户详情表
    

    在这里插入图片描述

    往两张表中添加数据
    

    在这里插入图片描述

    添加外键
    

    在这里插入图片描述

    再次执行上述‘逆向表到模型’  具体对应关系如图。
    

    在这里插入图片描述

    展开全文
  • MySQL数据库-外键链表之一对多,多对多外键链表之一对多外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索引一对多:就是...

    MySQL数据库-外键链表之一对多,多对多

    外键链表之一对多

    外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索引

    一对多:就是b表的某一个字段值对应a表外键里的多个值,前提是a表要与b表链表

    65fb61cd9a8815ad44e828e2d24142e6.png

    用Navicat 软件可视化外键链表

    1、a表里创建外键连接b表的主键,首先检查a表里要设置外键的字段、和b表里的主键字段数据类型是否一致,两者数据类型必须一致,不然无法建立索引【重点】

    2、Navicat 软件可视化打开a表,设计表-外键里设置

    1166d436059ef3a53e03e2a25aa28ce7.png

    3、设置后a表和b表就建立了外键链表,可以在a表的外键字段看b表的主键字段,说明他们两者的链表关系建立

    86cbcc474f7a7e92bc6ebc8b8a60ccd0.png

    外键链表约束

    a表和b表链表后,两表之间建立了链表关系,a表受b表约束,也就是当a表添加或者修改一条数据时、这条数据的外键字段值如果是b表主键字段不存在的,将无法添加,会报错【重点】

    97488022338f639d6b1f6cc9de90b42b.png

    sql语句创建表并且设置外键链表

    KEY 外键名称 (外键字段), #设置外键名称

    CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 连接表名称 (连接表主键字段) #设置外键链表

    --CREATE TABLE `usr` (--`id` int(20) NOT NULL AUTO_INCREMENT COMMENT 'id',--`yhm` char(255) NOT NULL COMMENT '用户名',--`xb` char(255) NOT NULL COMMENT '性别',--`nl` int(255) NOT NULL COMMENT '年龄',--`fzu` int(255) NOT NULL COMMENT '分组',--PRIMARY KEY (`id`),--KEY 外键名称 (外键字段), #设置外键名称--CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 连接表名称 (连接表主键字段) #设置外键链表--) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表-连表usr_fzu';

    CREATE TABLE`usr` (

    `id`int(20) NOT NULL AUTO_INCREMENT COMMENT 'id',

    `yhm`char(255) NOT NULL COMMENT '用户名',

    `xb`char(255) NOT NULL COMMENT '性别',

    `nl`int(255) NOT NULL COMMENT '年龄',

    `fzu`int(255) NOT NULL COMMENT '分组',PRIMARY KEY(`id`),KEY `usr-usr_fzu` (`fzu`),CONSTRAINT `usr-usr_fzu` FOREIGN KEY (`fzu`) REFERENCES`usr_fzu` (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表-连表usr_fzu';

    sql语句删除表的外键链表

    ALTER TABLE 删除外键的表名称 DROP FOREIGN KEY 创建外键时的外键名称;#删除外键

    --ALTER TABLE 删除外键的表名称 DROP FOREIGN KEY 创建外键时的外键名称;

    ALTER TABLE usr DROP FOREIGN KEY usr_usr_fzu;

    sql语句创建表的外键链表

    ALTER TABLE 要创建外键的表 ADD CONSTRAINT 设置外键名称 FOREIGN KEY (外键字段) REFERENCES 要连接的表名称 (要连接表的主键id);#创建外键

    --ALTER TABLE 要创建外键的表 ADD CONSTRAINT 设置外键名称 FOREIGN KEY (外键字段) REFERENCES 要连接的表名称 (要连接表的主键id);

    ALTER TABLE usr ADD CONSTRAINT usr_usr_fzu FOREIGN KEY (fzu) REFERENCES usr_fzu (id);

    sql语句连表查询

    LEFT JOIN:左连接的意思

    ON:接通

    SELECT 显示字段 FROM 外键表 LEFT JOIN 连接表 ON 外键表.外键字段 = 连接表.连接表主键; #链表查询,将连接表的信息组合到外键表一起显示出来

    a表 LEFT JOIN b表 ON a表.外键字段 = b表.主键字段

    --LEFT JOIN:左连接的意思--ON:接通--SELECT 显示字段 FROM 外键表 LEFT JOIN 连接表 ON 外键表.外键字段 = 连接表.连接表主键; #链表查询,将连接表的信息组合到外键表一起显示出来

    -- a表 LEFT JOIN b表 ON a表.外键字段 = b表.主键字段

    SELECT * FROM usr LEFT JOIN usr_fzu ON usr.fzu = usr_fzu.id;

    外键表

    b3ac2a6beb8c2ac248c2376cf861d8f2.png

    连接表

    bb00b43723604baabd4a680249efc159.png

    将连接表的信息组合到外键表一起显示出来

    914073685052c5562629657d24e46552.png

    sql语句连表加WHERE条件查询

    a表 LEFT JOIN b表 ON a表.外键字段 = b表.主键字段 WHERE b表.字段 = '值';

    举例:查询a表的外键值、属于b表主键值对应的、某个字段值的所有数据

    5b80dc76104fdfc25027e7934d48be33.png

    --a表 LEFT JOIN b表 ON a表.外键字段 = b表.主键字段 WHERE b表.字段 = '值';

    SELECT * FROM usr LEFT JOIN usr_fzu ON usr.fzu = usr_fzu.id WHERE usr_fzu.usr_fzu = 'A';

    dff1c3287cf0907d8879d57d62ef0697.png

    可以看到只查询了属于A的数据

    sql语句连表关键字说明

    连表关键字有3种:

    LEFT JOIN

    RIGHT JOIN

    INNER JOIN

    使用方法:

    a表 LEFT JOIN b表 ON a表.xx = b表.xx

    a表 RIGHT JOIN b表 ON a表.xx = b表.xx

    a表 INNER JOIN b表 ON a表.xx = b表.xx

    注意:a表是外键表,b表是连接表

    它们连表之间的区别

    LEFT JOIN :以LEFT JOIN前面的表为主,前面的表所有数据都会显示

    a表 LEFT JOIN b表:以a表为主,只显示与a表有关联的b表数据

    8d361ce2bbe2067bcb1cb94d06655310.png

    ea8bf2bf74be7812a268af17e19cd1ef.png

    SELECT * FROM usr LEFT JOIN usr_fzu ON usr.fzu = usr_fzu.id;

    8888677add7d8b5c29a9a3aedf79a242.png

    可以看到b表里的usr_fzu字段的C、D没有显示

    b表 LEFT JOIN a表:以b表为主,b表里与a表无关联数据也会显示

    8b01ce43b10ed4c1611d143794f5b3d6.png

    SELECT * FROM usr_fzu LEFT JOIN usr ON usr.fzu = usr_fzu.id;

    2635b11ed8633d4bd8482e236f9659a5.png

    可以看到b表里的usr_fzu字段里与a表无关联的也显示了

    RIGHT JOIN:是以RIGHT JOIN后面的表为主,显示后面表的所有数据

    a表 LEFT JOIN b表:以b表为主

    b表 LEFT JOIN a表:以a表为主

    以上面列子相同,就不在举例了

    INNER JOIN:不以哪个表为主,只要是两个表数据之间无关联的都不显示

    a表 LEFT JOIN b表:两个表数据之间无关联的都不显示

    b表 LEFT JOIN a表:两个表数据之间无关联的都不显示

    以上面列子相同,就不在举例了

    一张表两个外键链表

    330820ce715200cf5970a2375eecc353.png

    c8a2607f85c0402e3e8ddb783a967d31.png

    7a61ae847da53351e6b0a18e93ede8aa.png

    一张表两个外键链表的查询

    SELECT

    *

    FROMusrLEFT JOIN usr_fzu ON usr.usr_fzu_id =usr_fzu.idLEFT JOIN usr_yans ON usr.usr_yans_id = usr_yans.id;

    31610abaefdecb1774965eeaf54c0103.png

    一张表两个外键链表的WHERE条件查询

    SELECT

    *

    FROMusrLEFT JOIN usr_fzu ON usr.usr_fzu_id =usr_fzu.idLEFT JOIN usr_yans ON usr.usr_yans_id =usr_yans.id--链表查询,用户在usr_fzu.fzu = 'B' 并且在 usr_yans.yans = 'hong' 的用户

    WHERE usr_fzu.fzu = 'B' AND usr_yans.yans = 'hong'

    05ec09a73e55fbf2d494b3b178d6457a.png

    重点:外键链表,无论是外键连接了几张表,其本质就是将外键连接的表组合到当前表成为一张表,来各种条件查询

    重点:一般在链表查询字段、和链表取数据字段时,需要加上所操作的表名称.字段名称,如:usr_yans.yans(usr_yans表的yans字段)

    字典表:外键连接的表一般被称为字典表

    外键链表之多对多

    1、多对多是通过一个关系表外键链表,将多个表建立关系

    2、可以是1条数据对应多条数据,或者多条数据对应1条数据

    3、也可以是多条数据对应多条数据

    举例:创建男女恋爱关系多对多

    一个男人可能跟多个女人谈过恋爱,一个女人可能跟多个男人谈过恋爱,通过链表多对多统计出某个男人有跟哪些女人谈过恋爱

    1、建立一张表存放男人信息

    2、建立一张表存放女人信息

    3、建立一张表外键连接这两张男女信息表,记录男女的恋爱关系

    5e8f2b8924dca1c265f81b95aed6dc91.png

    创建外键链表关系

    5e27a2d74c19d4b459646c88a3e307b1.png

    将3张表组合一起查询

    SELECT

    *

    FROMnan_nvLEFT JOIN nan ON nan_nv.nan_id =nan.idLEFT JOIN nv ON nan_nv.nv_id = nv.id;

    10c91f0df78cefc2c49e307081f1bf02.png

    将3张表组合一起加WHERE条件查询

    如:查询与张三有过恋爱关系的女人

    SELECT

    *

    FROMnan_nvLEFT JOIN nan ON nan_nv.nan_id =nan.idLEFT JOIN nv ON nan_nv.nv_id =nv.idWHERE nan.nan = '张三(男)';

    471de57c03903769163d346ea116d5c3.png

    展开全文
  • mysql设置外键约束的方法:可以通过FOREIGN KEY关键字来指定外键,语法“ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 主表名 (列名);”。(1) 外键的使用:外键的作用,主要有两个:个是...
  • MySql外键设置详解

    千次阅读 2021-01-18 19:18:05
    外键的作用,主要有两个:个是让数据库自己通过外键来保证数据的完整性和一致性个就是能够增加ER图的可读性有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有通过外键的检测而...
  • MySql对多关系中外键的应用

    千次阅读 2021-02-02 07:17:24
    (外键,若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键外键约束主要用来维护两个表之间数据的一致性)设计方案:方案一:建立一张用户基地表,与r_user与用户基地表,保持一对多的关系,如图所示,...
  • MySQL基础之 主键外键设置

    千次阅读 2021-02-02 09:37:23
    外键:定义:如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。作用:外键是用来实现参照完整性的,不同的外键约束方式将可以是两张表紧密的结合起来。比如修改或者删除的级联...
  • MySQL 命令行mysql服务的启动和停止net stop mysqlnet start mysql二、登录mysql语法如下:mysql -u 用户名 -p 用户密码键入命令mysql -u root -p,回车后提示你输入密码,输入你设置的密码,然后回车即可进入到...
  • 我试图在它们之间创建个关系表(foo_bar),使用它们的主键作为外键。我创建这些表作为MyISAM,但后来将这三个都改为InnoDB,因为我读到MyISAM不支持外键。所有id字段都是INT(11)。当我选择foo_bar表时,单击"关系...
  • ps:下面看下MySQL无法创建外键、查询外键的属性 MyISAM 和InnoDB 讲解  InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理...
  • 如何在MySQL设置外键约束

    千次阅读 2021-01-18 21:31:24
    (1) 外键的使用:外键的作用,主要有两个:个是让数据库自己通过外键来保证数据的完整性和一致性个就是能够增加ER图的可读性有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有...
  • 1.外键的作用,主要有两个:个是让数据库自己通过外键来保证数据的完整性和一致性个就是能够增加ER图的可读性2.外键的配置1)先创建个主表,代码如下:#创建表student,并添加各种约束create table student(id int...
  • mysql建表外键怎么设

    千次阅读 2021-03-15 20:14:19
    mysql建表外键怎么设mysql建表时设置外键的方法:在“CREATE TABLE”语句中,通过“[CONSTRAINT ] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES 主键列1 [,主键列2,…]”语句设置MySQL 外键约束(FOREIGN KEY)是表...
  • 不使用外键,尝试多对多查询

    千次阅读 2021-01-27 19:15:48
    我的上两篇博客总结了一下不使用外键的优缺点但是我还没试过,今天尝试了一下,用难一点的多对多关系实验:工具:springbootmybatismysql二:材料:五张表:user--用户表role--角色表permission--权限表user-role...
  • 补充内容中的问题,是可以实现的,现在大多数数据库都支持列的类型为复合数据类型,这样可以在列中存储一张表或者个数组。比如:oracle支持对象类型、嵌套表、数组等复合数据类型。你问题中的表在oracle中可以...
  • 招、mysql服务的启动和停止net stop mysqlnet start mysql第二招、登陆mysql语法如下: mysql -u用户名 -p用户密码键入...注意,如果是连接到另外的机器上,则需要加入个参数-h机器IP第三招、增加新用户格式...
  • 注意点: 一对多, 外键设置在多方 一张表关联多张表,通过 foreign key (字段名) references 关联的表名(字段) 模拟一对多一对多表的结构设计,两张表 主表(一方) 从表(多方) 建表原则,在多方表中添加字段,把该字段...
  • mysql为何不建议使用外键

    千次阅读 2022-04-13 09:51:21
    mysql为何不建议使用外键_为什么很多mysql课程不推荐用物理外键? 大机灵聪明绝顶 于 2021-01-18 21:21:46 发布 1408 收藏 文章标签: mysql为何不建议使用外键 版权 刚好今晚有师弟问我这个问题,就来搜搜。以前我...
  • 一对多或多对一 多对一 create table press( id int primary key auto_increment, name varchar(20) ); create table book( id int primary key auto_increment, name varchar(20), press_id int not null, ...
  • MySQL中删除一张表或条数据的时候,出现 [Err] 1451 -Cannot deleteorupdatea parent row: aforeignkeyconstraintfails (...) 这是因为MySQL设置了foreign key关联,造成无法更新或删除数据。可以通过设置...
  • MySQL外键关联(一对多外键说明    什么是外键? 1)表A中有字段(如身份证号)做了主键,表B中也有这个字段(身份证号),这里的身份证号一定来自表A同样字段里的内容,但再B表中身份证号对应id可以重复 2)...
  • 文章目录创建表的完整语法约束条件not nullunsignedzerofilldefaultuniqueprimary keyauto_increment清空数据的两种方式外键外键浅析外键种类如何判断表关系SQL语句实现级联更新级联删除 创建表的完整语法 # 语法: ...
  • 构造案例创建项目rails _4.2.2_ new active_record_second -d=mysql修改Gemfile文件,把gem源替换为source 'https://gems.ruby-china.org',把gem 'mysql2'替换为gem 'mysql2', '~> 0.3.18'把database.yml文件...
  • 怎样在MySQL的数据库中定义外键详解除了 CASCADE 外,还有 RESTRICT(禁止主表变更)、SET NULL(子表相应字段设置为空) 等操作。第行是说要为 pc 表设置外键,给这个外键个名字叫做 fk_cpu_model;第二行是说将...
  • MYSql 建表的同时添加外键的语句关注:136答案:2手机版解决时间 2021-01-18 08:56已解决2021-01-17 11:54MYSql 建表的同时添加外键的语句最佳答案2021-01-17 13:33ALTER TABLE BADD CONSTRAINT fk_B_AFOREIGN KEY ...
  • 数据库到底需不需要设置外键

    千次阅读 2021-02-03 04:17:50
    在大型系统中(性能要求不高,安全要求高),最好使用外键(外键可以增强数据库数据的完整性和一致性)在大型系统中(性能要求高,安全自己控制),不用外键(有外键约束的话,插入字段会进行检查,影响效率)小系统,最好用...
  • MySQL外键关联操作

    千次阅读 2022-03-25 16:24:30
    MySQL外键约束 注意,MySQL 的 InnoDB 表引擎才支持外键关联,MyISAM 不支持。MySQL 还支持手动打开或关闭外键约束:SET FOREIGN_KEY_CHECKS = 0/1;。 使用外键约束最大的好处在于 MySQL 帮助我们完成数据的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,628
精华内容 40,651
关键字:

mysql一对多设置外键

mysql 订阅