#select now(); 显示时间#定义:如果一张表中有一个非主键的字段指向了别一张表中的主键,就将该字段叫做外键。
#如果父表的主键是复合主键,那么子表也需要指定两列对应 constraint fk_fkname foreign key (id1,id2) references table_name(pid1,pid2)#父表:外表,主键被指向的表, 子表:设置外键的那张表#外键的默认作用有两点:#1.对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败。#2.对父表的作用:对父表的主键字段进行删和改时,如果对应的主键在子表中被引用,操作就会失败。#外键设置: 取名: 用表名就不会重复了 fk_table1_table2
#1.节省空间
#2.约束字段取值
#命令: constraint foreign_key_name foreign key (想绑定的本表ID) references table_name(外表id);
#******在创建好的表后 alter table my_tab1 add [constraint 外键名] foreign key(外键字段名) references mytab2(主键字段名);
#(3) 查看外键:
#SHOW CREATE TABLE ***;可以查看到新建的表的代码以及其存储引擎.也就可以看到外键的设置.
#删除外键:
#alter table drop foreign key '外键名'.
#注意:
#只有在定义外键时,用constraint 外键名 foreign key .... 方便进行外键的删除.
#若不定义,则可以:
#先输入:alter table drop foreign key -->会提示出错.此时出错信息中,会显示foreign key的系统默认外键名.--->用它去删除外键.
#对于非InnoDB表,FOREIGN KEY子句会被忽略掉。
#···创建多个外键: 约束规则默认是 restrict
#··所以要想操作外表,必须把子表修改好了#create table score(sid int not null auto_increment primary key,#number int,#student_id int,#corse_id int,#constraint fk_sid_student foreign key (student_id) references student(sid),#constraint fk_cid_course foreign key (corse_id) references course(cid)#[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] 可选#[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] 可选#)engine=innodb default charset=utf8;
'''# 比如
# create table score(sid int not null auto_increment primary key,
# number int,
# student_id int,
# corse_id int,
# constraint fk_sid_student foreign key (student_id) references student(sid),
# constraint fk_cid_course foreign key (corse_id) references course(cid) on delete cascade on update cascade
# )engine=innodb default charset=utf8;'''
#关键字#CASCADE 删除包含与已删除键值有参照关系的所有记录#SET NULL 修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段)#RESTRICT 拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置)#NO ACTION InnoDB拒绝删除或者更新父表。
#外键的定制作用----三种约束模式:#restrict:严格模式(默认), 父表不能删除或更新一个被子表引用的记录。#cascade:级联模式, 父表操作后,子表关联的数据也跟着一起操作。#set null:置空模式,前提外键字段允许为NLL, 父表操作后,子表对应的字段被置空。
'''# 使用外键的前提:
# 1. 表储存引擎必须是innodb,否则创建的外键无约束效果。
# 2. 外键的列类型必须与父表的主键类型完全一致。
# 3. 外键的名字不能重复。
# 4. 已经存在数据的字段被设为外键时,必须保证字段中的数据与父表的主键数据对应起来。'''
#创建外键语法:#[CONSTRAINT[symbol]]#FOREIGN KEY [index_name](index_col_name, ...)#REFERENCES#tbl_name(index_col_name, ...)#[ON DELETE reference_option]#[ON UPDATE reference_option]#
#reference_option:#RESTRICT | CASCADE | SETNULL | NOACTION