Skip to content

表的操作

本章节介绍对数据表进行操作的各种方法和技巧。

表操作分类

类型说明
表结构操作创建表、修改表结构、删除表
数据操作增删改查、批量操作
表配置表属性设置、字段配置
表间关系主从表、关联表

表结构操作

创建数据表

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: '产品列表'
});

表操作注意事项

  1. 表名规范:建议使用 t_ 前缀 + 小写英文 + 下划线分隔,如 t_product_category
  2. 字段规范:字段名使用小写英文 + 下划线,避免使用 SQL 关键字
  3. 必备字段:建议所有业务表都有 idcreate_timecreate_useris_deleted 等字段
  4. 索引设计:对查询频繁的字段(编码、名称、外键)创建索引
  5. 逻辑删除:推荐使用 is_deleted 字段做逻辑删除,而非物理删除
  6. 事务处理:多表操作应使用事务,确保数据一致性
  7. 数据备份:删除或修改大量数据前建议先备份

基于 MIT 许可发布