大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你好朋友
我们提供的服务有:网站建设、成都网站建设、微信公众号开发、网站优化、网站认证、曲水ssl等。为成百上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的曲水网站制作公司
1.简介
外键表示一个表中的一个字段被另外一个表中的字段应用.外键对相关表中的数据造成了限制,使MySQL 能够保证参照完整性.
在MySQL 中,InnoDB 存储引擎支持外键.在一张表中,可以存在多个外键.
外键的创建可以在创建表的时候创建,也可以在创建表之后增加(考虑数据的完整性问题).
父表:外键所指向的表.
字表:相对于父表,拥有外键的表.
2.语法
create 语法
create table table_name(
column_1,
column_2,
....
constraint constraint_name foreign key (column_name)
references parent_table(column_name)
on delete action
on update action
) engine=InnoDB default charset utf8;
constraint 子句允许为外键定义一个名称,如果不写,MySQL 自动生成一个名称
foreign key 子句指定子表中要应用父表的列.注意:MySQL 会自动创建一个基于外键的索引.
references 子句指定父表中的被引用字段.foreign key 和references 指定的列数必须相同.
on delete: 定义当父表中的记录被删除时,子表的记录应该执行的动作.action包括:
on delete restrict:(默认),父表不能删除一个已经被子表引用的记录.
on delete no action:等同与on delete restrict
on delete cascade: 级联模式,父表删除后,对应子表关联的数据也跟着被删除
on delete set null:置空模式,父表删除后,对应子表关联的外键值被设置为NULL,需要注意的是,如果子表的外键设置not null ,则不能使用这种模式,因为会相互冲突.
on update:定义父表中的记录更新时,子表的记录应该执行的动作.action 包括:
on update restrict:(默认),父表不能更新一个已经被子表引用的记录.
on update no action:等同与on delete restrict
on update cascade: 级联模式,父表更新后,对应子表关联的数据也跟着被更新
on update set null:置空模式,父表更新后,对应子表关联的外键值被设置为NULL,需要注意的是,如果子表的外键设置not null ,则不能使用这种模式.
alter 语法
-- 添加外键
alter table table_name add constraint constraint_name
foreign key column_name
references parent_table(column_name)
on delete action
on update action
-- 删除外键
alter table table_name drop constraint_name;
-- 如果没有显式的定义名字,可以使用如下命令获取
show create table table_name;
3.演示
构造两张表categoryes 和products.每个类别有多种产品,而每个产品只属于一个类别.
-- 设置 类别表 categoryes 和产品表 products
create table categoryes(
c_id int not null auto_increment,
c_name varchar(45) not null,
c_description text,
primary key (c_id)
) engine=InnoDB default charset utf8 comment '类别表';
create table products(
p_id int not null auto_increment,
p_name varchar(45) not null,
p_price decimal(8,4),
c_id int,
primary key (p_id),
constraint fk_products_categoryes
foreign key (c_id)
references categoryes(c_id)
on delete set null
on update cascade
) engine=InnoDB default charset utf8 comment '产品表';
在这两张表的基础上,新生成一张vendors 供应商表,并更新products字段
-- 新生成一张表 供应商 vendors ,并为 products 新添加字段 v_id 外键
-- 引用 vendors.v_id
create table vendors(
v_id int not null auto_increment,
v_name varchar(45),
primary key (v_id)
) engine=InnoDB default charset utf8 comment '供应商';
alter table products add column v_id int not null;
alter table products add
constraint fk_products_vendors foreign key (v_id)
references vendors(v_id)
on delete no action
on update cascade;
望采纳祝你好运
不可以。
约束是创建在列级的,用来约束取值范围一非空唯一等限制的。
表中的数量是由数据库引擎自动设置的。
数据查询语言(凡是带有 select 关键字的都是查询语句)
select...
数据操作语言(凡是对表中的 数据 进行增删改的都是 DML)
insert 增 delete 删 update 改
数据定义语言(凡是带有 create、drop、alter 的都是 DDL)
主要操作的是 表的结构 ,不是表的数据
事务控制语言(包括:事务提交 commit、事务回滚 rollback)
数据控制语言(授权 grant、撤销权限 revoke)
select 字段 from 表名 where 条件;
in(具体值,具体值,......) 不是区间
一个输入对应一个输出,和其对应的是多行处理函数(多个输入,对应一个输出)
输入多行,最终输出一行
如果你 没有对数据进行分组,整张表默认为一组 。
在实际的应用中,可能需要先进行分组,然后对每一组的数据进行操作
案例: 查询每个员工所在部门的名称,显示员工名和部门名?
emp e 和 dept d 表进行连接。条件是:e.deptno = d.deptno
SQL92语法:(结构不够清晰,表的连接条件和后期进一步筛选的条件,都放到了 where 子句中)
SQL99语法:(表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加 where 子句)
技巧: 把一张表看成两张表
思考: 外连接的查询结果条数 = 内连接的查询结果条数
select 语句中 嵌套 select 语句,被嵌套的 select 语句称为 子查询。
将查询结果集的一部分取出来。(通常使用在分页查询当中)
将字符串 varchar 类型转换成 date 类型
将日期转换成字符串
可以获取当前系统的时间,并且获取的时间是 datetime 类型的
注意:若没有条件限制将会导致所有数据全部更新。
注意:若没有条件,会删除整张表的数据。
constraint
not null 约束的字段 不能为 NULL (只有列级约束)
unique 约束的字段 不能重复 ,但是可以为 NULL
primary key
foreign key
transaction
实现原理 :缩小扫描的范围(形成树),避免全表扫描
Database Administrator 数据库管理员
数据库表的设计依据。教你怎么进行数据库表的设计。
免费领取有关于java面试题材料和讲解!
MYsql 怎么约束列的取值范围
一般是建立check约束。例如设置sex一列取值只能为'男'或'女' 建表tab10时命令为create table tabl0 (sex char(2) check(sex in ('男','女'))..
一、Mysql支持以下约束:
※ 主键约束 :primary key
※ 唯一性约束:unique key
※ 外键约束:foreign key
※ 非空约束:not null
※ 默认值约束:default
二、主键约束:
一个表只能有一个主键,当建表时忘记设置主键约束时.设置为主键的列查询速度会非常快,所以一般会用聚集索引,这个我们后面会讲到。
添加主键约束:设置myself表的age为主键
语法:alter table 表名 add primary key;(列名)※ 可以有多个列名。
三、外键约束:
何为外键,当建表时需要用到另外一个表的主键作为本表的的主键时,需要设置外键。设置外间后,若想在删除本表数据时会级联删除或者默认删除其他方式。
添加外键约束:设置本表的cno为外键
语法:alter table 表名称 add foreign key (列名称) references 关联表名称(列名称);
四、非空约束:
当插入新数据时对应的列为不能空。非空约束是相对于默认值约束而说的。
添加非空约束:
语法:alter table 表名 modify 列名 列类型 not null;
五、默认值约束:default:
当插入时没有插入值时,会自动插入默认值。默认值约束相对于非空约束而说。
添加默认值约束:
语法:alter table 表名 add 列名 列类型 not null default '默认值';
六、唯一性约束:
本列的内容只能唯一不能重复。
添加唯一约束:
语法:alter table 列名 add unique(列名称) ※可以有多个列名称,用逗号隔开。