社区
MS-SQL Server
帖子详情
表里创建有外键,现想删掉某些表的大部分数据,怎么做比较好?
chongworm
2003-11-17 12:23:57
一个数据库有几百个表,有很多表相互之间是通过外键关联的,现在因为有些表的数据量很大,所以想把这些表中的大部分数据清掉,只留少数几条记录作样板,但是如果采用一个表一个表清除的方法,若某个表和其他表有外键联系,则系统会弹出提示,并且不让删。请问有什么方法能达到目的?请各位高手详细指点,先谢了!
...全文
61
5
打赏
收藏
表里创建有外键,现想删掉某些表的大部分数据,怎么做比较好?
一个数据库有几百个表,有很多表相互之间是通过外键关联的,现在因为有些表的数据量很大,所以想把这些表中的大部分数据清掉,只留少数几条记录作样板,但是如果采用一个表一个表清除的方法,若某个表和其他表有外键联系,则系统会弹出提示,并且不让删。请问有什么方法能达到目的?请各位高手详细指点,先谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lynx1111
2003-11-17
打赏
举报
回复
设置级联删除
sunshareforever
2003-11-17
打赏
举报
回复
可以采用触发器完成。
lvltt
2003-11-17
打赏
举报
回复
设置级联删除,具体看联机帮助
shuiniu
2003-11-17
打赏
举报
回复
表已经建好的,可用下面的增加!
alter table 从表 add constraint 外键名 foreign key(从表字段)
references 主表(主表字段) on delete cascade
shuiniu
2003-11-17
打赏
举报
回复
--例如
create table zb --主表
(
zb_id int primary key,
)
go
create table cb --从表
(
mx_id int primary key
FOREIGN KEY REFERENCES zb(zb_id)ON DELETE CASCADE , --指定级联删除
)
go
--主表数据
insert zb values(1)
insert zb values(2)
insert zb values(3)
--从表数据
insert cb values(1)
insert cb values(2)
insert cb values(3)
select * from zb
select * from cb
zb_id
-----------
1
2
3
(所影响的行数为 3 行)
mx_id
-----------
1
2
3
(所影响的行数为 3 行)
--级联删除
delete from zb where zb_id = 1
select * from zb
select * from cb
zb_id
-----------
2
3
(所影响的行数为 2 行)
mx_id
-----------
2
3
(所影响的行数为 2 行)
为什么
表
数据
删掉
一半,
表
文件大小不变?
这种标记删除的方式带来了一些优势,比如快速删除操作,以及可能会在后续插入操作中复用这些标记删除的空间。:如果
数据
页的使用率下降到一定程度(比如删除了
大部分
记录),InnoDB 可能会将这个
数据
页中的剩余记录移动到相邻页中,然后将该
数据
页标记为空闲页。每个
数据
页有固定的大小,页内存储
数据
记录。:InnoDB 的
数据
存储在 B+ 树的结构中,
数据
页(
数据
存储的基本单位)即使被完全腾空,也不会立刻释放。这意味着如果你在
表
中插入新的记录,系统会尝试将它们填充到先前删除的
数据
位置上,而不立即分配新的空间。
Mysql大
表
加索引
最近大后台查看一些
数据
统计的时候,很慢,甚至会有超时情况,前端设置的超时时间是20秒。 后来通过查看日志和慢查询,发现一条sql语句执行时间超过18秒,基本都19秒左右。 大
表
加索引 select (*) from tb_name where create_time > xxx; 最终得知是因为这个
表
数据
行数已经超过 一千万了,然后create_time字段又没有索引 。 那解决办法肯定是加索引喽。 但是这个
表
是一直在线上运行,很重要和业务部分。如果给千万级的大
表
在线加索引 ,肯定会卡...
mysql给大
表
增加索引
链
表
指定部分反转
数据
库完整性约束--菜鸟简易小结
数据
库完整性约束 学完
数据
库,现在对
数据
库完整性约束
做
个小结,举的例子
大部分
是同一个创
表
。 一、实体完整性:主码唯一且不能为空 1.当主码为单个属性:定义
表
时写同一行则为列级约束,写在新的一行为
表
级约束; 当主码为多个属性:只能定义为
表
级约束,写在新的一行。 2.创
表
(注意看逗号位置): create table
表
名(主码的属性名
数据
类型 列级约束,属性名
数据
类型,...,属性名
数据
类型 ); 或 create table
表
名(主码的属性名
数据
类型,属性名
数据
类型,...,属性名
数据
类型
MySQL_
数据
库基础
用的最多的就是varchar类型,size
表
示该类型里最多存储几个字符(不是字节),当你size为10,不是说立即分配10个字符的空间,会先分配一个
比较
小的空间,如果不够会自动扩展,最大空间不超过10.我们实际工作中,是吧一系列sql写到一个文件中,批量执行的,批量执行的时候,如果一条sql报错,那么后面的sql就无法执行了。用decimal举例,他是一个精度更高的浮点数,虽然精度更高,但是运行速度回变慢,占用空间也更多。删除
表
的同时,也会把
表
里
的
数据
一起
删掉
,也是一个非常危险的行为。
MS-SQL Server
34,875
社区成员
254,639
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章