пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Временные таблицы SQL используются для того, чтобы хранить временные данные. Они создаются на непродолжительный период времени, а именно на время сеанса или транзакции базы данных. Как правило, они используются для хранения промежуточных результатов, которые были получены в результате обработки сложных запросов или вычислений. Помимо этого, их можно использовать для упрощения многоэтапных запросов. Кроме того, мы можем выполнять с временными таблицами CRUD-операции (create, read, update, delete – создание, чтение, обновление, удаление) и операции соединения – все как с обычными таблицами. Временные таблицы удаляются автоматически при завершении сеанса, или их может явным образом удалить пользователь.
Временные таблицы поддерживаются разными базами данных, например, MySQL, Oracle и SQL Server. Однако в зависимости от того, какой сервер баз данных вы используете, функции и синтаксис могут отличаться. В этой статье мы будем использовать SQL Server. В нем существуют два вида временных таблиц:
Локальные временные таблицы
Глобальные временные таблицы
Локальные временные таблицы
Локальные временные таблицы
создаются с помощью оператора
CREATE TABLE
, за которым следует название таблицы с одним символом «решетка» (
#
) перед ним. Они доступны только в рамках текущего сеанса пользователя и автоматически удаляются после того, как сеанс, в котором они были созданы, завершится. Вот пример создания локальной временной таблицы:
CREATE TABLE #TempTable (ID INT, Name VARCHAR(50));
Этот оператор создает локальную временную таблицу
#TempTable
, у которой есть два столбца:
ID
и
Name
. Столбец
ID
имеет тип
INT
, а столбец
Name
- тип
VARCHAR
с ограничением в 50 символов. Для добавления данных в локальную временную таблицу мы можем использовать обычные операторы вставки. Вот пример:
INSERT INTO #TempTable (ID, Name) VALUES (1, 'Educative'), (2, 'DevPath');
Обратите внимание на то, что в приведенном выше примере мы создали временную таблицу с помощью оператора
CREATE
, а затем добавили в нее данные с помощью оператора
INSERT
.
После того, как мы создали временную таблицу и добавили в нее данные, мы можем использовать эти данные в запросах подобно тому, как мы бы то делали с обычной таблицей. Например, для того, чтобы получить данные из временной таблицы, мы можем воспользоваться оператором
SELECT
:
SELECT * FROM #TempTable;
Ниже вы можете видеть вывод команд, приведенных выше:
Пример выше демонстрирует то, что из себя представляет временная таблица в SQL. Также существует еще один способ создания временной таблицы и добавления в нее данных – оператор
INTO
. Для того, чтобы разобраться, как он работает, давайте представим, что у нас есть таблица
Sales
со следующими столбцами:
SaleID
,
ProductID
,
SalesAmount
,
SaleDate
, и выглядит она следующим образом:
SaleID (PK)
ProductID
SalesAmount
SaleDate
1
1
1000
19-06-2023
2
1
500
21-06-2023
3
2
300
22-06-2023
4
2
200
23-06-2023
5
1
700
23-06-2023
…
…
…
…
Допустим, что в рамках этого примера мы хотим создать временную таблицу, используя таблицу
Sales
, но выбрав при этом только столбцы
ProductID
и
SalesAmount
. Следующий синтаксис – это второй способ создания временной таблицы и добавления в нее данных (с помощью оператора
INTO
):
SELECT ProductID, SalesAmount INTO #TempTable FROM Sales
В примере выше мы создаем временную таблицу
#TempTable
, у которой есть два столбца:
ProductID
и
SalesAmount
. Эти столбцы определяются выборочным списком оператора
SELECT
. Запрос, который приведен выше, создает временную таблицу и добавляет в нее данные из таблицы
Sales
.
Для того, чтобы удалить локальную временную таблицу, вам понадобиться следующий синтаксис:
DROP TABLE #TempTable;
Пример
В этом примере мы создадим локальную временную таблицу, в которой будет храниться общий объем продаж продукции. Для этого создадим временную таблицу с двумя столбцами. Первый столбец – это ID продукции, а второй – объем продаж для этой продукции. Давайте для начала создадим временную таблицу:
CREATE TABLE #TempResults (ProductID INT, TotalSales DECIMAL(10, 2));
После того, как мы создали временную таблицу, мы можем сделать запрос и заполнить ее. В данном случае мы предполагаем, что в базе данных имеется таблица с именем
Sales
, в которой содержится информация о продукции и объемах ее продаж. Ниже приведен пример таблицы
Sales
, а также запросы для ее создания и заполнения:
Таблица
Sales
SaleID (PK)
ProductID
SalesAmount
SaleDate
1
1
1000
19-06-2023
2
1
500
21-06-2023
3
2
300
22-06-2023
4
2
200
23-06-2023
5
1
700
23-06-2023
…
…
…
…
Запросы
CREATE TABLE [dbo].[Sales]( [SaleID] [int] PRIMARY KEY,[ProductID] [int] ,[SalesAmount] [decimal](18, 0) ,[SaleDate] [date] , );
INSERT [Sales] ([SaleID], [ProductID], [SalesAmount], [SaleDate]) VALUES (1, 1, 1000 , '2023-06-19' )
INSERT [Sales] ([SaleID], [ProductID], [SalesAmount], [SaleDate]) VALUES (2, 1, 500 , '2023-06-21' )
INSERT [Sales] ([SaleID], [ProductID], [SalesAmount], [SaleDate]) VALUES (3, 2, 300 , '2023-06-22' )
INSERT [Sales] ([SaleID], [ProductID], [SalesAmount], [SaleDate]) VALUES (4, 2, 200 , '2023-06-23' )
INSERT [Sales] ([SaleID], [ProductID], [SalesAmount], [SaleDate]) VALUES (5, 1, 700 , '2023-06-23' )
Следующий запрос – это запрос для добавления данных из таблицы
Sales
во временную таблицу:
INSERT INTO #TempResults (ProductID, TotalSales)
SELECT ProductID, SUM(SalesAmount)
FROM Sales
GROUP BY ProductID;
После того, как мы добавили данные во временную таблицу, мы можем использовать ее для дальнейших вычислений и запросов. Например, для того, чтобы получить список продукции, объем продаж которой превышает 1000, мы можем сделать следующий запрос:
SELECT ProductID, TotalSales
FROM #TempResults
WHERE TotalSales > 1000;
Результат будет следующий:
Пример, приведенный выше, демонстрирует то, как можно использовать временную таблицу для хранения промежуточных результатов. В следующем разделе мы рассмотрим, что такое глобальные временные таблицы.
Глобальные временные таблицы
Глобальные временные таблицы
создаются с помощью оператора
CREATE TABLE
, после которого идет имя таблицы с двойным символом «решетка» (
##
) перед ним. Они доступны для всех пользователей сеанса в рамках данной базы данных и удаляются после завершения последнего сеанса, который ее использует. Вот пример создания глобальной базы данных:
CREATE TABLE ##TempTable (ID INT, Name VARCHAR(50));
Этот оператор создает глобальную временную таблицу
#TempTable
, у которой есть два столбца:
ID
и
Name
. Столбец
ID
имеет тип
INT
, а столбец
Name
- тип
VARCHAR
с ограничением в 50 символов. Для добавления данных в локальную временную таблицу мы можем использовать обычные операторы вставки. Вот пример:
INSERT INTO ##TempTable (ID, Name) VALUES (1, 'Educative'), (2, 'DevPath');
После того, как мы создали временную таблицу и добавили в нее данные, мы можем использовать эти данные в запросах подобно тому, как мы бы то делали с обычной таблицей. Например, для того, чтобы получить данные из временной таблицы, мы можем воспользоваться оператором
SELECT
:
SELECT * FROM ##TempTable;
Для того, чтобы удалить глобальную временную таблицу, вам понадобиться следующий синтаксис:
DROP TABLE ##TempTable;
Принцип использования глобальной временной таблицы аналогичен принципу использования локальной. Однако есть небольшие различия, которые представлены в следующей таблице:
Локальная временная таблица
Глобальная временная таблица
Доступна для текущего сеанса
Доступна для всех сеансов
Начинается с одного символа «решетка»
Начинается с двойного символа «решетка»
Существует до завершения сеанса
Существует до тех пор, пока не будут завершены все связанные с ней сеансы
Недоступна для других сеансов
Доступна для всех сессий в рамках одной базы данных
Чаще всего используется для промежуточных результатов и вычислений
Подходит для обмена временными данными между сеансами
В заключение следует отметить, что временные таблицы полезны при работе с большими объемами данных и сложными запросами. Они помогают хранить промежуточные данные в рамках определенного сеанса или транзакции базы данных.
Компьютерные сети это то, что можно встретить сейчас в любом доме, в любой организации. Более того, это одна из основных составляющих успешной деятельности современного предприятия. И чем крупнее организация, тем шире в ней компьютерная сеть. В этом случае для удобства организации работы имеет смысл разделить единую сеть на подсети. В этой статье мы рассмотрим, как правильно и без ошибок наладить работу с подсетями в рамках одной локальной сети.
p>
Прежде всего, стоит понимать, а нужно ли вообще разбивать сеть? Если фирма небольшая, на 3-4 сотрудника в одном офисе, то в такой разбивке нет необходимости. Однако, если сотрудники компаний занимают несколько кабинетов, или же отделы находятся в различных зданиях - в этом случае без сегментации на подсети не обойтись.
Вообще, интернет-провайдер рассматривает любую организацию как одну сеть, в идеале, имеющую один IP-адрес. На деле так получается далеко не всегда. Если организация крупная, то в ней по факту может быть несколько локальных подсетей, объединенных в одну сеть, которую и будет "видеть" провайдер. Эти подсети могут быть территориально удалены друг от друга, поэтому нужно правильно наладить их соединение, чтобы избежать ошибок в обмене данными.
Конечно, самым очевидным решением будет присвоение каждому устройству своего IP-адреса. Но если в сети есть несколько маршрутизаторов, такой вариант будет неприемлемым или исключительно сложным в реализации.
Что же делать в случае, если сеть организована через связанные между собой маршрутизаторы? В этом случае нужно присвоить IP-подсетям разные адреса.
Задачка: из пункта А в пункт Б выехал поезд…Упс, нет, не та задача. Пусть в организации есть несколько отделов. Чтобы понять, какое количество IP-адресов выдать на подсеть, необходимо знать потребности каждого отдела. Иными словами, знать максимальное количество компьютеров и сетевых устройств, которое планируется ставить в каждом отделе. Для каждого компьютера (и любого другого сетевого девайса) в рамках подсети будет установлен свой индивидуальный IP-адрес. Также нужны IP-адреса для виртуальных серверов, если таковые используются в организации. Не лишним будет создать запас IP-адресов на случай расширения отдела и установки новых рабочих станций.
Есть два варианта разделения сети. Это вариант с подсетями равного размера и вариант с подсетями разного размера. Рассмотрим первый случай:
Если вы на хотите заморачиваться с самостоятельным расчетом подсетей, то мы сделали все за вас 😌. Воспользуйтесь нашим готовым калькулятором подсетей
Вариант 1: Разделение сети на подсети одинакового размера:
Вообще, в сети, устроенной по протоколу IPv4 можно, как правило размещают 254 устройства (2^8-2 – два в восьмой степени минус 2. Минус два, так как один адрес широковещательный а другой сетевой, так называемый нулевой). Из адресного пространства узла (последние 8 бит) для адресации подсетей потребуется занять несколько бит. Если занять 1 бит получится 2 подсети, 2 бита 4 подсети, 3 бита 8 подсетей и так далее. Маска подсети будет увеличиваться на +1 за каждый занятый для разбивки бит.
Таким образом, определив нужное количество подсетей, мы можем начинать разбивку. Стоит помнить, что чем больше подсетей, тем меньше в них будет адресов. Например, если подсетей нужно сделать 7, то для адресации в адресном пространстве узла мы возьмем 3 бита, и еще 5 у нас останется для присвоения IP-адресов. Таким образом, в каждой подсети можно будет установить (2^5-2 – два в пятой степени минус два) = 30 устройств. Общая вместимость сети в данном случае составит (30*8) =240 устройств.
Диапазоны устройств в подсетях найти также несложно. Они будут распределены от 0 до 254, при этом адреса подсети уже будут зарезервированы (0, 32, 64, 96, 128, 160, 192, 224)
Пример:
1-я подсеть: 1.2.3.0 /27 диапазон 1.2.3.1 /27 1.2.3.30 /27
2-я подсеть: 1.2.3.32 /27 диапазон 1.2.3.33 /27 1.2.3.62 /27
3-я подсеть: 1.2.3.64 /27 диапазон 1.2.3.65 /27 1.2.3.94 /27
4-я подсеть: 1.2.3.96 /27 диапазон 1.2.3.97 /27 1.2.3.126 /27
5-я подсеть: 1.2.3.128 /27 диапазон 1.2.3.129 /27 1.2.3.158 /27
6-я подсеть: 1.2.3.160 /27 диапазон 1.2.3.161 /27 1.2.3.190 /27
7-я подсеть: 1.2.3.192 /27 диапазон 1.2.3.193 /27 1.2.3.222 /27
8-я подсеть: 1.2.3.224 /27 диапазон 1.2.3.225 /27 1.2.3.254 /27
Таким образом, наши IP - пакетики могут легко пройти через маршрутизаторы и найти нужный путь. Но в данном варианте есть и минус - множество IP-адресов в подсети остаются неиспользуемыми. Теперь рассмотрим второй вариант:
Вариант 2. Разделение сети на подсети различного размера:
В данном случае необходимо будет рекурсивно разделить сеть пополам. Посмотрите наглядную картинку:
И так далее. А затем для каждой подсети подобрать адрес с диапазоном нужного размера. Таким образом если в одной подсети 50 устройств, она будет в диапазоне 3 итерации деления, если же 5, то в 5 итерации.
Используя этот метод, мы экономим IP-адреса и можем разделять сеть на подсети разных размеров.
Подытоживая, можно отметить, что такое деление отлично подойдет в случае IPv6, но с учетом того, что там используется гораздо более объемное адресное пространство, там проблемы с экономией IP-адресов не стоит. Принцип деления сети на подсети будет тем же самым с поправкой на 128-битный адрес нового протокола.
Apache - популярный бесплатный opensource веб-сервер. Он является частью стека LAMP (Linux, Apache, MySQL, PHP), который обеспечивает большую часть Интернета. Мы уже рассказывали про его установку на Windows и сравнивали его с nginx, а сегодня расскажем про то как установить Apache на Linux.
А про то как установить nginx на Linux, можно прочитать в нашей статье.
Установка веб-сервера Apache на Linux
Установка Apache на CentOS и RHEL
Откройте окно терминала и обновите списки пакетов репозитория, введя следующее:
sudo yum update
Теперь вы можете установить Apache с помощью команды:
sudo yum –y install httpd
httpd - это имя службы Apache в CentOS. Опция –y автоматически отвечает да на запрос подтверждения.
Готово, Apache установлен.
Установка Apache на Ubuntu и Debian
В Ubuntu и Debian пакет и служба Apache называются apache2. Сначала также обновите инструмент управления пакетами apt.
sudo apt update
Теперь устанавливаем Apache:
sudo apt install apache2
Запуск и управление веб-сервером Apache
Apache - это сервис, работающий в фоновом режиме. В Debian и Ubuntu он автоматически запустится после установки, а в CentOS его нужно запустить вручную.
Не забывайте что в командах в CentOS нам нужно использовать httpd, а в Debian и Ubuntu apache2
Запустите службу Apache, введя следующее:
sudo systemctl start httpd
Система не возвращает вывод, если команда выполняется правильно.
Чтобы настроить автозагрузку Apache при запуске используйте команду:
sudo systemctl enable httpd
Чтобы проверить состояние службы Apache:
sudo systemctl status httpd
Чтобы перезагрузить Apache (перезагрузит файлы конфигурации, чтобы применить изменения):
sudo systemctl reload httpd
Чтобы перезапустить весь сервис Apache:
sudo systemctl restart httpd
Чтобы остановить Apache:
sudo systemctl stop httpd
Чтобы отключить Apache при запуске системы:
sudo systemctl disable httpd
Проверить веб-сервер Apache
Задача вашего программного обеспечения Apache - обслуживать веб-страницы по сети. Ваша новая установка Apache имеет тестовую страницу по умолчанию, но вы также можете создать собственную тестовую страницу.
Проверьте тестовую страницу Apache
В окне терминала найдите IP-адрес вашей системы:
hostname -I | awk '{print $1}'
Если вы знакомы с командами ip addr show или ifconfig, вы можете использовать их вместо этого. Подробно про команду ip можно прочитать тут.
Откройте веб-браузер и введите IP-адрес, отображаемый в выводе. Система должна показать тестовую страницу HTTP-сервера Apache, как показано на скриншоте ниже:
Или так, если у вас Ubuntu:
Если ваша система не имеет графического интерфейса, используйте команду curl:
curl [your_system's_IP_address]:80
Примечание. В конце: 80 обозначает порт 80, стандартный порт для интернет-трафика. Обязательно напишите соответствующий IP-адрес вместо [your_system's_IP_address].
Создать HTML-файл для тестирования
Если по какой-либо причине вам нужна или у вас уже есть пользовательская HTML-страница, которую вы хотите использовать в качестве тестовой страницы, выполните следующие действия:
В окне терминала создайте новый индекс файл HTML:
echo My Apache Web Server > /var/www/html/index.html
Отредактируйте файл по своему вкусу и сохраните его.
Теперь вы можете выполнить действия, описанные в предыдущем разделе, и если ваш сервер Apache работает правильно, если он отобразит указанную пользовательскую страницу.
Настройка фаервола для Apache
Фаервол в вашей системе блокирует трафик через разные порты. Каждый порт имеет свой номер, и разные виды трафика используют разные порты. Для вашего веб-сервера вам нужно разрешить HTTP и HTTPS трафик через порты 80 и 443.
В терминале введите следующее:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
Еще раз проверьте, правильно ли настроен ваш фаервол:
sudo firewall-cmd --list-all | grep services
Вы должны увидеть http и https в списке разрешенных сервисов.
Если вы пользуйтесь UFW, то можно открыть порты HTTP (80) и HTTPS (443), включив профиль Apache Full:
sudo ufw allow 'Apache Full'
Если вы используете nftables для фильтрации подключений к вашей системе, откройте необходимые порты, введя следующую команду:
nft add rule inet filter input tcp dport {80, 443} ct state new,established counter accept
Файлы и каталоги Apache
Apache управляется путем применения директив в файлах конфигурации:
/etc/httpd/conf/httpd.conf - основной файл конфигурации Apache
/etc/httpd/ - Расположение всех файлов конфигурации
/etc/httpd/conf.d/ - Все конфигурационные файлы в этом каталоге включены в основной файл настроек
/etc/httpd/conf.modules.d/ - Расположение конфигурационных файлов модуля Apache
Примечание. При внесении изменений в файлы конфигурации не забывайте всегда перезапускать службу Apache, чтобы применить новую конфигурацию.
Логи Apache расположены тут:
/var/log/httpd/ - расположение файлов логов Apache
/var/log/httpd/access_log - показывает журнал систем, которые обращались к серверу
var/log/httpd/error_log - показывает список любых ошибок, с которыми сталкивается Apache
Назначьте каталог для хранения файлов для вашего сайта. Используйте файлы конфигурации, чтобы указать каталог, который вы выбрали. Некоторые типичные места включают в себя:
/home/username/my_website
/var/www/my_website
/var/www/html/my_website
/opt/my_website
