BEGIN TRANSACTION;
-- Пример операций внутри транзакции
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
-- Если все операции прошли успешно
COMMIT;
-- Если произошла ошибка
ROLLBACK;
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "user", "password");
connection.setAutoCommit(false); // Начало транзакции
// Пример операций внутри транзакции
PreparedStatement pstmt1 = connection.prepareStatement("UPDATE accounts SET balance = balance - 100 WHERE account_id = ?");
pstmt1.setInt(1, 1);
pstmt1.executeUpdate();
PreparedStatement pstmt2 = connection.prepareStatement("UPDATE accounts SET balance = balance + 100 WHERE account_id = ?");
pstmt2.setInt(1, 2);
pstmt2.executeUpdate();
connection.commit(); // Коммит транзакции
} catch (SQLException e) {
if (connection != null) {
try {
connection.rollback(); // Откат транзакции при ошибке
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
BEGIN или эквивалентной.COMMIT, фиксирующей все изменения, или ROLLBACK, отменяющей все изменения.Транзакции являются фундаментальным механизмом обеспечения надежности и целостности данных в реляционных базах данных, позволяя корректно обрабатывать сложные операции и защищать данные от сбоев и ошибок.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Anonymous Quiz
3%
HTML
2%
CSS
18%
JavaScript
78%
Python
🤯5👍1🤔1
Описание:
Аномалии:
Описание:
Аномалии:
Описание:
Аномалии:
Описание:
Аномалии:
-- Установка уровня изоляции
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
connection.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
Выбор уровня изоляции транзакций является балансом между производительностью и консистентностью данных. Более высокие уровни изоляции обеспечивают большую защиту от аномалий, но могут приводить к снижению производительности из-за увеличения блокировок и ожиданий. Правильный выбор уровня изоляции зависит от требований конкретного приложения и его чувствительности к различным типам аномалий.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Anonymous Quiz
5%
Angular
93%
Django
1%
React
1%
Vue.js
🤔5
CHAR(n) хранит строки фиксированной длины n. Если строка короче, она дополняется пробелами до указанной длины.n, независимо от фактической длины строки.CREATE TABLE example (
fixed_char CHAR(10)
);
VARCHAR(n) хранит строки переменной длины, где n — это максимальная длина строки. Реальная длина строки определяется по количеству символов в ней.CHAR, так как длина строки не фиксирована и требует дополнительной обработки для управления памятью.CREATE TABLE example (
variable_char VARCHAR(50)
);
| Характеристика |
CHAR | VARCHAR ||-------------------------|-------------------------------------|-----------------------------------------|
| Длина | Фиксированная | Переменная |
| Использование памяти | Фиксированное количество памяти | Использует память по фактической длине |
| Заполнение пробелами | Дополняется пробелами до заданной длины | Нет заполнения пробелами |
| Производительность | Может быть быстрее при фиксированной длине | Может быть менее эффективным |
| Применение | Идентификаторы, коды стран | Имена, адреса, описания |
CREATE TABLE users (
user_id CHAR(10),
username VARCHAR(50)
);
user_id всегда будет занимать 10 символов, даже если идентификатор короче, в то время как username будет занимать только необходимое количество памяти для хранения имени пользователя.Выбор между
CHAR и VARCHAR зависит от характера данных, которые вы хотите хранить. Если данные имеют фиксированную длину, лучше использовать CHAR. Если длина данных варьируется, более подходящим будет использование VARCHAR.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Anonymous Quiz
4%
GET
86%
POST
11%
PUT
0%
DELETE
LEFT JOIN, RIGHT JOIN и INNER JOIN:Описание:
INNER JOIN возвращает только те строки, которые имеют совпадения в обеих таблицах, участвующих в соединении.SELECT A.*, B.*
FROM TableA A
INNER JOIN TableB B ON A.id = B.id;
id в обеих таблицах совпадают, будут включены в результат.Описание:
LEFT JOIN возвращает все строки из левой таблицы и совпадающие строки из правой таблицы. Если совпадений нет, результат всё равно будет включать строки из левой таблицы с NULL значениями для столбцов из правой таблицы.SELECT A.*, B.*
FROM TableA A
LEFT JOIN TableB B ON A.id = B.id;
TableA будут включены в результат, даже если нет совпадений в TableB. Столбцы из TableB будут содержать NULL, если совпадений не найдено.RIGHT JOIN (или RIGHT OUTER JOIN)Описание:
RIGHT JOIN возвращает все строки из правой таблицы и совпадающие строки из левой таблицы. Если совпадений нет, результат всё равно будет включать строки из правой таблицы с NULL значениями для столбцов из левой таблицы.SELECT A.*, B.*
FROM TableA A
RIGHT JOIN TableB B ON A.id = B.id;
TableB будут включены в результат, даже если нет совпадений в TableA. Столбцы из TableA будут содержать NULL, если совпадений не найдено.| TableA | TableB | Результат |
|--------|--------|-----------|
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | NULL | (нет) |
| NULL | 4 | (нет) |
| TableA | TableB | Результат |
|--------|--------|-----------|
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | NULL | 3 |
| NULL | 4 | (нет) |
| TableA | TableB | Результат |
|--------|--------|-----------|
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| NULL | 3 | 3 |
| NULL | 4 | 4 |
Предположим, у нас есть две таблицы: `Employees` и `Departments`.
Employees:
| emp_id | name | dept_id |
|--------|-----------|---------|
| 1 | Alice | 10 |
| 2 | Bob | 20 |
| 3 | Charlie | 30 |
Departments:
| dept_id | dept_name |
|---------|--------------|
| 10 | HR |
| 20 | IT |
| 40 | Marketing |
INNER JOIN:
SELECT Employees.name, Departments.dept_name
FROM Employees
INNER JOIN Departments ON Employees.dept_id = Departments.dept_id;
| name | dept_name |
|--------|-----------|
| Alice | HR |
| Bob | IT |
SELECT Employees.name, Departments.dept_name
FROM Employees
LEFT JOIN Departments ON Employees.dept_id = Departments.dept_id;
| name | dept_name |
|----------|-----------|
| Alice | HR |
| Bob | IT |
| Charlie | NULL |
SELECT Employees.name, Departments.dept_name
FROM Employees
RIGHT JOIN Departments ON Employees.dept_id = Departments.dept_id;
| name | dept_name |
|----------|--------------|
| Alice | HR |
| Bob | IT |
| NULL | Marketing |
Выбор между этими операторами зависит от ваших потребностей в получении данных и требований к отображению неполных совпадений между таблицами.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Anonymous Quiz
3%
MongoDB
1%
Cassandra
1%
Redis
96%
PostgreSQL
🤔5
Описание:
NULL значения. Это ограничение гарантирует, что данные всегда будут присутствовать в этом столбце.CREATE TABLE employees (
emp_id INT,
name VARCHAR(100) NOT NULL
);
Описание:
CREATE TABLE employees (
emp_id INT UNIQUE,
email VARCHAR(100) UNIQUE
);
Описание:
NOT NULL и UNIQUE. Обеспечивает уникальную идентификацию каждой строки в таблице. В таблице может быть только один первичный ключ.CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
Описание:
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
Описание:
CREATE TABLE employees (
emp_id INT,
name VARCHAR(100),
salary DECIMAL(10, 2),
CHECK (salary > 0)
);
Описание:
CREATE TABLE employees (
emp_id INT,
name VARCHAR(100),
hire_date DATE DEFAULT CURRENT_DATE
);
Описание:
CREATE INDEX idx_name ON employees(name);
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
dept_id INT,
salary DECIMAL(10, 2) CHECK (salary > 0),
hire_date DATE DEFAULT CURRENT_DATE,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
Ограничения играют важную роль в управлении целостностью данных и предотвращении ошибок в базе данных. Они помогают гарантировать, что данные в таблицах будут точными, последовательными и соответствующими бизнес-правилам.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Anonymous Quiz
4%
Git
45%
Docker
29%
Jenkins
23%
Kubernetes
👍1
Описание:
INNER JOIN возвращает только те строки, которые имеют совпадающие значения в обеих таблицах, участвующих в соединении. Если нет совпадения, строки не включаются в результирующий набор данных.SELECT A.*, B.*
FROM TableA A
INNER JOIN TableB B ON A.id = B.id;
id в обеих таблицах совпадают.Описание:
RIGHT JOIN возвращает все строки из правой таблицы (TableB) и совпадающие строки из левой таблицы (TableA). Если совпадения нет, строки из правой таблицы все равно включаются в результат с NULL значениями для столбцов из левой таблицы.SELECT A.*, B.*
FROM TableA A
RIGHT JOIN TableB B ON A.id = B.id;
TableB и совпадающие строки из TableA. Если нет совпадения, значения столбцов из TableA будут NULL.TableA:| id | name |
|----|-------|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
TableB:| id | dept |
|----|-------|
| 1 | HR |
| 2 | IT |
| 4 | Sales |
SELECT A.id, A.name, B.dept
FROM TableA A
INNER JOIN TableB B ON A.id = B.id;
| id | name | dept |
|----|--------|------|
| 1 | Alice | HR |
| 2 | Bob | IT |
SELECT A.id, A.name, B.dept
FROM TableA A
RIGHT JOIN TableB B ON A.id = B.id;
| id | name | dept |
|----|---------|------|
| 1 | Alice | HR |
| 2 | Bob | IT |
| 4 | NULL | Sales |
TableB, а строки из TableA включены только там, где есть совпадения. Если совпадений нет, значения столбцов из TableA будут NULL.NULL значениями для столбцов из левой таблицы.Оба типа соединений полезны в разных ситуациях в зависимости от требований к данным и специфики задачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1
Anonymous Quiz
2%
GET
91%
PATCH
7%
POST
0%
DELETE
@Transactional и создает прокси для класса или метода.@Transactional.TransactionInterceptor, который начинает транзакцию через PlatformTransactionManager.commit). Если метод выбросил исключение, транзакция откатывается (rollback).Эта автоматизация позволяет легко управлять транзакциями, обеспечивая целостность данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Anonymous Quiz
2%
Git
15%
Ansible
80%
Prometheus
3%
Maven
Каждый уровень обеспечивает разный баланс между изоляцией и производительностью.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Anonymous Quiz
25%
Реляционная база данных
7%
Документная база данных
3%
Графовая база данных
65%
Ключ-значение база данных
😁7
В автомобиле вы управляете рулем, педалями и переключателями передач, не думая о том, как работают двигатель или тормозная система. Это и есть абстракция: вы взаимодействуете с простым интерфейсом, не вникая в сложные внутренние механизмы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
23%
HTTP
2%
FTP
72%
WebSocket
3%
SMTP
🔥1
class Animal {
void eat() {
System.out.println("This animal eats.");
}
}
class Dog extends Animal {
void bark() {
System.out.println("The dog barks.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // Наследованный метод
dog.bark(); // Метод класса Dog
}
}В этом примере
Dog наследует метод eat от Animal, что демонстрирует наследование в действии.Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
96%
Docker
1%
Git
2%
Jenkins
1%
Nginx