外键关联的修改 级联 修改表行记录的操作

摘要:
修改外键关联场景:book表和publish表是多对一的。book表的pid字段与发布表的id字段相关联。查看外键关系showcreatetable表名;删除外键关系altertablebookdropforeignkeybook_ ibfk_1(外键名称)删除字段altertablepublishdropid(字段名称)添加字段altertablepublishaddid(字段名
外键关联的修改

​ 场景: book表和publish表为多对一关系, book表的pid字段外键关联到了publish表的id字段

查看外键关系

show create table 表名;

删除外键关系

alter table book drop foreign key book_ibfk_1(外键名称)

删除字段

alter table publish drop id(字段名称)

添加字段

alter table publish add id(字段名称) int(数据类型) primary key auto_increment(约束条件)

创建表完成之后, 后添加外键关系

alter table book add foreign key(pid) references publish(id)

创建外键时指定外键名称

创建表时

create table t1(id int, pid int, constraint fk_t1_publish foreign key(pid) references publish (id))
# constraint 指定自定义外键名

创建表完成之后, 后添加指定外键名称关系

alter table book add constraint fk_t1_publish foreign key(pid) references publish(id)
级联

​ 级联有几个模式,

​ 严格模式(默认): 外键有强制约束效果, 被关联字段不能随意删除和修改

​ cascade模式: 外键有强制约束效果, 被关联字段删除或者修改, 关联它的那个字段数据会随之删除或者修改

constraint fk_t1_publish foreign key(pid) references publish(id) on delete cascade on updata cascade

​ set null模式: 被关联字段删除时, 关联他的字段数据会置成null

修改表行记录的操作

增加

insert into 表名 values(字段1, 字段2...)
insert into 表名(id, name) values(字段1, 字段2),(xx1, xx2)

修改

update 表名 set 字段1=值1, 字段2=值2 where id = 1
# 可以用来同时更改多个值, 用逗号分割
# where指定更改符合条件的顺序
# 不指定where条件, 会修改这个字段所有的数据

update t2 set name = 'xxoo' where id=1

删除记录

delete from t3
# 删除所有的数据, 但是不会重置自增字段的数据号
delete from t3 where id = 1
# 删除指定的数据, 删除id字段数据为1的哪一行记录
truncate 表名
# 清空表, 自增字段会重置

查询 ***

# 四则运算
select salary*12 from employee

# 自定义显示格式 concat用法
select concat("姓名:", name "年薪:", salary*12)as Annual_salary from employee

where 条件

比较运算符

# > < >= <= <> !=
select name from employee where post="sale"

between

between 10 and 15  id值在10到15之间 #大于等于和小于等于的区间
	mysql> select * from employee where id between 10 and 15

in

select * from employee where id in(1,3,6) 
等价于id=1 or id=3 or id=6

like "egon%"

# 可以是 % 或 _ 
# % 表示任意多字符
select * from employee where name like "wu%"
# _ 表示一个字符
select * from employee where name like "al_"
select * from employee where name like "al__"
select * from employee where name like "al___"
# 一个下划线代表一个字符, 当字符数超过或不够时, 结果为空

逻辑运算符

# 在多个条件下可以直接使用逻辑运算符 and or not
select * from employee id > 10 and name like "al%"
select * from employee not id > 10 
# and 和 , or 与, not, 取反

分组

select post, max(salary) from employee group by post
# 分组时可以跟多个条件, name这个多个条件同时重复才算一组, group by 后面多条件用逗号分隔
select post, max(salary) from employee group by post,id

​ ONLY_FULL_GROUP_BY 模式

set global sql_mode="ONLY_FULL_GROUP_BY "
# 如果设置了这个模式, 那么select后面只能写group by 后面的分组依据字段和聚合函数统计结果

分组再过滤

select post, max(salary) from employee group by post having max(salary)>20000
# having 过滤后面的条件可以使用聚合函数, where不行

去重

select distinct post from employee
# 注意问题:
#   select的字段必须写在distinct的后面, 并且如果写了多个字段:
select distinct post,id from employee
# 这句指令, 意思就是post和id两个组合在一起同时重复的才是重复数据

排序

select * from employee order by age
select * from employee order by age asc
# 上面这两种都是按照age字段升序排列

select * from employee order by age desc
# 按照age降序排列

select * from employee order by age asc, salary asc
# 按照age进行升序, age一样的数据, 按照salary降序排列

limit

select * from  employee limit 0,5;
# 0是索引 5是取的记录的条数, 从0索引的记录起取5个记录

免责声明:文章转载自《外键关联的修改 级联 修改表行记录的操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS 7编译安装Tengine+PHP+MariaDB全程笔记分布式任务调度XXL-JOB初体验下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在EggJS中使用Sequelize做联表查询

内容转自https://www.jianshu.com/p/078087c69b77,感谢 1.EggJS引用Sequelize 安装sequelize依赖和mysql驱动 cnpm i egg-sequelize mysql2 -S 启用sequelize插件   在config/plugin.js里面添加 sequelize: { enable...

SQLAlchemy技术文档(中文版)-下

10.建立联系(外键) 是时候考虑怎样映射和查询一个和Users表关联的第二张表了。假设我们系统的用户可以存储任意数量的email地址。我们需要定义一个新表Address与User相关联。 from sqlalchemyimport ForeignKey from sqlalchemy.orm import relationship, backref...

MySQL规约(阿里巴巴)

建表规约 【强制】表达是与否概念的字段,必须使用 is _ xxx 的方式命名,数据类型是 unsigned tinyint ( 1 表示是,0 表示否 ) ,此规则同样适用于 odps 建表。说明:任何字段如果为非负数,必须是 unsigned 。 【强制】表名、字段名必须使用小写字母或数字 ; 禁止出现数字开头,禁止两个下划线中间只 出现数字。数...

Oracle临时表用法的经验心得 老猫

文章主要介绍的是Oracle临时表的实际用法的经验心得,我们目前所使用的 Oracle 是作为数据库支撑平台的实际应用,可以说其数据量还是算的上比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量。   当然在 Oracle 中创建分区是一种不错的选择,但是当你发现你的应用有多张表关联的时候,并且这些表大部分都是比较庞大,而你关联的时候发现其中的...

高精地图:激光雷达点云与高精地图融合

高精地图:激光雷达点云与高精地图融合 定位精度和更新频率是高精定位的显著特征。 精度与频率:根据推算,高精定位需要实现≤25cm 的定位精度,更新频率≥100Hz,因此需要在一般导航定位方案的基础上,与激光雷达、摄像头等感知设备相结合。 解决方案:按照定位参考系的不同,分为绝对位置与相对位置两个维度,前者以 GNSS/ RTK 定位代表,后者结合高精地图...

PowerDesigne 笔记

数据库设计工具对比 PowerDesign:PowerDesign是Sybase推出的主打数据库设计工具。PowerDesign致力于采用基于Entiry-Relation的数据模型,分别从概念数据模型(Conceptual Data Model)和物理数据模型(Physical Data Model)两个层次对数据库进行设计。概念数据模型描述的是独立于数...