К основному содержанию
скилл CX Codex

sql-best-practices — скилл для Claude Code

Набор правил для генерации SQL-запросов: задаёт стандарты форматирования, индексации, явных JOIN и защиты от SQL-инъекций при работе с базой данных.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Mindrally/skills --skill sql-best-practices -a claude-code
Открыть на GitHub

Что делает sql-best-practices

Скилл обучает агента писать чистый SQL. В правилах прописан отказ от SELECT * в продакшене, обязательное перечисление колонок и замена IN на EXISTS для подзапросов проверки существования. Запросы форматируются с ключевыми словами в верхнем регистре, а фильтры по индексированным колонкам требуют диапазонов вместо функций вроде YEAR(date).

Внутри собраны требования к соединениям таблиц, транзакциям и модификации данных. Скилл запрещает неявные JOIN через WHERE. Для изменений структуры или данных требуется явный список колонок в INSERT и обязательный фильтр WHERE при удалении строк.

Прямая конкатенация пользовательского ввода в SQL-строки запрещена, поэтому скилл форсирует подготовленные выражения и параметризацию.

Какие задачи решает

  • Оптимизировать медленный SQL-запрос с заменой IN на EXISTS
  • Защитить запросы от SQL-инъекций с помощью параметризации
  • Оформить структуру транзакции с обработкой ошибок и ROLLBACK
  • Настроить пагинацию через LIMIT и OFFSET без SELECT *

Примеры запросов агенту

  • Перепиши этот запрос к orders и customers, заменив неявный JOIN на явный INNER JOIN
  • Проверь UPDATE запрос на безопасность и добавь предварительную выборку через SELECT
  • Построй безопасный запрос с параметризацией для поиска пользователей по имени

Как установить sql-best-practices

1Через Skills CLI (Vercel)

npx skills add Mindrally/skills --skill sql-best-practices -a claude-code

2Вручную: положить файлы

~/.claude/skills/sql-best-practices/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/sql-best-practices/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о sql-best-practices

Как установить sql-best-practices в Claude Code?

Выполните команду npx skills add Mindrally/skills --skill sql-best-practices -a claude-code. Также можно вручную поместить файл в ~/.claude/skills/sql-best-practices/SKILL.md.

Что делает скилл sql-best-practices?

Он задаёт ИИ-ассистенту стандарты написания SQL: запрещает SELECT *, требует явные JOIN, настраивает правила именования в snake_case и блокирует конкатенацию пользовательского ввода.

Как скилл оптимизирует работу с условиями в WHERE?

Скилл рекомендует ставить самые строгие фильтры первыми, предпочитать EXISTS вместо IN для подзапросов и избегать вызова функций на индексированных полях.

Исходный текст

SKILL.md · Apache-2.0
---
name: sql-best-practices
description: SQL development best practices for writing efficient, secure, and maintainable database queries
metadata:
  maintainer: Mindrally
  source: https://github.com/Mindrally/skills
---

# SQL Best Practices

## Core Principles

- Write clear, readable SQL with consistent formatting and meaningful aliases
- Prioritize query performance through proper indexing and optimization
- Implement security best practices to prevent SQL injection
- Use transactions appropriately for data integrity
- Document complex queries with inline comments

## Query Writing Standards

### Formatting and Style

- Use uppercase for SQL keywords (SELECT, FROM, WHERE, JOIN)
- Place each major clause on a new line for readability
- Use meaningful table aliases (e.g., `customers AS c` not `customers AS x`)
- Indent subqueries and nested conditions consistently
- Align column lists and conditions for visual clarity

```sql
SELECT
    c.customer_id,
    c.customer_name,
    o.order_date,
    o.total_amount
FROM customers AS c
INNER JOIN orders AS o ON c.customer_id = o.customer_id
WHERE o.order_date >= '2024-01-01'
    AND o.status = 'completed'
ORDER BY o.order_date DESC;
```

### Column Selection

- Avoid `SELECT *` in production code; explicitly list required columns
- Use column aliases to clarify output: `SELECT first_name AS "First Name"`
- Consider the order of columns in SELECT for logical grouping

### Filtering and Conditions

- Place most restrictive conditions first in WHERE clauses
- Use appropriate operators: prefer `IN` over multiple `OR` conditions
- Use `EXISTS` instead of `IN` for subqueries when checking existence
- Avoid functions on indexed columns in WHERE clauses when possible
- Use parameterized queries to prevent SQL injection

```sql
-- Preferred: Use EXISTS for existence checks
SELECT c.customer_name
FROM customers AS c
WHERE EXISTS (
    SELECT 1 FROM orders AS o
    WHERE o.customer_id = c.customer_id
    AND o.order_date > '2024-01-01'
);

-- Avoid: Function on indexed column
WHERE YEAR(order_date) = 2024

-- Preferred: Range comparison
WHERE order_date >= '2024-01-01' AND order_date < '2025-01-01'
```

## Join Best Practices

- Always use explicit JOIN syntax instead of implicit joins in WHERE
- Specify join type explicitly (INNER, LEFT, RIGHT, FULL OUTER)
- Order joins from largest to smallest table when possible
- Use appropriate join types based on data requirements
- Be cautious with CROSS JOINs; ensure they are intentional

```sql
-- Explicit join (preferred)
SELECT c.name, o.order_id
FROM customers AS c
INNER JOIN orders AS o ON c.customer_id = o.customer_id;

-- Avoid implicit join
SELECT c.name, o.order_id
FROM customers c, orders o
WHERE c.customer_id = o.customer_id;
```

## Performance Optimization

### Indexing Guidelines

- Create indexes on columns used in WHERE, JOIN, and ORDER BY clauses
- Consider composite indexes for multi-column queries
- Avoid over-indexing; each index adds write overhead
- Regularly analyze and maintain indexes
- Use covering indexes for frequently executed queries

### Query Optimization

- Use EXPLAIN/EXPLAIN ANALYZE to understand query execution plans
- Limit result sets with TOP/LIMIT when full results are not needed
- Use pagination for large result sets
- Avoid correlated subqueries when possible; use JOINs instead
- Consider query caching for frequently executed queries

```sql
-- Pagination example
SELECT product_id, product_name, price
FROM products
ORDER BY product_id
LIMIT 20 OFFSET 40;
```

### Aggregation Best Practices

- Filter before grouping when possible (WHERE vs HAVING)
- Use appropriate aggregate functions (COUNT, SUM, AVG, etc.)
- Consider window functions for running totals and rankings

```sql
-- Efficient: Filter before aggregation
SELECT category_id, COUNT(*) AS product_count
FROM products
WHERE active = true
GROUP BY category_id
HAVING COUNT(*) > 10;
```

## Transaction Management

- Keep transactions as short as possible
- Use appropriate isolation levels for your use case
- Always include error handling with ROLLBACK
- Avoid user interaction during open transactions
- Use savepoints for complex multi-step operations

```sql
BEGIN TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

IF @@ERROR <> 0
    ROLLBACK TRANSACTION;
ELSE
    COMMIT TRANSACTION;
```

## Security Best Practices

- Always use parameterized queries or prepared statements
- Never concatenate user input directly into SQL strings
- Apply principle of least privilege for database users
- Audit and log sensitive data access
- Encrypt sensitive data at rest and in transit

```sql
-- Use parameterized queries (pseudo-code)
PREPARE stmt FROM 'SELECT * FROM users WHERE username = ?';
EXECUTE stmt USING @username;
```

## Data Modification Best Practices

### INSERT Operations

- Always specify column names explicitly
- Use bulk inserts for multiple rows when possible
- Consider using MERGE/UPSERT for insert-or-update scenarios

```sql
INSERT INTO customers (customer_name, email, created_at)
VALUES
    ('John Doe', '[email protected]', CURRENT_TIMESTAMP),
    ('Jane Smith', '[email protected]', CURRENT_TIMESTAMP);
```

### UPDATE Operations

- Always include a WHERE clause (unless intentionally updating all rows)
- Test UPDATE queries with SELECT first
- Consider using transactions for critical updates

### DELETE Operations

- Always include a WHERE clause
- Use soft deletes (status flags) for recoverable data
- Consider CASCADE effects on related tables

## Naming Conventions

- Use snake_case for table and column names
- Use singular nouns for table names (customer, not customers)
- Prefix primary keys with table name: `customer_id`
- Use descriptive names: `order_total` not `ot`
- Prefix boolean columns appropriately: `is_active`, `has_shipped`

## Documentation

- Comment complex business logic within queries
- Document stored procedures with purpose, parameters, and examples
- Maintain a data dictionary for table and column descriptions
- Version control database schema changes

## Error Handling

- Implement proper error handling in stored procedures
- Log errors with sufficient context for debugging
- Return meaningful error messages to calling applications
- Use TRY-CATCH blocks where supported

© Mindrally · Apache-2.0 · Mindrally/skills

Похожие скиллы

Все скиллы по теме «Данные и базы» →
xlsx официальный anthropics Работает с табличными файлами: создаёт, читает, правит и преобразует книги. Подходит, когда итогом должен стать файл Excel или другой табличный формат. 187 223установок google-agents-cli-observability официальный Google Помогает настроить трассировку и сбор данных о работе ИИ-агентов, включая агентов на ADK. Пригодится, когда нужно разбирать выполнение запросов или наблюдать за агентом после развёртывания. CX Codex +1 511 300установок caveman-evidence-review JuliusBrussee Скилл читает данные Caveman Cloud о расходах LLM, трассах и маршрутизации. Подходит для проверки того, куда уходит бюджет проекта. CX Codex +1 104 500установок migration JuliusBrussee Скилл задаёт правила безопасных миграций схем, данных и API с обязательным откатом. Пригодится при изменениях, где нельзя терять данные или ломать совместимость. CX Codex +1 103 900установок performance-optimization addyosmani Скилл для агентов ИИ-кодинга: сначала замеряет, потом чинит узкое место — от Core Web Vitals до N+1 запросов и индексов в базе. CX Codex +1 65 200установок supabase официальный supabase Скилл помогает настраивать базу данных, аутентификацию и RLS в Supabase без скрытых дыр в безопасности. CX Codex GP ChatGPT 8установок

Из того же набора214

three-js Задаёт правила разработки на Three.js и React Three Fiber: код на TypeScript, очистка ресурсов и оптимизация рендера. CX Codex +1 798установок blazor Скилл задаёт агенту правила разработки на Blazor: жизненный цикл компонентов, привязка данных, управление состоянием и оптимизация рендеринга. CX Codex +1 798установок ionic Задаёт агенту правила разработки на Ionic: структура проекта, компоненты, стили, ленивая загрузка и работа с Firebase. CX Codex +1 797установок general-best-practices Скилл задаёт агенту свод правил по качеству кода, тестам, безопасности и архитектуре. Пригодится, когда нужно, чтобы ИИ писал код в одном стиле во всём проекте. CX Codex +1 794установок logging-best-practices Скилл задаёт правила логирования: структурный JSON, уровни, общие поля и работа с контекстом запроса. Пригодится, когда логи в проекте пишут кто как хочет. CX Codex +1 791установок python-odoo-cursor-rules Набор правил для разработки на Python и Odoo: ORM, XML-представления, архитектура модулей. Пригодится, когда агент пишет код для ERP. CX Codex +1 790установок vue-typescript Набор правил для генерации кода на Vue 3 и TypeScript с Vite, Pinia и Tailwind. Задаёт строгие соглашения по синтаксису и оптимизации загрузки. CX Codex +1 782установок android-development Набор правил для ИИ-агента: как писать Android-приложение на Kotlin с чистой архитектурой, MVI и Material 3. Пригодится, когда агент разъезжается по стилю и слоям. CX Codex +1 782установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой