Создание связей между таблицами с помощью phpmyadmin

Пример ManyToOne и OneToMany

Две таблицы: goods(id, name, catalog_id) и catalogs(id, name). В одном каталоге множество товаров(OneToMany), и сколько угодно товаров может быть в одном каталоге(ManyToOne). Внешним ключом в этом примере является поле catalog_id в таблице goods.

Сгенерированные запросы

CREATE TABLE . ( 
 INT NOT NULL AUTO_INCREMENT , 
 VARCHAR(255) NOT NULL , 
 INT NOT NULL , 
PRIMARY KEY (), INDEX ()) ENGINE = InnoDB;

CREATE TABLE . ( 
 INT NOT NULL AUTO_INCREMENT , 
 VARCHAR(255) NOT NULL , 
PRIMARY KEY ()) ENGINE = InnoDB;

Настройка внешнего ключа catalog_id

Пришло время создать связь между товарами и каталогами. Открываем таблицу goods, переходим во вкладку «структура» и ищем кнопку «связи».

В разделе «ограничения внешнего ключа» заполняем строки и выбираем действия «ON DELETE» и «ON UPDATE».

Обновление данных для нескольких записей в MySQL

Используя команду можно задавать сразу несколько записей для обновления данных.

Попробуем добавить скидку в 5% для всех книг под авторством Николая Гоголя, а также в название книги добавим слово «(Акция)».

Запрос на обновление данных, в этом случае, будет выглядеть так:

UPDATE books SET discount=5, title=CONCAT(title,» (Акция)») WHERE author=»Николай Гоголь»;

1 UPDATEbooksSETdiscount=5,title=CONCAT(title,» (Акция)»)WHEREauthor=»Николай Гоголь»;

В запросе используется функция , которая прибавляет к текущему значению поля title строку «(Акция)».

В результате получим следующие изменения.

Будьте предельно внимательны при обновлении данных в таблицах, так как если вы вдруг забудете задать условие обновления и не напишите команду , то указанное в запросе обновление будет применено ко всем строкам в таблице!

Пример того, что может получится если не указать команду .

UPDATE books SET price=103.90, title=»Барышня-крестьянка»;

1 UPDATEbooksSETprice=103.90,title=»Барышня-крестьянка»;

В результате запроса выше получим одинаковую цену и название для всех книг в таблице.

Как добавить колонку к таблице MySQL?

Синтаксис добавления колонки в таблицу:

ALTER TABLE table_name ADD column_name data_type attributes;

1 ALTERTABLEtable_nameADDcolumn_namedata_typeattributes;

Для примера добавим к таблице books колонку с именем discount, в которой будет хранится процент скидки на книги и amount для хранения количества книг.

Можно добавлять, удалять и модифицировать сразу несколько колонок за раз.

ALTER TABLE books ADD discount TINYINT UNSIGNED, ADD amount SMALLINT UNSIGNED;

1 ALTERTABLEbooksADDdiscountTINYINTUNSIGNED,ADDamountSMALLINTUNSIGNED;

Каждая новая колонка добавляется в конец таблицы. Если вы хотите добавить новую колонку после определенной колонки, то используйте команду .

Добавим колонку shelf_position сразу после колонки price.

ALTER TABLE books ADD shelf_position VARCHAR(20) AFTER Price;

1 ALTERTABLEbooksADDshelf_positionVARCHAR(20)AFTERPrice;

Массовое (множественное) переименование таблиц в SQL Server

Ручной вариант не рассматриваем. Для переименования одной таблицы нужно выполнить такой скрипт:

exec sp_rename @objname = TableName, @newname = NewTableName

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

=СЦЕПИТЬ("exec sp_rename @objname = ";A2;", @newname = z_";A2)

Для нового имени таблицы рекомендую использовать префикс  «z_ »  или подобный.  Такое имя автоматом поместит таблицы в конец списка Server Management Studio.

Это один из вариантов генерации скрипта, вы можете использовать любой другой удобный вам способ.

Сгенерированный скрипт нужно выполнить.  Во время выполнения появится такое сообщение: Caution: Changing any part of an object name could break scripts and stored procedures.

Это действительно так, вообще вся история с рефакторингом не гарантирует работоспособность системы. Тут надо руководствоваться правилом: «семь раз отмерь — один раз отрежь».

Основная проблема в том, что переименовываются только имена таблиц, а внешние ключи на эти таблицы остаются без изменений.

Простые SELECT (выбрать) запросы к базе данных MySQL

SELECT1. Выбирает ВСЕ данные в таблице tbl_name.

SELECT * FROM tbl_name;

2. Выведет количество записей в таблице tbl_name.

SELECT count(*) FROM tbl_name;

3. Выбирает (SELECT) из(FROM) таблицы tbl_name лимит (LIMIT) 3 записи, начиная с 2.

SELECT * FROM tbl_name LIMIT 2,3;

4. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id по порядку.

SELECT * FROM tbl_name ORDER BY id;

5. Выбирает (SELECT) ВСЕ записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id в ОБРАТНОМ порядке.

SELECT * FROM tbl_name ORDER BY id DESC;

6. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы users и сортирует их (ORDER BY) по полю id в порядке возрастания, лимит (LIMIT) первые 5 записей.

SELECT * FROM users ORDER BY id LIMIT 5;

7. Выбирает все записи из таблицы users, где поле fname соответствует значению Gena.

SELECT * FROM users WHERE fname='Gena';

8. Выбирает все записи из таблицы users, где значение поля fname начинается с Ge.

SELECT * FROM users WHERE fname LIKE 'Ge%';

9. Выбирает все записи из таблицы users, где fname заканчивается на na, и упорядочивает записи в порядке возрастания значения id.

SELECT * FROM users WHERE fname LIKE '%na' ORDER BY id;

10. Выбирает все данные из колонок fname, lname из таблице users.

SELECT fname, lname FROM users;

Внимание! Старайтесь указывать конкретные колонки (как в примере 10)

Это важно для того, чтобы запросы обрабатывались намного быстрее!. 11.userscountry

11.userscountry

SELECT DISTINCT country FROM users;

12. Выбирает ВСЕ данные строк из таблицы users где age имеет значения 18,19 и 21.

SELECT * FROM users WHERE age IN (18,19,21);

13.ageusersage

SELECT max(age) FROM users;

14. Выберет данные из таблицы users по полям name и age ГДЕ age принимает самое маленькое значение.

SELECT name, min(age) FROM users;

15. Выберет данные из таблицы users по полю name ГДЕ id НЕ РАВЕН 2.

SELECT name FROM users WHERE id!='2';

Удаление таблицы в базе данных с помощью PHP (PDO)

<?php $server = «localhost»;
$user = «root»;
$password = «MySafePass4!»;
$db_name = «Bookstore»;
try {
// Открываем соединение
$db = new PDO(«mysql:host=$server;dbname=$db_name», $user, $password);
// Создание исключения при ошибке
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Запрос на удаление таблицы
$sql = «DROP TABLE books»;
// Выполняем запрос
$db->exec($sql);
echo «Таблица успешно удалена!»;
}
catch(PDOException $e) {
echo «Ошибка при удалении таблицы в базе данных: » . $e->getMessage();
}

// Закрываем соединение
$db = null;
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

<?php

$server=»localhost»;

$user=»root»;

$password=»MySafePass4!»;

$db_name=»Bookstore»;

try{

// Открываем соединение

$db=newPDO(«mysql:host=$server;dbname=$db_name»,$user,$password);

// Создание исключения при ошибке

$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

// Запрос на удаление таблицы

$sql=»DROP TABLE books»;

// Выполняем запрос

$db->exec($sql);

echo»Таблица успешно удалена!»;

}

catch(PDOException$e){

echo»Ошибка при удалении таблицы в базе данных: «.$e->getMessage();

}

// Закрываем соединение

$db=null;

?>

Запрос на создание таблицы в MySQL

Для создания таблицы потребуется придумать:

  • Имя таблицы
  • Имена полей таблицы
  • Значения, которыми могут быть заполнены поля

Синтаксис запроса на создание таблицы.

CREATE TABLE table_name (column_name column_type attributes);

1 CREATETABLEtable_name(column_namecolumn_typeattributes);

Для примера создадим таблицу books со списком книг условной базы данных Bookstore.

Оповестим сервер MySQL с какой базой данных мы собираемся работать.

USE Bookstore;

1 USEBookstore;

При именовании колонок таблицы старайтесь использовать знак подчеркивания в местах где предполагается пробел, не начинать имена с заглавной буквы (кроме имен собственных), а также использовать слова в единственном числе, не совпадающие с именем таблицы.

Составим запрос на создании таблицы со следующими полями:

  • id — Идентификатор записи.
  • title — название книги.
  • author — имя автора книги.
  • genre — жанр произведения в книге.
  • price — цена книги.
  • edition — номер издания.
  • isbn — номер ISBN.
  • page_num — число страниц в книге.
  • publish_year — год выхода книги в печать.
  • creation_date — дата создания записи (когда занесли книгу в БД).

CREATE TABLE books(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50) NOT NULL,
author VARCHAR(50) NOT NULL,
genre SET(‘Драма’,’Роман’,’Повесть’,’Рассказ’,’Поэма’),
price DECIMAL(15,2),
edition TINYINT UNSIGNED DEFAULT ‘1’ NOT NULL,
isbn VARCHAR(50),
page_num SMALLINT UNSIGNED,
publish_year SMALLINT(4),
creation_date TIMESTAMP
);

1
2
3
4
5
6
7
8
9
10
11
12

CREATETABLEbooks(

idINTUNSIGNEDAUTO_INCREMENTPRIMARY KEY,

titleVARCHAR(50)NOT NULL,

authorVARCHAR(50)NOT NULL,

genreSET(‘Драма’,’Роман’,’Повесть’,’Рассказ’,’Поэма’),

priceDECIMAL(15,2),

editionTINYINTUNSIGNEDDEFAULT’1’NOT NULL,

isbnVARCHAR(50),

page_numSMALLINTUNSIGNED,

publish_yearSMALLINT(4),

creation_dateTIMESTAMP

);

После того как вы указали тип данных для поля, вы можете также указать дополнительные атрибуты:

  • UNSIGNED — позволяет увеличить диапазон числовых значений за счет отключения использования отрицательных чисел. Используется только с числовыми типами данных.
  • AUTO_INCREMENT — значение поля с этим атрибутом будет увеличиваться на 1 при каждом создании новой записи в таблице. Часто используется для автоматического заполнения полей с идентификатором записи.
  • PRIMARY_KEY — первичный ключ используется для идентификации записей в таблице. Первичным ключом может быть только уникальное значение поэтому чаще всего это значение поля id с атрибутом .
  • NOT NULL — обязательное поле для заполнения (не может быть пустым).
  • DEFAULT — значение поля по умолчанию.

Каждая таблица должна иметь поле которое помечено как первичный ключ.

Создание таблицы в терминале:

Как удалить все таблицы из БД PostgreSQL и MySQL ?

Многие конечно не будут заморачиваться удалением таблиц и удалят и создадут заново базу, это удобно если у Вас только один пользователь имеет доступ к БД с простыми набором правами, но пользователей много, то удаление может быть не самой хорошей идеей.

Итак как удалить все таблицы из БД PostgreSQL и MySQL читаем ниже…

Удаление всех таблиц в БД для PostgreSQL:

1. Сохраняем список таблиц в файл:

psql -U PGUSER -t -d PGDBNAME -c \
"SELECT 'DROP TABLE ' || n.nspname || '.' || c.relname || ' CASCADE;' \
FROM pg_catalog.pg_class AS c LEFT JOIN pg_catalog.pg_namespace AS n \
ON n.oid = c.relnamespace WHERE relkind = 'r' AND n.nspname NOT IN \
('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid)" \
> /tmp/droptables

2. Удаляем таблицы:

psql -U PGUSER -d PGDBNAME -f /tmp/droptables

,где PGUSER — имя пользователя PGDBNAME — имя БД в которой нужно удалить все таблицы

Удаление всех таблиц в БД для MySQL:

DB="MYDB";USER="MYUSER";PASSWD="MYPASSWD";mysql -N -s -u $USER -p$PASSWD $DB -e 'show tables' | awk '{print "drop table " $1 ";"}' | mysql -u $USER -p$PASSWD $DB

,где в переменных DB — база в которой нужно удалить все таблицы USER и PASSWD — логин и пароль пользователя у которого есть полные права на базу из переменной DB в которой нужно удалить все таблицы.

Так же получить список таблиц в БД можно через INFORMATION_SCHEMA и тогда запрос удаления всех таблиц будет такой:

DB="MYDB";USER="MYUSER";PASSWD="MYPASSWD"; mysql -N -s -u $USER -p$PASSWD -e "SELECT CONCAT('DROP TABLE ',table_schema,'.',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN ('$DB');" | mysql -u $USER -p$PASSWD

Если при удалении таблиц у нас появляется ошибка: ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails то перед удалением нужно отключить проверку на Foreign Key командой: SET FOREIGN_KEY_CHECKS=0; а потом включить: SET FOREIGN_KEY_CHECKS=1; Таким образом полная команда удаления всех таблиц из БД будет такого вида:

DB="MYDB";USER="MYUSER";PASSWD="MYPASSWD"; mysql -N -s -u $USER -p$PASSWD -e "SELECT CONCAT('SET FOREIGN_KEY_CHECKS=0;'); SELECT CONCAT('DROP TABLE ',table_schema,'.',TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN ('$DB'); SELECT CONCAT('SET FOREIGN_KEY_CHECKS=1;');" | mysql -u $USER -p$PASSWD

На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.

6 ответов

Поскольку не существует API-способа сделать это, о котором я знаю, мы использовали этот сценарий для использования запроса T-SQL для очистки базы данных .

Удалить каждую таблицу (и сохранить историю миграции EF, если хотите)

Сначала удалите внешние ключи, если вам нужно

В моем тестировании это работало без проблем (за исключением того, что у меня не было предложения where в DROP TABLE во время запроса, поскольку я не использую миграцию Code First или EF).

Просто добавить ответы, так как принятый ответ не работает для меня в Azure.
Используйте приведенный ниже скрипт, чтобы удалить все таблицы и в основном сбросить базу данных Azure.
Сначала удаляются все ограничения, а затем удаляются все таблицы.

Как прокомментировал @Skorunka František, этот сценарий предполагает использование схемы по умолчанию . Хотя вы можете заменить его собственным именем схемы.

К сожалению, я больше не могу найти источник этого кода, так как я сохранил его в одном из моих репозиториев.
Надеюсь, это кому-нибудь поможет.

Я обычно

  1. откройте SQL Server Management Studio или из Visual Studio откройте проводник объектов SQL Server
  2. Я подключаюсь к Azure SQL Server (т. е. , выбрав ваше имя пользователя и пароль для параметра проверки подлинности SQL Server) (также помните, что вам нужно добавить исключение брандмауэра на портале Azure для подключения вашего компьютера к базе данных таким образом)
  3. Щелкните правой кнопкой мыши на базе данных и удалите.

Так просто.

Затем, поскольку вы упомянули, что у вас есть подход, основанный на миграции кода, просто запустите миграцию еще раз в Azure SQL Server (например, при публикации убедитесь, что вы отметили опцию применения миграций для данной строки подключения к серверу SQL) /р>

Обычно я удаляю удаленную базу данных, а затем повторно внедряю приложение с помощью команды для повторного запуска миграций. Это создаст снова базу данных с новыми таблицами. Код для заполнения базы данных находится в моем коде запуска, поэтому он появляется каждый раз, когда приложение инициализируется, если в БД нет значений.

Это также верно для AspNet Core Mvc (MVC6)

Просто, чтобы добавить мой вариант в микс … Этот вариант также учитывает представления и внешние таблицы. Это не повлияет на внешние таблицы, которые должны быть удалены отдельно с помощью DROP EXTERNAL TABLE. Это привело к тому, что оригинальная версия вращалась вечно.

Azure SQL — это, по сути, сервер SQL. Таким образом, вы можете использовать MS SQL Server Management Studio https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms

Откройте базу данных в Management Studio, используя свою учетную запись администратора, затем выполните команды SQL отбрасывания таблицы или используйте контекстное меню GUI, чтобы сделать все, что вы хотите, так же, как с использованием локальной базы данных.

То же самое можно сделать в обозревателе объектов Visual Server SQL Server. Просто щелкните правой кнопкой мыши корень «Добавить сервер SQL».

Либо вы можете удалить базу данных в C # и создать новую базу данных с помощью ExecuteNonQuery .

Где соединение — это соединение с основной базой данных базы данных SQL Azure.

Либо, чтобы создать базу данных:

Создание и удаление таблиц

Последнее обновление: 04.05.2018

Создание таблицы

Для создания таблиц используется команда CREATE TABLE. Эта команды применяет ряд операторов, которые определяют столбцы
таблицы и их атрибуты. Общий формальный синтаксис команды CREATE TABLE:

CREATE TABLE название_таблицы
(название_столбца1 тип_данных атрибуты_столбца1, 
 название_столбца2 тип_данных атрибуты_столбца2,
 ................................................
 название_столбцаN тип_данных атрибуты_столбцаN,
 атрибуты_уровня_таблицы
)

После команды CREATE TABLE идет название таблицы. Имя таблицы выполняет роль ее идентификатора в базе данных, поэтому оно должно быть
уникальным. Затем в скобках перечисляются названия столбцов, их типы данных и атрибуты. В самом конце можно определить атрибуты для всей таблицы.
Атрибуты столбцов, а также атрибуты таблицы указывать необязательно.

Создадим простейшую таблицу. Для этого выполним следующий скрипт:

CREATE DATABASE productsdb;

USE productsdb;

CREATE TABLE Customers
(
    Id INT,
    Age INT,
    FirstName VARCHAR(20),
    LastName VARCHAR(20)
);

Таблица не может создаваться сама по себе. Она всегда создается в определенной базе данных. Вначале здесь создается база данных productsdb.
И затем, чтобы указать, что все дальнейшие операции, в том числе создание таблицы, будут производиться с этой базой данных, применяется команда
USE.

Далее собственно идет создание таблицы, которая называется Customers. Она определяет четыре столбца: Id, Age, FirstName, LastName. Первые два столбца представляют идентификатор клиента и его возраст и имеют тип , то есть будут хранить числовые значения.
Следующие столбцы представляют имя и фамилию клиента и имеют тип , то есть представляют строку длиной не более 20 символов.
В данном случае для каждого столбца определены имя и тип данных, при этом атрибуты столбцов и таблицы в целом отсутствуют.

И в результате выполнения этой команды будет создана база данных productsdb, в которой будет создана таблица Customers.

Переименование таблиц

Если после создания таблицы мы захотим ее переименовать, то для этого нужно использовать команду RENAME TABLE,
которая имеет следующий синтаксис:

RENAME TABLE старое_название TO новое_название;

Например, переименуем таблицу Customers в Clients:

RENAME TABLE Customers TO Clients;

Полное удаление данных

Для полного удаления данных, очистки таблицы применяется команда TRUNCATE TABLE. Например, очистим таблицу Clients:

TRUNCATE TABLE Clients;

Удаление таблиц

Для удаления таблицы из БД применяется команда DROP TABLE, после которой указывается название удаляемой таблицы. Например,
удалим таблицу Clients:

DROP TABLE Clients;

НазадВперед

Значения ON DELETE и ON UPDATE

CASCADE — Каскадное удаление и редактирование. Эта настройка означает, что при удалении каталога, все товары из него тоже удалятся. При редактировании, если мы изменим id каталога, у товаров автоматически изменится поле «catalog_id».

RESTRICT — При этой настройке, если мы попытаемся удалить каталог, в котором есть товары, или изменить его id, база данных выдаст нам ошибку и удаление не состоится.

SET NULL — Из названия видно, что если исчезнет(удалится или изменится) каталог с таким id, то у товаров в поле «catalog_id» установится значение NULL

С этой настройкой нужно вести себя осторожно, потому что по умолчанию индексы «NOT NULL»

NO ACTION — Игнорируем удаление и редактирование каталога, и пусть в поле «catalog_id» будет несуществующий идентификатор, просто игнорируем это.

Вопрос 1. Как понять какие таблицы не используются?

Вручную анализировать код для 800 таблиц очень долго и сложно. Поэтому такой вариант сразу отпадает. Нужен автоматический вариант.

SQL Server хранит статистику использования(обращений) к таблицам с момента последней перезагрузки.  Выполним запрос TSQL:

SELECT sqlserver_start_time  AS LastSQLServiceRestart FROM sys.dm_os_sys_info

У нас сервер не перезагружался больше 6 месяцев Т.е. прошло достаточно много времени, чтобы сделать выводы о не используемости таблиц. Список должен быть предварительно проверен т.к есть некоторая функциональность, которая все таки существует в системе, но никто ей не пользуется.

TSQL запрос возвращает имя таблицы, количество строк в таблице, дату создания и дату последнего изменения.

with UnUsedTables (TableName , TotalRowCount, CreatedDate , LastModifiedDate ) 
AS ( 
SELECT DBTable.name AS TableName
     ,PS.row_count AS TotalRowCount
     ,DBTable.create_date AS CreatedDate
     ,DBTable.modify_date AS LastModifiedDate
  FROM sys.all_objects  DBTable 
     JOIN sys.dm_db_partition_stats PS ON OBJECT_NAME(PS.object_id)=DBTable.name
  WHERE DBTable.type ='U' 
     AND NOT EXISTS (SELECT OBJECT_ID  
                     FROM sys.dm_db_index_usage_stats
                     WHERE OBJECT_ID = DBTable.object_id )
)
-- Select data from the CTE
SELECT TableName , TotalRowCount, CreatedDate , LastModifiedDate 
FROM UnUsedTables
ORDER BY TotalRowCount ASC

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

Затем список копируем в Google Таблиц и даем доступ всем разработчикам, чтобы все  могли его проверить и высказать свои замечания и предложения.  После всех согласований формируем конечный список таблиц под удаление, а также утверждаем окончательный список у ответственных лиц. Полученный список сохраняем в документ Excel, так будет удобнее его обрабатывать.

Перед началомBefore You Begin

ОграниченияLimitations and Restrictions

  • Инструкцию DROP TABLE нельзя использовать для удаления таблицы, на которую ссылается ограничение FOREIGN KEY.You cannot drop a table that is referenced by a FOREIGN KEY constraint. Сначала следует удалить ссылающееся ограничение FOREIGN KEY или ссылающуюся таблицу.The referencing FOREIGN KEY constraint or the referencing table must first be dropped. Если и ссылающаяся таблица, и таблица, содержащая первичный ключ, удаляются с помощью одной инструкции DROP TABLE, ссылающаяся таблица должна быть первой в списке.If both the referencing table and the table that holds the primary key are being dropped in the same DROP TABLE statement, the referencing table must be listed first.

  • При удалении таблицы относящиеся к ней правила и значения по умолчанию теряют привязку, а любые связанные с таблицей ограничения или триггеры автоматически удаляются.When a table is dropped, rules or defaults on the table lose their binding, and any constraints or triggers associated with the table are automatically dropped. Если таблица будет создана заново, нужно будет заново привязать все правила и значения по умолчанию, заново создать триггеры и добавить необходимые ограничения.If you re-create a table, you must rebind the appropriate rules and defaults, re-create any triggers, and add all required constraints.

  • При удалении таблицы, которая содержит столбец varbinary (max) с атрибутом FILESTREAM, не будут удалены никакие данные, которые хранятся в файловой системе.If you drop a table that contains a varbinary (max) column with the FILESTREAM attribute, any data stored in the file system will not be removed.

  • Инструкции DROP TABLE и CREATE TABLE нельзя выполнять для одной таблицы в одном пакете.DROP TABLE and CREATE TABLE should not be executed on the same table in the same batch. В противном случае может произойти непредвиденная ошибка.Otherwise an unexpected error may occur.

  • Любые представления или хранимые процедуры, которые ссылаются на удаляемую таблицу, необходимо явно удалить или изменить, чтобы убрать ссылку на таблицу.Any view or stored procedure that references the dropped table must be explicitly deleted or modified to remove the reference to the table.

PermissionsPermissions

Необходимо разрешение ALTER на схему, к которой принадлежит эта таблица, разрешение CONTROL для этой таблицы или членство в предопределенной роли базы данных db_ddladmin .Requires ALTER permission on the schema to which the table belongs, CONTROL permission on the table, or membership in the db_ddladmin fixed database role.

Создание таблицы в базе данных с помощью PHP (PDO)

<?php $server = «localhost»;
$user = «root»;
$password = «MySafePass4!»;
$db_name = «Bookstore»;
try {
// Открываем соединение
$db = new PDO(«mysql:host=$server;dbname=$db_name», $user, $password);
// Создание исключения при ошибке
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Запрос на создание таблицы
$sql = «CREATE TABLE books(«.
«id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,».
«title VARCHAR(50) NOT NULL,».
«author VARCHAR(50) NOT NULL,».
«genre SET(‘Драма’,’Роман’,’Повесть’,’Рассказ’,’Поэма’),».
«price DECIMAL(15,2),».
«edition TINYINT UNSIGNED DEFAULT ‘1’ NOT NULL».
«isbn VARCHAR(50),».
«page_num SMALLINT UNSIGNED,».
«publish_year SMALLINT(4),».
«creation_date TIMESTAMP);»;
// Выполняем запрос
$db->exec($sql);
echo «Таблица успешно создана!»;
}
catch(PDOException $e) {
echo «Ошибка при создании таблицы в базе данных: » . $e->getMessage();
}

// Закрываем соединение
$db = null;
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

<?php

$server=»localhost»;

$user=»root»;

$password=»MySafePass4!»;

$db_name=»Bookstore»;

try{

// Открываем соединение

$db=newPDO(«mysql:host=$server;dbname=$db_name»,$user,$password);

// Создание исключения при ошибке

$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

// Запрос на создание таблицы

$sql=»CREATE TABLE books(«.

«id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,».

«title VARCHAR(50) NOT NULL,».

«author VARCHAR(50) NOT NULL,».

«genre SET(‘Драма’,’Роман’,’Повесть’,’Рассказ’,’Поэма’),».

«price DECIMAL(15,2),».

«edition TINYINT UNSIGNED DEFAULT ‘1’ NOT NULL».

«isbn VARCHAR(50),».

«page_num SMALLINT UNSIGNED,».

«publish_year SMALLINT(4),».

«creation_date TIMESTAMP);»;

// Выполняем запрос

$db->exec($sql);

echo»Таблица успешно создана!»;

}

catch(PDOException$e){

echo»Ошибка при создании таблицы в базе данных: «.$e->getMessage();

}

// Закрываем соединение

$db=null;

?>

Вопрос 2. Что будет если удалить все таки используемые таблицы?

Во первых, рабочие функции проекта, станут не рабочими. Только вот сразу об этом можно не узнать, если нет 100% покрытия тестами (у нас нет).  Редкая функциональность может быть действительно редко используемой и для обнаружения бага может понадобиться месяц и более.

И во вторых , ответственный исполнитель получит по шапке. Хотя одобрение другими программистами частично снимет ответственность с бедолаги.

Обе причины не вселяют оптимизма и поэтому лучше не удалять подозрительные таблицы сразу, а временно переименовать их и так оставить на значительное время. Например, на пол года.

Перейдем к практической реализации задачи.

Ссылка на основную публикацию