一、概述
至此数据表的增删改查四个基本操作已经全部实现,现在我们来看一下删除命令的效果。
二、数据准备
创建数据表
仓库信息表warehouses,同时向表中插入一些数据。
CREATE TABLE inventory ( product_id varchar, product_name varchar, sku varchar, category varchar, quantity integer , min_stock integer , max_stock integer , w_id integer , location varchar, last_received varchar, last_sold varchar, created_at varchar, updated_at varchar ) ;
插入数据
INSERT INTO inventory VALUES ('P001', 'Smart Watch', 'SKU001', 'Electronics', 150, 20, 500, 1, 'A1-01', '2023-10-01', '2023-10-10', '2023-10-15 10:00:00', '2023-10-15 10:00:00');INSERT INTO inventory VALUES('P002', 'Bluetooth Headset', 'SKU002', 'Audio', 200, 30, 600, 1, 'A1-02', '2023-10-02', '2023-10-11', '2023-10-15 10:05:00', '2023-10-15 10:05:00');INSERT INTO inventory VALUES('P003', 'Wireless Charger', 'SKU003', 'Accessories', 80, 10, 300, 2, 'B2-03', '2023-10-03', '2023-10-12', '2023-10-15 10:10:00', '2023-10-15 10:10:00');INSERT INTO inventory VALUES('P004', 'Tablet', 'SKU004', 'Electronics', 120, 15, 400, 2, 'B2-04', '2023-10-04', '2023-10-13', '2023-10-15 10:15:00', '2023-10-15 10:15:00');INSERT INTO inventory VALUES('P005', 'Gaming Keyboard', 'SKU005', 'Peripherals', 90, 25, 350, 3, 'C3-05', '2023-10-05', '2023-10-14', '2023-10-15 10:20:00', '2023-10-15 10:20:00');INSERT INTO inventory VALUES('P006', 'Mechanical Mouse', 'SKU006', 'Peripherals', 110, 20, 450, 3, 'C3-06', '2023-10-06', '2023-10-15', '2023-10-15 10:25:00', '2023-10-15 10:25:00');INSERT INTO inventory VALUES('P007', 'HD Webcam', 'SKU007', 'Imaging', 70, 15, 250, 4, 'D4-07', '2023-10-07', '2023-10-10', '2023-10-15 10:30:00', '2023-10-15 10:30:00');INSERT INTO inventory VALUES('P008', 'Portable Speaker', 'SKU008', 'Audio', 180, 25, 550, 4, 'D4-08', '2023-10-08', '2023-10-11', '2023-10-15 10:35:00', '2023-10-15 10:35:00');INSERT INTO inventory VALUES('P009', 'Fitness Tracker', 'SKU009', 'Health', 130, 30, 450, 5, 'E5-09', '2023-10-09', '2023-10-12', '2023-10-15 10:40:00', '2023-10-15 10:40:00');INSERT INTO inventory VALUES('P010', 'Smart Glasses', 'SKU010', 'Wearables', 60, 10, 200, 5, 'E5-10', '2023-10-10', '2023-10-13', '2023-10-15 10:45:00', '2023-10-15 10:45:00');
查询数据情况
miniToad <# select * from warehouses;|w_id |name |address |capacity |manager ||1 |Warehouse A |123 Main St, City A |5000 |Manager 1 ||2 |Warehouse B |456 Elm St, City B |7000 |Manager 2 ||3 |Warehouse C |789 Oak St, City C |6000 |Manager 3 ||4 |Warehouse D |101 Pine St, City D |8000 |Manager 4 ||5 |Warehouse E |202 Maple St, City E |4500 |Manager 5 ||6 |Warehouse F |303 Birch St, City F |5500 |Manager 6 ||7 |Warehouse G |404 Cedar St, City G |7500 |Manager 7 ||8 |Warehouse H |505 Walnut St, City H |6500 |Manager 8 ||9 |Warehouse I |606 Cherry St, City I |9000 |Manager 9 ||10 |Warehouse J |707 Beech St, City J |8500 |Manager 10 |excutor return 10 rows
三、删除数据
根据删除的数据数量,分为单条数据删除、多条数据批量删除、多个范围的数据删除和整表数据删除。
3.1 单条数据删除
使用条件过滤,删除1号仓库的信息。
miniToad <# delete from warehouses where w_id=1;excutor delete 1 rowsminiToad <# select * from warehouses;|w_id |name |address |capacity |manager ||2 |Warehouse B |456 Elm St, City B |7000 |Manager 2 ||3 |Warehouse C |789 Oak St, City C |6000 |Manager 3 ||4 |Warehouse D |101 Pine St, City D |8000 |Manager 4 ||5 |Warehouse E |202 Maple St, City E |4500 |Manager 5 ||6 |Warehouse F |303 Birch St, City F |5500 |Manager 6 ||7 |Warehouse G |404 Cedar St, City G |7500 |Manager 7 ||8 |Warehouse H |505 Walnut St, City H |6500 |Manager 8 ||9 |Warehouse I |606 Cherry St, City I |9000 |Manager 9 ||10 |Warehouse J |707 Beech St, City J |8500 |Manager 10 |excutor return 9 rows
3.2 多条批量删除
通过条件过滤,可以同时删除多条行数据。
miniToad <# delete from warehouses where capacity > 8000 or manager = 'Manager 2';excutor delete 3 rowsminiToad <# select * from warehouses;|w_id |name |address |capacity |manager ||3 |Warehouse C |789 Oak St, City C |6000 |Manager 3 ||4 |Warehouse D |101 Pine St, City D |8000 |Manager 4 ||5 |Warehouse E |202 Maple St, City E |4500 |Manager 5 ||6 |Warehouse F |303 Birch St, City F |5500 |Manager 6 ||7 |Warehouse G |404 Cedar St, City G |7500 |Manager 7 ||8 |Warehouse H |505 Walnut St, City H |6500 |Manager 8 |excutor return 6 rows
每条数据行删除时,会将它占用的空间也会释放到数据块,其后的数据会被移动并占据空隙,表数据块的可用空间会增加。
3.3 删除全表数据
DELETE命令中,不带过滤条件时,表示删除数据表中的所有数据行。
miniToad <# delete from warehouses;excutor delete 6 rowsminiToad <# select * from warehouses;excutor return 0 rows
此时数据表中虽然没有数据,但是数据表文件所占的空间并没有减少;当再次插入数据时,会被重复利用。在其它数据库中,删除所有数据的同时要释放表文件占用的空间,可以使用truncate数据表,类似于对文件进行了截断。
四、总结
盆友们,自己开发数据库内核的实现,已经完成了增、删、改、查四个基本操作,你们都学会了吗?
接下来,我们将对这一过程再进行总结和复盘,想学习的要抓紧上车了。
文章转载自开源无限,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




