精华内容
下载资源
问答
  • mysql主外键约束怎么写?

    千次阅读 2021-01-18 22:01:49
    mysql外键约束的写法:“CREATE TABLE 表名(FOREIGN KEY 字段名 REFERENCES 表名 主键列)”。mysql主键约束主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 ...

    mysql主键约束的写法:“CREATE TABLE 表名(字段名 数据类型 PRIMARY KEY)”;mysql外键约束的写法:“CREATE TABLE 表名(FOREIGN KEY 字段名 REFERENCES 主表名 主键列)”。

    026017d596ddbfd7fe9240c119b8769c.png

    mysql主键约束

    主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。

    1、在创建表时设置主键约束

    在 CREATE TABLE 语句中,通过 PRIMARY KEY 关键字来指定主键。

    在定义字段的同时指定主键,语法格式如下: PRIMARY KEY [默认值]

    例 1

    在 test_db 数据库中创建 tb_emp3 数据表,其主键为 id,SQL 语句和运行结果如下。mysql> CREATE TABLE tb_emp3

    -> (

    -> id INT(11) PRIMARY KEY,

    -> name VARCHAR(25),

    -> deptId INT(11),

    -> salary FLOAT

    -> );

    Query OK, 0 rows affected (0.37 sec)

    mysql> DESC tb_emp3;

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

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

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

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(25) | YES | | NULL | |

    | deptId | int(11) | YES | | NULL | |

    | salary | float | YES | | NULL | |

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

    4 rows in set (0.14 sec)

    或者是在定义完所有字段之后指定主键,语法格式如下:[CONSTRAINT ] PRIMARY KEY [字段名]

    例 2

    在 test_db 数据库中创建 tb_emp4 数据表,其主键为 id,SQL 语句和运行结果如下。mysql> CREATE TABLE tb_emp4

    -> (

    -> id INT(11),

    -> name VARCHAR(25),

    -> deptId INT(11),

    -> salary FLOAT,

    -> PRIMARY KEY(id)

    -> );

    Query OK, 0 rows affected (0.37 sec)

    mysql> DESC tb_emp4;

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

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

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

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(25) | YES | | NULL | |

    | deptId | int(11) | YES | | NULL | |

    | salary | float | YES | | NULL | |

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

    4 rows in set (0.14 sec)

    2、在修改表时添加主键约束

    主键约束不仅可以在创建表的同时创建,也可以在修改表时添加。但是需要注意的是,设置成主键约束的字段中不允许有空值。

    在修改数据表时添加主键约束的语法格式如下:ALTER TABLE ADD PRIMARY KEY();

    查看 tb_emp2 数据表的表结构,SQL 语句和运行结果如下所示。mysql> DESC tb_emp2;

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

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

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

    | id | int(11) | NO | | NULL | |

    | name | varchar(30) | YES | | NULL | |

    | deptId | int(11) | YES | | NULL | |

    | salary | float | YES | | NULL | |

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

    4 rows in set (0.14 sec)

    例 3

    修改数据表 tb_emp2,将字段 id 设置为主键,SQL 语句和运行结果如下。mysql> ALTER TABLE tb_emp2

    -> ADD PRIMARY KEY(id);

    Query OK, 0 rows affected (0.94 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    mysql> DESC tb_emp2;

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

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

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

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(30) | YES | | NULL | |

    | deptId | int(11) | YES | | NULL | |

    | salary | float | YES | | NULL | |

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

    4 rows in set (0.12 sec)

    通常情况下,当在修改表时要设置表中某个字段的主键约束时,要确保设置成主键约束的字段中值不能够有重复的,并且要保证是非空的。否则,无法设置主键约束。

    mysql外键约束

    MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

    外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。

    定义外键时,需要遵守下列规则:主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。

    必须为主表定义主键。

    主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

    在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

    外键中列的数目必须和主表的主键中列的数目相同。

    外键中列的数据类型必须和主表主键中对应列的数据类型相同。

    1、在创建表时设置外键约束

    在 CREATE TABLE 语句中,通过 FOREIGN KEY 关键字来指定外键,具体的语法格式如下:[CONSTRAINT ] FOREIGN KEY 字段名 [,字段名2,…]

    REFERENCES 主键列1 [,主键列2,…]

    例 4

    为了展现表与表之间的外键关系,本例在 test_db 数据库中创建一个部门表 tb_dept1,表结构如下表所示。字段名称数据类型备注

    idINT(11)部门编号

    nameVARCHAR(22)部门名称

    locationVARCHAR(22)部门位置

    创建 tb_dept1 的 SQL 语句和运行结果如下所示。mysql> CREATE TABLE tb_dept1

    -> (

    -> id INT(11) PRIMARY KEY,

    -> name VARCHAR(22) NOT NULL,

    -> location VARCHAR(50)

    -> );

    Query OK, 0 rows affected (0.37 sec)

    创建数据表 tb_emp6,并在表 tb_emp6 上创建外键约束,让它的键 deptId 作为外键关联到表 tb_dept1 的主键 id,SQL 语句和运行结果如下所示。mysql> CREATE TABLE tb_emp6

    -> (

    -> id INT(11) PRIMARY KEY,

    -> name VARCHAR(25),

    -> deptId INT(11),

    -> salary FLOAT,

    -> CONSTRAINT fk_emp_dept1

    -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)

    -> );

    Query OK, 0 rows affected (0.37 sec)

    mysql> DESC tb_emp6;

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

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

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

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(25) | YES | | NULL | |

    | deptId | int(11) | YES | MUL | NULL | |

    | salary | float | YES | | NULL | |

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

    4 rows in set (1.33 sec)

    以上语句执行成功之后,在表 tb_emp6 上添加了名称为 fk_emp_dept1 的外键约束,外键名称为 deptId,其依赖于表 tb_dept1 的主键 id。

    注意:从表的外键关联的必须是主表的主键,且主键和外键的数据类型必须一致。例如,两者都是 INT 类型,或者都是 CHAR 类型。如果不满足这样的要求,在创建从表时,就会出现“ERROR 1005(HY000): Can't create table”错误。

    2、在修改表时添加外键约束

    外键约束也可以在修改表时添加,但是添加外键约束的前提是:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。

    在修改数据表时添加外键约束的语法格式如下:ALTER TABLE ADD CONSTRAINT

    FOREIGN KEY() REFERENCES ();

    例 5

    修改数据表 tb_emp2,将字段 deptId 设置为外键,与数据表 tb_dept1 的主键 id 进行关联,SQL 语句和运行结果如下所示。mysql> ALTER TABLE tb_emp2

    -> ADD CONSTRAINT fk_tb_dept1

    -> FOREIGN KEY(deptId)

    -> REFERENCES tb_dept1(id);

    Query OK, 0 rows affected (1.38 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    mysql> SHOW CREATE TABLE tb_emp2\G

    *************************** 1. row ***************************

    Table: tb_emp2

    Create Table: CREATE TABLE `tb_emp2` (

    `id` int(11) NOT NULL,

    `name` varchar(30) DEFAULT NULL,

    `deptId` int(11) DEFAULT NULL,

    `salary` float DEFAULT NULL,

    PRIMARY KEY (`id`),

    KEY `fk_tb_dept1` (`deptId`),

    CONSTRAINT `fk_tb_dept1` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312

    1 row in set (0.12 sec)

    注意:在为已经创建好的数据表添加外键约束时,要确保添加外键约束的列的值全部来源于主键列,并且外键列不能为空。

    相关推荐:php培训

    展开全文
  • 我们可以在创建表时设置外键约束。在 CREATE TABLE 语句中,通过 FOREIGN KEY 关键字来指定外键,具体的语法格式如下:[CONSTRAINT ] FOREIGN KEY 字段名 [,字段名2,…]REFERENCES 主键列1 [,主键列2,…]举例:...

    a894b7fed64398805dce0ce0f75e4a31.png

    我们可以在创建表时设置外键约束。

    在 CREATE TABLE 语句中,通过 FOREIGN KEY 关键字来指定外键,具体的语法格式如下:[CONSTRAINT ] FOREIGN KEY 字段名 [,字段名2,…]

    REFERENCES 主键列1 [,主键列2,…]

    举例:

    现在在 test_db 数据库中创建一个部门表 tb_dept1,表结构如下图所示:

    64d44e94da7e7f111415d61438be8e61.png

    创建 tb_dept1 的 SQL 语句和运行结果如下所示。mysql> CREATE TABLE tb_dept1

    -> (

    -> id INT(11) PRIMARY KEY,

    -> name VARCHAR(22) NOT NULL,

    -> location VARCHAR(50)

    -> );

    Query OK, 0 rows affected (0.37 sec)

    创建数据表 tb_emp6,并在表 tb_emp6 上创建外键约束,让它的键 deptId 作为外键关联到表 tb_dept1 的主键 id,SQL 语句和运行结果如下所示。mysql> CREATE TABLE tb_emp6

    -> (

    -> id INT(11) PRIMARY KEY,

    -> name VARCHAR(25),

    -> deptId INT(11),

    -> salary FLOAT,

    -> CONSTRAINT fk_emp_dept1

    -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)

    -> );

    Query OK, 0 rows affected (0.37 sec)

    mysql> DESC tb_emp6;

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

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

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

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(25) | YES | | NULL | |

    | deptId | int(11) | YES | MUL | NULL | |

    | salary | float | YES | | NULL | |

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

    4 rows in set (1.33 sec)

    以上语句执行成功之后,在表 tb_emp6 上添加了名称为 fk_emp_dept1 的外键约束,外键名称为 deptId,其依赖于表 tb_dept1 的主键 id。

    注意:从表的外键关联的必须是主表的主键,且主键和外键的数据类型必须一致。例如,两者都是 INT 类型,或者都是 CHAR 类型。如果不满足这样的要求,在创建从表时,就会出现“ERROR 1005(HY000): Can't create table”错误。

    展开全文
  • MySQL主外键约束及其他约束

    千次阅读 2018-05-15 09:50:03
    但是这个表的外键如果有值则必须是它所链接的表的主键的某个值表,有关联关系的两个表中主键所在的表从表,有关联关系的两个表中外键所在的表(创建外键之后,表的主键所在的行不能删除) tab1 为表tab2 为从...

    主键

    1 创建表字段同时指定主键

     

    2 创建表字段之后指定主键

     

    3 多字段联合主键

     

     

    外键

    外键是用来在两个表的数据之间建立链接的,一个表可以有多个外键,外键可以不是这个表主键,可以为空。但是这个表的外键如果有值则必须是它所链接的表的主键的某个值

    主表,有关联关系的两个表中主键所在的表

    从表,有关联关系的两个表中外键所在的表(创建外键之后,主表的主键所在的行不能删除)

     

     

     tab1 为主表

    tab2 为从表,tab2_to_tab1为外键名,deptid为外键字段,tab1(id)为主表和主表的主键字段

     

    非空约束

    字段名 数据类型 not null

     

     

    唯一约束

    1 字段名 数据类型 unique

    2 constraint 自定义约束名 unique(字段名)

     

     

     默认约束

     

    设置表属性值自动增长


     

    展开全文
  • 前言为mysql数据表建立主外键需要注意以下几点:需要建立主外键关系的两个表的存储引擎必须是InnoDB。外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型。外键列和参照列必须创建索引,如果外键列不...

    前言

    为mysql数据表建立主外键需要注意以下几点:

    需要建立主外键关系的两个表的存储引擎必须是InnoDB。

    外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型。

    外键列和参照列必须创建索引,如果外键列不存在索引,mysql将自动创建索引。

    一、SQL语句创建数据表并设置主外键关系

    create table demo.ChineseCharInfo

    (

    ID int not null auto_increment,

    Hanzi varchar(10) not null,

    primary key (ID)

    )

    engine=innodb auto_increment=1 default charset=utf8 collate=utf8_general_ci;

    create table demo.ChinesePinyinInfo

    (

    ID int not null auto_increment,

    CharID int null,

    Pinyin varchar(10) null,

    Tone tinyint unsigned null,

    primary key (ID),

    -- 方式一:不指定外键名称,数据库自动生成

    foreign key (CharID) references ChineseCharInfo(ID) on delete cascade on update cascade

    -- 方式二:指定外键名称为(FK_Name)

    -- constraint FK_Name foreign key (CharID) references ChineseCharInfo(ID) on delete cascade on update cascade

    )

    engine=innodb auto_increment=1 default charset=utf8 collate=utf8_general_ci;

    二、当数据表已经存在时,就要使用下面的方法建立主外键关系

    -- 为表(demo.ChinesePinyinInfo)中字段(CharID)添加外键,并指定外键名为(FK_Name)

    alter table demo.ChinesePinyinInfo add constraint FK_Name foreign key (CharID) references ChineseCharInfo(ID);

    -- 为表(demo.ChinesePinyinInfo)中字段(CharID)添加外键,不指定外键名,由数据库自动生成外键名

    alter table demo.ChinesePinyinInfo add foreign key (CharID) references ChineseCharInfo(ID);

    三、删除主外键约束

    -- 通过修改列的属性来删除自增长,第一个(ID)为原列名,第二个(ID)为新列名

    alter table demo.ChinesePinyinInfo change ID ID int not null;

    -- 删除表(demo.ChinesePinyinInfo)中的主键约束,如果主键列为自增列,则需要先删除该列的自增长

    alter table demo.ChinesePinyinInfo drop primary key;

    -- 删除表(demo.ChinesePinyinInfo)中的名称为(FK_Name)的外键

    alter table demo.ChinesePinyinInfo drop foreign key FK_Name;

    四、主外键关系的约束

    如果子表试图创建一个在主表中不存在的外键值,数据库会拒绝任何insert或update操作。

    如果主表试图update或者delete任何子表中存在或匹配的外键值,最终动作取决于外键约束定义中的on delete和on update选项。

    on delete和on update都有下面四种动作。

    cascade:主表删除或更新相应的数据行,则子表同时删除或更新与主表相匹配的行,即级联删除、更新。

    set null:主表删除或更新相应的数据和,则子表同时将与主表相匹配的行的外键列置为null。当外键列被设置为not null时无效。

    no action:数据库拒绝删除或更新主表。

    restrict:数据库拒绝删除或更新主表。如果未指定on delete或on update的动作,则on delete或on update的默认动作就为restrict。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • mysql创建表时设置外键约束的方法

    千次阅读 2021-01-18 19:18:26
    mysql创建表时设置外键约束的方法发布时间:2020-06-17 15:54:11来源:亿速云阅读:312作者:元一MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就...
  • MySQL外键约束是用来在两个表之间建立链接的,其中一个表发生变化,另外一个表也发生变化。从这个特点来看,它主要是为了保证表数据的一致性和完整性的。 对于两个通过外键关联的表,相关联字段中主键所在的表是...
  • – 已存在表增加外键 ...–把外键约束增加事件触发限制 alter table 外键的表名 drop foreign key 键名; alter table 外键的表名 add foreign key(外键字段名) references 表名(主键字段名) o...
  • MySQL怎么设置外键约束

    千次阅读 2021-01-18 19:07:52
    MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一个...
  • mysql外键约束

    2021-01-28 01:37:07
    外键约束自带的引擎只有innoDB引擎支持外键,外键要求父表必须有对应列的索引,子表会自动创建索引下面是两个表country国家,字表city创建国家表last_update语句的意思是时间戳不为空,默认插入(第三条插入表明以...
  • SELECT C.TABLE_SCHEMA 拥有者,C.REFERENCED_TABLE_NAME 父表名称 ,C.REFERENCED_COLUMN_NAME 父表字段 ,C.TABLE_NAME 子表名称,C.COLUMN_NAME 子表字段,C.CONSTRAINT_NAME 约束名,T.TABLE_COMM...
  • MySQL解决主外键约束

    2021-06-04 11:58:28
    首先,需要创建两个表,并且设置关联
  • 外键的配置1)先创建一个表,代码如下:#创建表student,并添加各种约束create table student(id int primary key , #主键约束name varchar(20) , #唯一约束age int NOT NULL, #非空约束sex va...
  • 我有一个包含三个表和外键“删除时”约束的架构,如下所示:| -> FK (cascade) -> |Organisation | | Users| - FK (cascade) Categories -> FK(restrict) -...
  • 创建外键语法 ALTER TABLE news_info[子表名] ADD CONSTRAINT FK_news_info_news_type[约束名] FOREIGN KEY (info_id)[子表列] REFERENCES news_type[表名] (id)[表列] ; 3.使用组合主键 如果一列不能唯一区分一...
  • mysql主键和外键约束

    2020-03-09 17:06:28
    @Adrian 主键: 选取设置主键约束的字段: ...键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的键值。这是唯一性原则。 一个列名只能在复合主键列表中出现一次。 复合主键不能...
  • 如果表A的关键字是表B中的...这里以MySQL为例,总结一下3种外键约束方式的区别和联系。这里以用户表和用户组表为例,这是一个典型的多对一关系,多个用户对应于一个用户组。首先创建用户组表:创建用户组表creat...
  • mysql查询某个表的外键约束的方法:使用“SHOW CREATE TABLE”语句,语法格式“SHOW CREATE TABLE ;”,可以显示该数据表名的使用所有约束,包括主键约束、外键约束、非空约束、唯一约束等等。(推荐教程:mysql视频...
  • 一、MYSQL中的约束1、主键:primary key 唯一非空的特性并且可以优化查询速度2、外键:foreign key 外键的作用保证2个或2个以上的数据表的数据一致性和完整性3、唯一:unique4、非空:not null5、默认值:deafult6、...
  • 创建两个表 CREATE TABLE `student1` ( `id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号', `name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名', `pwd` varchar(20) NOT NULL DEFAULT '123456' ...
  • 确实是建立外键的时候出的错,看 on delete set null 那段,意思是说在删除分类表中的id的时候,news表中的对应的c_id变为null了 问题就是出在这里,因为c_id是not null,所以出错, 所以想建立news 表有两种办法 1....
  • mysql外键约束怎么写

    千次阅读 2021-01-18 19:17:33
    mysql外键约束的写法:【[CONSTRAINT ] FOREIGN KEY 字段名 REFERENCES 主键列1】。外键约束是表的一个特殊字段,经常与主键约束一起使用。在 CREATE TABLE 语句中,通过 FOREIGN KEY 关键字来指定外键。(推荐学习:...
  • mysql如何修改外键约束类型

    千次阅读 2019-03-02 17:39:42
    INnoDB存储引擎支持外键,外键约束类型有: 1.RESTRICT(mysql默认):拒绝更新或删除(是拒绝更新还是删除看外键的具体设置)表被外键引用的列。 2.NO ACTION:同RESTRICT 3.SET NULL:更新或删除表对应列,...
  •  这里以MySQL为例,总结一下3种外键约束方式的区别和联系。  这里以用户表和用户组表为例,这是一个典型的多对一关系,多个用户对应于一个用户组。  首先创建用户组表:  create table t_group(  id int ...
  • MySQL外键约束详解

    2021-12-19 08:02:01
    今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL外键约束详解。 一、MySQL外键约束作用 二、外键约束创建 (一)创建外键约束的条件 (二)在创建数据表时创建外键约束 (三)在创建数据表后添加外键约束 三...
  • 删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心。但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的表来重新创建也是常有的事情;另外在测试的时候,也有需要重新创建数据库...
  • 一、外键创建语法一:后续添加方法alter table 表名 add constraint 约束名 foreign key(当前表中约束的字段) references 表表名(要约束的字段名);alter table student add constraint fk_class_student foreign...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,900
精华内容 13,960
关键字:

mysql创建主外键约束

mysql 订阅