проверка на существование таблицы sql php
Проверьте, существует ли таблица в SQL Server
Я хотел бы, чтобы это было окончательное обсуждение того, как проверить, существует ли таблица в SQL Server 2000/2005 с помощью инструкции SQL.
когда вы Google для ответа, вы получите столько разных ответов. Есть ли официальный / назад и вперед совместимый способ сделать это?
здесь два возможных способа сделать это. Какой из них является стандартным / лучшим способом сделать это?
в MySQL обеспечивает простой
заявление. Я ищу нечто подобное.
22 ответов
для таких запросов всегда лучше использовать INFORMATION_SCHEMA вид. Эти представления (в основном) стандартны для многих различных баз данных и редко меняются от версии к версии.
чтобы проверить, существует ли таблица, используйте:
также обратите внимание, что если по какой-либо причине вам нужно проверить временную таблицу, вы можете сделать это:
мы всегда использовать OBJECT_ID стиль, сколько я помню
пожалуйста, смотрите ниже подходы,
подход 1: Использование INFORMATION_SCHEMA.Вид таблиц
мы можем написать запрос, как показано ниже, чтобы проверить, существует ли таблица Customers в текущей базе данных.
подход 2: Использование функции OBJECT_ID ()
мы можем использовать функцию OBJECT_ID (), как показано ниже, чтобы проверить, существует ли таблица Customers в текущей базе данных.
Подход 3: Использование системный.Просмотр Каталога Объектов
мы можем использовать Sys.Посмотреть каталог объектов для проверки существования таблицы, как показано ниже:
подход 4: Использование sys.Вид Каталога Таблиц
мы можем использовать Sys.Представление каталога таблиц для проверки существования таблицы, как показано ниже:
подход 5: Избегайте использования sys.системной таблице sysobjects таблице
мы должны избегать использования sys.системной таблице sysobjects стол непосредственно прямой доступ к нему будет устаревшим в некоторых будущих версиях Sql Server. Согласно ссылке Microsoft BOL, Microsoft предлагает использовать представления каталога sys.объекты/системы.таблицы вместо sys.системная таблица sysobjects напрямую.
Как проверить существование таблицы MySQL?
Как правильно проверить запись в таблице на существование?
Всё время проверял запись как: SELECT id FROM users WHERE username=»john»; Сейчас задумался, а.
Проверить существование таблицы mdb
Как проверить, существует ли в базе mdb нужная таблица? Есть такой способ.
Glassfish4. Проверить существование базы и таблицы
Можно ли как-то проверить существование базы и таблицы? Такие запросы вообще существуют?
Понимаю, что некропощу но дополню.
Код от мистера Agmassmagist верный, но не совсем полный (так работать не будет).
Работать будет, если прописать SQL запрос полностью:
Andrews32, первое сообщение и с таким душком
Зачем так «измываться» над здравым смыслом? Сделайте хотя бы так:
Похоже, кто-то слишком пристально ищет соринки в чужом здравым смысле,
не замечая бревнА в своём глазу.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как проверить существование записи?
Добрый вечер. Есть таблица: CREATE TABLE tbl (id INTEGER PRIMARY KEY AUTOINCREMENT, date_latest.
Как проверить существование объекта
Есть объект «data.response.body», иногда его может и не быть. Как собсно это проверить? если его.
Как проверить существование файла?
Здравствуйте, у меня в событие FormCreate записан код, который читает строки из текстовое файла и.
MySQL: как проверить существование таблицы
Vladimir Kochetkov
Нужно проверить существование таблицы в что-то типа такой структуре:
IF TABLE EXISTS tabl_name THEN…
END IF
Не могу найти в мануале как это решить…
Дополнено (1). to gmaneye
С чего же это неправильный тон программирования?
Или для вас правильный тон использовать Oracle для четырех типов запросов SELECT, INSERT, UPTADE и DELETE?
Короче написал что-то вроде такого:
SELECT COUNT(1) INTO tabl_found
FROM information_schema.tables
WHERE table_name = tabl_name
AND schema = DATABASE()
LIMIT 1;
IF tabl_found = 1 THEN…
END IF
Дополнено (2). короче все равно не работает чего-то
tabl_found принимает значение DEFAULT, а не 0 или 1
Дополнено (3). Исправил:
SELECT COUNT(1) INTO tabl_found
FROM information_schema.tables
WHERE table_name = tabl_name
AND table_schema = DATABASE();
Дополнено (4). WebMikE,
а причем тут php?
gmaneye
Вообще это неправильный тон программирования.
Для чего такое?
Lyoha_22
лучший ответ SELECT * FROM information_schema.tables WHERE table_name = ‘Имя таблицы’ LIMIT 1
dasm32
SELECT * FROM information_schema.tables WHERE table_name = ‘таблица’ LIMIT 1
Если есть доступ к information_schema
SHOW TABLES FROM база LIKE ‘таблица’ вот еще вариант
WebMikE
Вот есть такая функция:
http://nopaste.info/58474a7f3d.html
KOCT
$query = mysql_query(«SELECT * FROM ТАБАНЕЙМ
//а дальше
if($query) <
Предикат EXISTS SQL и проверка существования набора значений
Назначение предиката SQL EXISTS
Предикат языка SQL EXISTS выполняет логическую задачу. В запросах SQL этот предикат используется в выражениях вида
Это выражение возвращает истину, когда по запросу найдена одна или более строк, соответствующих условию, и ложь, когда не найдено ни одной строки.
Обычно предикат EXISTS применяется в случаях, когда необходимо найти значения, соответствующие основному условию, заданному в секции WHERE, и дополнительному условию, заключённому в подзапрос, являющийся аргументом предиката.
Для NOT EXISTS всё наоборот. Выражение
возвращает истину, когда по запросу не найдено ни одной строки, и ложь, когда найдена хотя бы одна строка.
Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке .
Наиболее простые запросы с предикатом SQL EXISTS
В примерах работаем с базой данных библиотеки и ее таблицами «Книга в пользовании» (BOOKINUSE) и «Пользователь» (USER). Пока нам потребуется лишь таблица «Книга в пользовании» (BOOKINUSE).
Author | Title | Pubyear | Inv_No | Customer_ID |
Толстой | Война и мир | 2005 | 28 | 65 |
Чехов | Вишневый сад | 2000 | 17 | 31 |
Чехов | Избранные рассказы | 2011 | 19 | 120 |
Чехов | Вишневый сад | 1991 | 5 | 65 |
Ильф и Петров | Двенадцать стульев | 1985 | 3 | 31 |
Маяковский | Поэмы | 1983 | 2 | 120 |
Пастернак | Доктор Живаго | 2006 | 69 | 120 |
Толстой | Воскресенье | 2006 | 77 | 47 |
Толстой | Анна Каренина | 1989 | 7 | 205 |
Пушкин | Капитанская дочка | 2004 | 25 | 47 |
Гоголь | Пьесы | 2007 | 81 | 47 |
Чехов | Избранные рассказы | 1987 | 4 | 205 |
Пушкин | Сочинения, т.1 | 1984 | 6 | 47 |
Пастернак | Избранное | 2000 | 137 | 18 |
Пушкин | Сочинения, т.2 | 1984 | 8 | 205 |
NULL | Наука и жизнь 9 2018 | 2019 | 127 | 18 |
Чехов | Ранние рассказы | 2001 | 171 | 31 |
Этот запрос вернёт следующий результат:
Customer_ID |
65 |
205 |
Пример 2. Определить ID пользователей, которым выданы книги Чехова, и которым при этом не выданы книги Ильфа и Петрова. Конструкция запроса аналогична конструкции из предыдущего примера с той разницей, что дополнительное условие задаётся предикатом NOT EXISTS. Запрос будет следующим:
Этот запрос вернёт следующий результат:
User_ID |
120 |
65 |
205 |
Написать запрос SQL с предикатом EXISTS самостоятельно, а затем посмотреть решение
Пример 3. Определить автора (авторов), книги которого выданы пользователю с ID 120, а также с ID 18.
Различия предикатов EXISTS и IN
При первом взгляде на запросы с предикатом EXISTS может возникнуть впечатление, что он идентичен предикату IN. Это не так. Хотя они очень похожи. Предикат IN ведет поиск значений из диапазона, заданного в его аргументе, и если такие значения есть, то выбираются все строки, соответствующие этому диапазону. Результат же действия предиката EXISTS представляет собой ответ «да» или «нет» на вопрос о том, есть ли вообще какие-либо значения, соответствующие указанным в аргументе. Кроме того, перед предикатом IN указывается имя столбца, по которому следует искать строки, соответствующие значениям в диапазоне. Разберём пример, показывающий отличие предиката EXISTS от предиката IN, и задачу, решаемую с помощью предиката IN.
Пример 4. Определить ID пользователей, которым выданы книги авторов, книги которых выданы пользователю с ID 31. Запрос будет следующим:
Результатом выполнения запроса будет следующая таблица:
User_ID |
120 |
65 |
205 |
Запросы с предикатом EXISTS и дополнительными условиями
Если дополнительно к предикату EXISTS в запросе применить хотя бы одно дополнительное условие, например, заданное с помощью агрегатных функций, то такие запросы могут служить уже для простого анализа данных. Продемонстрируем это на следующем примере.
Пример 5. Определить ID пользователей, которым выдана хотя бы одна книга Пастернака, и которым при этом выдано более 2 книг. Пишем следующий запрос, в котором первое условие задаётся предикатом EXISTS со вложенным запросом, а второе условие с оператором HAVING всегда должно следовать после вложенного запроса:
Результат выполнения запроса:
Как видно из таблицы BOOKINUSE, книга Пастернака выдана также пользователю с ID 18, но ему выдана всего одна книга и он не попадает в выборку. Если применить к подобному запросу ещё раз функцию COUNT, но уже для подсчёта выбранных строк (потренируйтесь в этом самостоятельно), то можно получить сведения о том, сколько пользователей, читающих книги Пастернака, при этом читают также книги других авторов. Это уже из сферы анализа данных.
Запросы с предикатом EXISTS к двум таблицам
Запросы с предикатом EXISTS могут извлекать данные из более чем одной таблицы. Многие задачи можно с тем же результатом решить с помощью оператора JOIN, но в ряде случаев использование EXISTS позволяет составить менее громоздкий запрос. Использовать EXISTS предпочительнее в тех случаях, когда в результирующую таблицу попадут столбцы лишь из одной таблицы.
В следующем примере из той же базы данных помимо таблицы BOOKINUSE потребуется также таблица «Пользователь» (CUSTOMER).
Customer_ID | Surname |
18 | Зотов |
31 | Перов |
47 | Васин |
65 | Тихонов |
120 | Краснов |
205 | Климов |
Пример 6. Определить авторов, книги которых выданы пользователю по фамилии Краснов. Пишем следующий запрос, в котором предикатом EXISTS задано единственное условие:
Результатом выполнения запроса будет следующая таблица:
Author |
Чехов |
Маяковский |
Пастернак |
Примеры запросов к базе данных «Библиотека» есть также в уроках по операторам GROUP BY, IN и функциям CONCAT, COALESCE.
Предикат EXISTS в соединениях более двух таблиц
Сейчас мы увидим более предметно, почему использовать EXISTS предпочительнее в тех случаях, когда в результирующую таблицу попадут столбцы лишь из одной таблицы.
Пример 7. Определить клиентов, купивших или взявших в аренду объекты, у которых нет лоджии или балкона. Пишем следующий запрос, в котором предикатом EXISTS задано обращение к результату соединения двух таблиц:
Так как из таблицы Client столбцы выбираются при помощи оператора «звёздочка», то будут выведены все столбцы этой таблицы, в которой будет столько строк, сколько насчитывается клиентов, соответствующих условию, заданному предикатом EXISTS. Из таблиц, к соединению которых обращается вложенный запрос, нам не требуется выводить ни одного столбца. Поэтому для экономии машинного времени извлекается лишь один столбец. Для этого после слова SELECT прописана единица. Этот же приём применён и в запросах в следующих примерах.
Написать запрос SQL с предикатом EXISTS самостоятельно, а затем посмотреть решение
Пример 3. Определить менеджеров, которые провели сделки с объектами с числом комнат больше 2.
Продолжаем писать вместе запросы SQL с предикатом EXISTS
Пример 9. Определить собственников объектов, которые были взяты в аренду. Пишем следующий запрос, в котором предикатом EXISTS также задано обращение к результату соединения двух таблиц:
Как и в предыдущем примере, из таблицы, к которой обращён внешний запрос, будут выведены все поля.
Пример 10. Определить число собственников, с объектами которых провёл менеджер Савельев. Пишем запрос, в котором внешний запрос обращается к соединению трёх таблиц, а предикатом EXISTS задано обращение лишь к одной таблице:
Все запросы проверены на существующей базе данных. Успешного использования!
Примеры запросов к базе данных «Недвижимость» есть также в уроках по операторам GROUP BY и IN.
Как проверить наличие записей в таблице MySQL через PHP?
Функция проверяет, есть ли уже в таблице ‘users’ запись о пользователе. Но функция дает ошибку: при вызове она всегда возвращает ‘true’, хотя никакой записи о пользователе в таблице еще нет. Из-за этого данные, переданные через форму, так и не попадают в базу данных. Может быть я неправильно проверяю результат выполнения запроса в функции?
P.S. Вот условие, в котором вызывается функция:
Это очень распространенная ошибка.
И очень нелогичная.
Ты, когда запрашиваешь выписку в банке чтобы узнать, есть ли у тебя деньги, на что смотришь? Просто на то пришла ли выписка, или нет? Серьёзно? Или все-таки смотришь в саму выписку, какие там цифры?
Чтобы узнать, еслть ли в таблице данные, нельзя запрашивать все строки. А представь что ты наконец освоишь программирование и на твоем сайте будет миллион пользователей. Будешь всех запрашивать в РНР чтобы узнать, есть ли хоть один?
Кроме того, забудь про global. Привыкай всегда понимать, откуда и куда у тебя идут переменные, чтобы четко знать какая переменная у тебя что содержит и откуда взялась. А не просто с неба свалилась. Пеередавай переменные в функцию только через параметры