Appearance
表的操作
本章节介绍对数据表进行操作的各种方法和技巧。
表操作分类
| 类型 | 说明 |
|---|---|
| 表结构操作 | 创建表、修改表结构、删除表 |
| 数据操作 | 增删改查、批量操作 |
| 表配置 | 表属性设置、字段配置 |
| 表间关系 | 主从表、关联表 |
表结构操作
创建数据表
sql
-- 创建标准业务表
CREATE TABLE t_product (
id INT PRIMARY KEY IDENTITY(1,1) NOT NULL,
code NVARCHAR(50) NOT NULL, -- 产品编码
name NVARCHAR(200) NOT NULL, -- 产品名称
category_id INT, -- 分类ID
spec NVARCHAR(200), -- 规格
unit NVARCHAR(20), -- 单位
price DECIMAL(18,2), -- 单价
stock_quantity DECIMAL(18,2), -- 库存数量
description NVARCHAR(MAX), -- 描述
is_active BIT DEFAULT 1, -- 是否启用
sort_order INT DEFAULT 0, -- 排序
create_time DATETIME DEFAULT GETDATE(), -- 创建时间
create_user NVARCHAR(50), -- 创建人
update_time DATETIME, -- 更新时间
update_user NVARCHAR(50), -- 更新人
is_deleted BIT DEFAULT 0 -- 删除标记
);
-- 创建索引
CREATE INDEX IX_product_code ON t_product(code);
CREATE INDEX IX_product_category ON t_product(category_id);
CREATE INDEX IX_product_name ON t_product(name);修改表结构
sql
-- 添加字段
ALTER TABLE t_product ADD brand NVARCHAR(100);
-- 修改字段类型
ALTER TABLE t_product ALTER COLUMN name NVARCHAR(300) NOT NULL;
-- 删除字段
ALTER TABLE t_product DROP COLUMN brand;
-- 添加主键
ALTER TABLE t_product ADD CONSTRAINT PK_product PRIMARY KEY (id);
-- 添加外键
ALTER TABLE t_product ADD CONSTRAINT FK_product_category
FOREIGN KEY (category_id) REFERENCES t_category(id);
-- 添加唯一约束
ALTER TABLE t_product ADD CONSTRAINT UK_product_code UNIQUE (code);删除表
sql
-- 删除表(连同数据一起删除)
DROP TABLE t_product;
-- 删除表前先判断是否存在
IF OBJECT_ID('t_product', 'U') IS NOT NULL
DROP TABLE t_product;
-- 清空表数据(保留表结构)
TRUNCATE TABLE t_product;数据操作
查询数据
sql
-- 基础查询
SELECT id, code, name, price FROM t_product WHERE is_active = 1;
-- 带条件查询
SELECT * FROM t_product
WHERE category_id = @categoryId
AND price BETWEEN @minPrice AND @maxPrice
AND name LIKE '%' + @keyword + '%'
ORDER BY sort_order, create_time DESC;
-- 分页查询
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY create_time DESC) AS row_num, *
FROM t_product
WHERE is_active = 1
) t WHERE row_num BETWEEN @start AND @end;
-- 聚合查询
SELECT
category_id,
COUNT(*) AS product_count,
MIN(price) AS min_price,
MAX(price) AS max_price,
AVG(price) AS avg_price,
SUM(stock_quantity) AS total_stock
FROM t_product
WHERE is_active = 1
GROUP BY category_id
HAVING COUNT(*) > 0;
-- 关联查询
SELECT
p.id,
p.code,
p.name,
c.name AS category_name,
p.price,
p.stock_quantity
FROM t_product p
LEFT JOIN t_category c ON p.category_id = c.id
WHERE p.is_active = 1
ORDER BY p.create_time DESC;新增数据
sql
-- 单条插入
INSERT INTO t_product (code, name, category_id, price, create_user)
VALUES (@code, @name, @categoryId, @price, @currentUser);
-- 获取新增的ID
DECLARE @newId INT = SCOPE_IDENTITY();
-- 批量插入
INSERT INTO t_product (code, name, category_id, price, create_user)
SELECT code, name, category_id, price, @currentUser
FROM t_product_temp
WHERE is_imported = 0;更新数据
sql
-- 更新单条记录
UPDATE t_product SET
name = @name,
price = @price,
stock_quantity = @stockQuantity,
update_time = GETDATE(),
update_user = @currentUser
WHERE id = @id;
-- 批量更新
UPDATE t_product SET
is_active = 0,
update_time = GETDATE(),
update_user = @currentUser
WHERE category_id IN (SELECT id FROM t_category WHERE is_deleted = 1);
-- 根据条件更新
UPDATE t_product SET
stock_quantity = stock_quantity - @quantity,
update_time = GETDATE()
WHERE id = @productId
AND stock_quantity >= @quantity;删除数据
sql
-- 逻辑删除(推荐)
UPDATE t_product SET
is_deleted = 1,
update_time = GETDATE(),
update_user = @currentUser
WHERE id = @id;
-- 物理删除
DELETE FROM t_product WHERE id = @id;
-- 批量删除
DELETE FROM t_product WHERE is_deleted = 1 AND create_time < DATEADD(MONTH, -3, GETDATE());表配置
字段配置
在表设计器中可以为字段设置以下属性:
| 属性 | 说明 | 示例 |
|---|---|---|
| 字段名 | 英文名称 | product_name |
| 显示名 | 中文显示名称 | 产品名称 |
| 数据类型 | 字段类型 | NVARCHAR(200) |
| 是否必填 | 是否允许为空 | 是 |
| 默认值 | 插入时的默认值 | GETDATE() |
| 控件类型 | 界面上使用的控件 | 下拉选择器 |
| 数据源 | 下拉框绑定的数据 | 产品分类表 |
表属性
| 属性 | 说明 |
|---|---|
| 表名 | 数据表的英文名称 |
| 显示名 | 数据表的中文名称 |
| 主键字段 | 作为主键的字段 |
| 逻辑删除字段 | 标记删除的字段(如 is_deleted) |
| 创建人/时间字段 | 记录创建信息的字段 |
| 更新人/时间字段 | 记录更新信息的字段 |
| 备注 | 表的功能说明 |
表间关系
主从表设置
javascript
// 设置主从表关系
setMasterDetail({
master: { table: 't_order', keyField: 'id' },
details: [
{
table: 't_order_detail',
keyField: 'id',
foreignKey: 'order_id',
cascadeDelete: true // 删除主表时删除明细
}
]
});关联表设置
javascript
// 设置表间关联
setTableRelation({
source: { table: 't_product', field: 'category_id' },
target: { table: 't_category', field: 'id' },
relation: 'many_to_one' // one_to_one / one_to_many / many_to_one / many_to_many
});数据导入导出
导入数据
javascript
// 从Excel导入
importData({
table: 't_product',
file: uploadFile,
mapping: {
'产品编码': 'code',
'产品名称': 'name',
'分类': 'category_id',
'单价': 'price'
},
onSuccess: function(result) {
showMessage('success', '成功导入 ' + result.count + ' 条数据');
},
onError: function(err) {
showMessage('error', '导入失败:' + err.message);
}
});导出数据
javascript
// 导出到Excel
exportData({
sql: 'SELECT * FROM t_product WHERE is_active = 1',
format: 'xlsx',
filename: '产品列表_' + formatDate(new Date(), 'yyyyMMdd'),
sheetName: '产品列表'
});表操作注意事项
- 表名规范:建议使用
t_前缀 + 小写英文 + 下划线分隔,如t_product_category - 字段规范:字段名使用小写英文 + 下划线,避免使用 SQL 关键字
- 必备字段:建议所有业务表都有
id、create_time、create_user、is_deleted等字段 - 索引设计:对查询频繁的字段(编码、名称、外键)创建索引
- 逻辑删除:推荐使用
is_deleted字段做逻辑删除,而非物理删除 - 事务处理:多表操作应使用事务,确保数据一致性
- 数据备份:删除或修改大量数据前建议先备份