外键

小白之旅20-1

拈花ヽ惹草 提交于 2019-11-26 17:42:51
多表 表和表的关系 1. 一对一 人和身份证 2. 一对多 部门和员工 订单和客户 设计:在多的一方建立外键,指向一的一方的主键 3. 多对多 学生和课程 ​ 一个学生可以选多门课,一门课可以被多个学生选 订单和商品 ​ 一个订单中包含多个商品,一个商品被多个订单选中 设计:需要借助第三张中间表,中间表至少包含两个字段,这两个字段形成第三张表的外键,分别指向两张表的主键 来源: https://www.cnblogs.com/demonycw/p/11329509.html

小白之旅20

瘦欲@ 提交于 2019-11-26 17:42:44
约束 概念:对表中的数据进行限制,保证数据的正确性、完整性、有效性 一. 主键约束 primary key 特点: 非空、唯一,是表中记录的唯一标识 一张表只能有一个主键 建表时,添加主键 create table emp (eid varchar(20) primary key , ename varchar(20) , eage int , ...); 建议将主键放在第一位 create table emp (eid varchar(20) , ename varchar(20) , eage int , ... , primary key (eid)); 删除主键 不能使用修改列类型的方式删除主键, 即:alter table emp modify eid varchar(20); alter table emp drop primary key; 注:只删除了唯一约束 建表后,设置主键 alter table emp modify eid varchar(20) primary key; 主键自增长:数值类型的主键,可以通过 auto_increment 使主键自动增长,只有主键能自增长,auto_increment 也是MySQL的方言 建表时,添加主键自增长 create table emp (eid int primary key auto_increment ,

Sql Server级联操作

試著忘記壹切 提交于 2019-11-26 17:39:52
问题提出:现在我有三张表,学生Student,课程Course,成绩SC 1. 学生表Student,主键是学号Sno 2. 课程Course,主码是课程号Cno 3. 成绩SC,主码是Sno和Cno,Sno外键约束是Student的Sno,Cno的外键约束是Cno 现在我需要对Student或者Course进行修改或删除,希望在SC表中能保持修改或删除同步,这就需要到级联操作! 方法一、SQL Server 2008 中手动设置“级联” 这个方法建议在建表时不要加入任何设置外键的代码,如果主码是两者或以上的就不适合使用 1. 打开“数据库关系图”,若未创建,则创建 2. 选中SC表,右击选中“关系”,展开“INSERT和UPDATE规范”中选择级联 3. Student表 和 Course 表也要同样的设置 方法二、建表时使用级联代码添加 1 IF EXISTS ( SELECT * FROM dbo.sysobjects WHERE ID = OBJECT_ID (N ' SC ' ) 2 AND OBJECTPROPERTY (ID, ' IsUserTable ' ) = 1 ) 3 DROP TABLE SC 4 Go 5 CREATE TABLE SC 6 ( Sno CHAR ( 10 ), 7 Cno CHAR ( 10 ), 8 Grade SMALLINT

Sql Server级联操作

≡放荡痞女 提交于 2019-11-26 17:39:37
问题提出:现在我有三张表,学生Student,课程Course,成绩SC 1. 学生表Student,主键是学号Sno 2. 课程Course,主码是课程号Cno 3. 成绩SC,主码是Sno和Cno,Sno外键约束是Student的Sno,Cno的外键约束是Cno 现在我需要对Student或者Course进行修改或删除,希望在SC表中能保持修改或删除同步,这就需要到级联操作! 方法一、SQL Server 2008 中手动设置“级联” 这个方法建议在建表时不要加入任何设置外键的代码,如果主码是两者或以上的就不适合使用 1. 打开“数据库关系图”,若未创建,则创建 2. 选中SC表,右击选中“关系”,展开“INSERT和UPDATE规范”中选择级联 3. Student表 和 Course 表也要同样的设置 方法二、建表时使用级联代码添加 1 IF EXISTS ( SELECT * FROM dbo.sysobjects WHERE ID = OBJECT_ID (N ' SC ' ) 2 AND OBJECTPROPERTY (ID, ' IsUserTable ' ) = 1 ) 3 DROP TABLE SC 4 Go 5 CREATE TABLE SC 6 ( Sno CHAR ( 10 ), 7 Cno CHAR ( 10 ), 8 Grade SMALLINT

mysql 外键、级联问题

一曲冷凌霜 提交于 2019-11-26 16:34:45
数据库问题:事务,外键,级联的作用。 外键的作用是两张表关联,保证数据的一致性和实现一些级联操作。保证数据的一致性和完整性,主要目的是控制存储在外键表中的数据。使两张表形成关联,外键只能引用表中列的值!可以使得两张表关联,保证数据一致性和实现一些级联操作。 外键默认作用2点:1.对子表(外间所在的表)的作用:子表在进行写操作的时候,如果外键字段在对应的附表中找不到对应的匹配,操作就会失败。 2.对父表的作用,对父表的主键字段进行删除和更改时,如果对应的主键在子表中被引用,操作就会失败。 外键的三种定制模式: district:严格模式(默认)父表不能删除或者更新一个被子表引用的记录。 cascade:级联模式,父表操作后,子表关联的数据也跟着一起操作。 set null:置空模式,前提外键字段允许为null,父表操作后,子表对应字段被置空。 使用外键的前提:1、表存储引擎必须是innodb,否则创建外键无约束效果。外键的列举类型必须与父表主键类型完全一致。外键的名字不能重复。已经存在数据的字段被设置为外键,必须保证字段中的数据域父表关键数据对应起来。 创建外键:foreign key(id) references my_tab2(主键字段名); alter table my_tab add [constraint 外键名 foreign key(外键字段名) reference

MYSQL数据库约束类型

拜拜、爱过 提交于 2019-11-26 16:31:34
07.14自我总结 MYSQL数据库约束类型 一.主键约束(primary key) 主键约束要求主键列的数据唯一,并且不能为空。主键分为两种类型:单字段主键和多字段联合主键。 1.单字段主键 写法 创建列表数据时 create table a( ​ name char(9) primary key, ​ age int ); 创建列表数据结束后完毕后 create table a( ​ name char(9) , ​ age int, ​ primary key(name) ) 创建表格完后 alter table test add primary key (name); 2.多字段联合主键 主键由多个字段联合组成。语法规则:Primary Key[字段1,字段2,....,字段n] 2.自动增长 只能与primary key 联用 语法:字段 数据类型 primary key auto_increment n #n为起始位置,可以不填不填默认从1开始 二.外键约束(foreign key) 外键用来在两个表的数据之间建立连接,它可以是一列或者多列。一个表可以有一个或者多个外键。一个表的外键可以为空,若不为空,则每一个外键值必须等于另一个表中主键的某个值。 外键的作用:保证数据应用的完整性。 ​ 主表(父表):对于两个具有关联关系的表而言,相关联字段中的主键所在的那个表即是主表

MySQL常见建表选项及约束

眉间皱痕 提交于 2019-11-26 16:31:15
阅读目录 --- MySQL常见的建表选项及约束 : 1、 create table选项   1、 指定列选项 : default 、 comment   2、 指定表选项 : engine 、auto_increment、comment 2、 create table约束     1、 not null :非空约束   2、 unique :唯一约束   3、 primary key :主键约束   4、 foreign key :外键   5、 check :检查---enum、set    一、CREATE TABLE 选项 1、在定义列的时候,指定列选项 1)DEFAULT <literal>: 定义 列的默认值   当插入一个新行到表中并且没有给该列明确赋值时, 如果定义了列的默认值,将自动得到默认值 ; 如果没有,则为null。 mysql> create table people -> ( ->   id int not null primary key, ->   name varchar(20) not null, ->   sex char(1) default 'm' -> ); mysql> insert into people(id,name) values(1,'张三'); mysql> insert into people values(2,'李四',

MySQL的约束

廉价感情. 提交于 2019-11-26 16:30:37
MySQL中约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息; 约束主要完成对数据的检验,保证数据库数据的完整性,如果有相互依赖数据,保证该数据不被删除,因此约束也叫完整性约束。 什么是完整性?完整性是指数据库中存放的数据是有意义的、正确的。 什么是约束?为了保证数据的正确性和相容性,对关系模型提出来的某些约束条件或者规则。 1.默认值(default) :当用户向表中插入数据时,指定了该字段的那么就插入该值,否则就插入默认值。 mysql> create table test(id int(6) primary key auto_increment,name varchar(10) not null default '未知',addr varchar(24) not null default '未知'); Query OK, 0 rows affected (0.07 sec) mysql> desc test; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+----

MySQL约束

≡放荡痞女 提交于 2019-11-26 16:30:16
主键约束(PRIMARY KEY)   主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则: 每个表只能定义一个主键。 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。 一个列名只能在复合主键列表中出现一次。 复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。 语法格式: 创建表时:  单一主键 <字段名> <数据类型> PRIMARY KEY 复合主键 PRIMARY KEY [字段1,字段2,…,字段n] 外键约束(FOREIGN KEY) 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。  定义一个外键时,需要遵守下列规则: 父表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则父表与子表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。 必须为父表定义主键。 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。