Вызвать Первичный ключ(его название) SQL server
Работаю над проектом на C#. Требуется выделенную строку из датагрида, кот. отображает таблицу, удалить. Никак не удается заполучить первичный ключ таблицы!
Я пытался различными путями получить первичный ключ.Напр.:
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE = ‘PRIMARY KEY’
не понимаю как из этой табл. получить назв-я первичного ключа?
можно как-то получить названия полей первичного ключа?
Спасибо за внимание
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
SQL Server — SQL ввод данных первичный и внешний ключи — ошибка синтаксиса
SQL Server — SQL ввод данных первичный и внешний ключи Проблема с вводом данных первичного ключа .
Замена данных в таблице по связи Первичный ключ — Вторичный ключ
Есть главная таблица и есть от нее зависимая. Требуется: чтоб в зависимую таблицу, в колонку.
Первичный ключ
Может ли в одной таблице быть несколько первичных ключей(primary key)?
Первичный ключ
Если вместе с данными записывается GUID, нужен ли первичный ключ в виде порядкового номера строки ?
Как получить имя первичного ключа?
Предполагаю, что имя ограничения первичного ключа будет my_primary , поэтому если я захочу удалить этот первичный ключ, по идее мне нужно прописать это имя ограничения:
alter table new_tab drop constraint my_primary;
В результате данного запроса получаю следующую ошибку:
ERROR: 3940: Constraint 'my_primary' does not exist.
ограничение с данным именем не существует.
1) В чем ошибка запроса на удаление первичного ключа?
2) Как можно найти имя первичного ключа, если допустим его не прописал в ручную при создании как Я?
3) Почему запрос
select * from information_schema.table_constraints where table_name = 'new_tab';
возвращает
+--------------------+-------------------+-----------------+--------------+------------+-----------------+----------+ | CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE | ENFORCED | +--------------------+-------------------+-----------------+--------------+------------+-----------------+----------+ | def | test | PRIMARY | test | new_tab | PRIMARY KEY | YES | +--------------------+-------------------+-----------------+--------------+------------+-----------------+----------+
из которого следует, что constraint_name = «PRIMARY» (где-то в глубине души я понимаю, что это просто название самого ограничения, а не имя этого ограничения)?
- Вопрос задан более года назад
- 225 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 1
Чебуратор тега РНР
1. выполняем код
create table new_tab (id int); alter table new_tab add constraint my_primary primary key (id); alter table new_tab add key my_primary (id); SHOW INDEX FROM new_tab;
2. думаем
3. пишем 100 раз на доске фразу, «Я всегда буду задавать вопрос про исходную задачу (как удалить первичный ключ), а не про косяки, с которыми столкнулся при её решении (как узнать имя первичного ключа, чтобы его удалить)»
Ответ написан более года назад
Muranx @Muranx Автор вопроса
FanatPHP, токсичность это приговор. очень часто у меня не получается что-то из-за неверного понимания представленных примеров, и кстати вопросов я задал больше чем удаление пк, ты ни на один из них не ответил, а просто потратил СВОЕ (т.е. ТВОЁ драгоценное время), чтобы поумничать, что реально глупо, и ссылки эти (которые ты так любезно нашёл в гугле) не дают ответа на мои вопросы, почему имея схему
ALTER TABLE имя_таблицы [WITH CHECK | WITH NOCHECK]
представленный мною код alter table new_tab drop constraint my_primary;
не хочет работать (т.к. есть всё, и даже имя ограничения, а не просто рабочий код типа alter table tab_name drop constraint primary key), так что благодарю тебя за ещё один токси — высер, но к сожалению, он как и др. бесполезен. Поэтому, я специально написал «НЕ НАДО ЭТОГО» в конце, ну просто не надо. (это как нужно, только не нужно), т.к. ты же тратишь своё время и моё, бесполезно в надежде уколоть человека, вообще это реально странно, что у программистов у многих что-то с самооценкой, т.к. это реально убогое желание, не помогать и созидать (а случаи реально всякие бывают, и да, я разберусь со временем во всём, в чем нужно), но пока я не шарю) а умничать на фоне чужого незнания. просто жезть, хз какие вы в социуме а не в коде! 😀
я уже поменял ответ
и нет, токсичность — это не приговор.
а вот неумение системно мыслить — это таки да.
Muranx @Muranx Автор вопроса
FanatPHP, боже да что с тобой не так то ! 😀 я просто в шоке, вот в каждом ответе ты пытаешься мне сказать, что я туплю. Аааааа, я не понимаю этого, что с твоей самооценкой, ты реально кайфуешь от этого? 😀 Даже если в заголовке я задал 1 вопрос, а в тексте вопроса задал ещё несколько (ну да, я же не могу задать все их в заголовке, + это не менуемый процесс, натыкаться на какие-то касяки при изучении одной темы, которые тянут за собой другие), ну если ты знаешь ответ, ну ответь, а если ты хочешь побрызгать желчью, ну просто лови себя на этой мысле, это деструктивное поведение! Вот ты сейчас изменил ответ, это УЖЕ означает что ты был не прав, и снова ты пишешь хрень вроде вместо ответа на вопрос , как найти имя ПК. и очередную хрень вместо ответа на третий вопрос. Если я пойму, как это делать (разберусь), я тебе отвечу так, как ты будешь должен отвечать в будущем нормальным людям, которые просто пока не понимают как это работает. А если у тебя появилось врдуг желание, написать какую-то гадость, вроде той, что ты пишешь уже во второй раз, ну просто пройди мимо, ну пройди, ну скажи «вот тупой, не шарит, это же элементарно» и просто пройди мимо, НО нееет, судя по всему этим твоя самооценка сыта не будет! 🙂
Зачем вы вообще пытаетесь заниматься программированием?
С таким талантищем надо в копирайтеры идти, или там в блогеры.
Вы производите тонну словесного поноса на единицу смысла. Это умение очень ценится в вышеозначенных профессиях. Послушайте доброго совета, присмотритесь к этим вакансиям
Писать СЕО тексты — это вот прямо ваше родное.
Muranx @Muranx Автор вопроса
FanatPHP, уфф, благодарю за совет, вообще программирование это моё хобби, у меня есть основная работа, которая приносит мне неплохой доход, ну и в свободное время я изучаю новую сферу! Это прикольно, когда человек, который не может объяснить некоторые вещи без изрыгивания тонн желчи на того, кто задаёт вопрос, дабы реабилитировать себя, начинает говорить подобное! И кста. ;D Мскл я изучаю, в виду потребности писать бэк самому, ну и знания html , css, js у меня имеются, НО к сожалению этого не хватает, для того, чтобы делать полноценные приложения, с серверной частью, поэтому принялся изучать мскл, ну и пхп, и да, по js я тоже задавал в своё время много вопросов, и да, таких как ты в ру комьюнити просто ТОННА, и ДА (мать его) я разобрался со многими концепциями со временем ! 😀 НО радует , что находятся и те, кто реально интересно и просто объясняют ! Ты знаешь на кого ты похож, на МС по боксу, который заходит в дом инвалидов, и начинает применять свои навыки на беспомощных людях! 🙂 Не красиво это, ужасно, зашкварно я бы сказал, то, что ты мне тут выговариваешь. чисто по человечески зашкварно! 🙂
Вы попробуйте всё-таки задуматься как-нибудь, почему именно на вас попадают тонны желчи, которые других почему-то не задевают. Причем настолько регулярно, что вы её всегда ждёте заранее.
Muranx @Muranx Автор вопроса
FanatPHP, ну было не мудрено что ты это предположишь, когда я сказал фразу про «тонны желчи» 😀 ты же всё равно от этого правым не стал, ответ не дал, потратил своё время, и Моё, испортил впечатление о себе . Всё, завязывай, когда разберусь , обязательно тебе напишу, как нужно отвечать ,если не плевать на то, как к тебе относятся нормальные люди! 🙂 Пока удачи
Добавление и изменение первичного ключа таблицы в Access
Первичный ключ — это поле или набор полей со значениями, которые являются уникальными для всей таблицы. Значения ключа могут использоваться для обозначения всех записей, при этом каждая запись имеет отдельное значение ключа. Каждая таблица может содержать только один первичный ключ. Access может автоматически создавать поле первичного ключа при создании таблицы. Вы также можете самостоятельно указать поля, которые нужно использовать в качестве первичного ключа. В этой статье объясняется, как и зачем использовать первичные ключи.
Чтобы задать первичный ключ таблицы, откройте таблицу в режиме конструктора. Выберите нужное поле (или поля), а затем на ленте щелкните Ключевое поле.
Примечание: Эта статья относится только к классическим базам данных Access. В веб-приложениях Access и веб-базах данных первичный ключ для новых таблиц назначается автоматически. Несмотря на то что автоматические первичные ключи можно менять, делать это не рекомендуется.
В этой статье
- Общие сведения о первичных ключах в Access
- Определение первичного ключа в Access с помощью имеющихся полей
- Удаление первичного ключа
- Изменение первичного ключа в Access
- Дополнительные сведения
Общие сведения о первичных ключах в Access
Используя поля первичных ключей, Access быстро связывает данные из нескольких таблиц и объединяет их понятным образом. Вы можете добавить поля первичных ключей в другие таблицы, чтобы ссылаться на таблицу, которая является источником первичного ключа. В других таблицах поля называются внешними ключами. Например, поле «ИД клиента» в таблице «Клиенты» также может отображаться в таблице «Заказы». В таблице «Клиенты» оно является первичным ключом. В таблице «Заказы» оно называется внешним ключом. Проще говоря, внешний ключ — это первичный ключ другой таблицы. Дополнительные сведения см. в статье Основные сведения о создании баз данных.
1. Первичный ключ
При переносе существующих данных в базу данных в них уже может существовать поле, которое можно использовать как первичный ключ. Часто в роли первичного ключа таблицы выступает уникальный идентификационный номер, например порядковый или инвентарный номер или код. Например, в таблице «Клиенты» для каждого клиента может быть указан уникальный код клиента. Поле кода клиента является первичным ключом.
Для первичного ключа автоматически создается индекс, ускоряющий выполнение запросов и операций. Кроме того, приложение Access проверяет наличие и уникальность значений в поле первичного ключа.
При создании таблицы в режиме таблицы Access автоматически создает первичный ключ с именем «Код» и типом данных «Счетчик».
Создание приемлемого первичного ключа
Чтобы правильно выбрать первичный ключ, следует учитывать несколько характеристик.
- Ключ должен однозначно определять каждую строку.
- В нем не должно быть пустых или отсутствующих значений — он всегда содержит значение.
- Ключ крайне редко изменяется (в идеале — никогда).
Если не удается определить приемлемый ключ, создайте для него поле с типом данных «Счетчик». Поле «Счетчик» заполняется автоматически созданными значениями при первом сохранении каждой записи. Таким образом, поле «Счетчик» соответствует всем трем характеристикам приемлемого первичного ключа. Дополнительные сведения о добавлении поля «Счетчик» см. в статье Добавление поля счетчика в качестве первичного ключа.
Поле с типом данных «Счетчик» является хорошим первичным ключом.
Примеры неудачных первичных ключей
Любое поле, не имеющее одной или нескольких характеристик подходящего первичного ключа, не следует выбирать в качестве первичного ключа. Ниже представлено несколько примеров полей, которые не годятся на роль первичного ключа в таблице «Контакты», и пояснения, почему их не следует использовать.
Неподходящий первичный ключ
Может быть не уникальным и может изменяться
Адрес электронной почты
Почтовый индекс может соответствовать нескольким контактным данным
Сочетание фактов и цифр
Факты могут изменяться, тем самым усложняя работу. Если фактическая часть повторяется в виде отдельного поля, это может привести к путанице. Например, не следует соединять название города и порядковый номер (например, САМАРА0579), если название города уже указано в отдельном поле.
Номера социального страхования или ИНН
- Личные сведения запрещено указывать в государственных учреждениях и некоторых организациях.
- Некоторые люди не имеют ИНН
- На одного человека может быть зарегистрировано несколько ИНН на протяжении жизни
Составные ключи: использование сочетания нескольких полей в качестве первичного ключа
В некоторых случаях в качестве первичного ключа таблицы нужно использовать несколько полей. Например, для таблицы сведений о заказах, в которой хранятся элементы строк для заказов, в первичном ключе можно использовать два столбца: «Номер заказа» и «Артикул». Если ключ состоит из нескольких полей, он также называется составным ключом.
Определение первичного ключа в Access с помощью имеющихся полей
Для правильной работы первичного ключа поле должно однозначно определять каждую строку, не содержать пустых и отсутствующих значений и редко изменяться (в идеале — не изменяться никогда). Чтобы задать первичный ключ, выполните указанные ниже действия.
- Откройте базу данных, которую нужно изменить.
- В области навигации щелкните правой кнопкой мыши таблицу, в которой нужно определить первичный ключ, и в контекстном меню выберите пункт Конструктор.
Совет: Если область навигации не отображается, нажмите клавишу F11.
Удаление первичного ключа в Access
При удалении первичного ключа одно или несколько полей, использовавшихся ранее в качестве первичного ключа, больше не являются идентификаторами записи.
Удаление первичного ключа не приводит к удалению полей таблицы, но при этом удаляется индекс, созданный для первичного ключа.
-
Перед удалением первичного ключа необходимо убедиться, что он не используется в связях между таблицами. Если вы попытаетесь удалить первичный ключ, являющийся частью одной или нескольких связей, Access предупредит вас, что сначала необходимо удалить связи.
Чтобы удалить связь между таблицами, сделайте следующее:
- Закройте связанные таблицы, если они открыты. Связь между открытыми таблицами удалить невозможно.
- На вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных.
- Выберите Добавить таблицы (Показать таблицу в Access 2013).
- Щелкните линию связи между таблицами, которую необходимо удалить (выделенная линия становится жирной), а затем нажмите клавишу DEL.
- На вкладке Конструктор в группе Связи нажмите кнопку Закрыть.
Совет: Если область навигации не отображается, нажмите клавишу F11.
Примечание: При сохранении новой таблицы без указания первичного ключа будет предложено создать этот ключ. Если нажать кнопку Да, приложение Access создаст поле «ИД» с типом данных «Счетчик» для сохранения уникального значения для каждой записи. Если в таблице уже есть поле с таким типом данных, оно будет использоваться в качестве первичного ключа.
Изменение первичного ключа в Access
Чтобы изменить первичный ключ таблицы, выполните указанные ниже действия.
- Удалите существующий первичный ключ, следуя инструкциям в разделе Удаление первичного ключа.
- Определите первичный ключ в соответствии с инструкциями в разделе Определение первичного ключа.
Дополнительные сведения
Дополнительные сведения о создании базы данных и выборе подходящего первичного ключа см. в указанных ниже статьях.
- Основные сведения о базах данных
- Структура базы данных Access
- Создание базы данных Access
- Создание таблиц в базе данных
Как создать первичные и внешние ключи MySQL
В этой инструкции рассказываем про первичный и внешний ключи SQL, зачем они нужны и как их создать различными способами.
Эта инструкция — часть курса «MySQL для новичков».
Смотреть весь курс
Введение
Работа современных приложений и сложных сайтов, которыми мы привыкли пользоваться, невозможна без баз данных. Поэтому правильно настроенные БД важны для приложения не меньше, чем их дизайн и код, который с этой базой взаимодействует. Работа современных реляционных баз данных сложно представить без корректно настроенных первичных и внешних ключей. В этой инструкции мы подробно разберем создание этих ключей MySQL, расскажем для чего они нужны и как их использовать.
Облачные базы данных
Что такое первичный и внешний ключи и зачем они нужны
Начнем рассмотрение данного вопроса с двух самых главных элементов: первичного и внешнего ключей.
Первичный ключ или primary key
Первичный ключ — особенное поле в SQL-таблице, которое позволяет однозначно идентифицировать каждую запись в ней. Как правило, эти поля используются для хранения уникальных идентификаторов объектов, которые перечислены в таблице, например, это может быть ID клиента или товара.
Первичный ключ имеет несколько свойств:
- каждая запись в таком поле должна быть уникальной;
- запись в поле не должна быть пустой;
- в одной таблице может быть только один ключ (существуют также составные ключи, которые могут включать в себя несколько полей, однако в этой статье мы не будем их рассматривать).
Внешний ключ или foreign key
Внешний ключ нужен для того, чтобы связать две разные SQL-таблицы между собой. Внешний ключ таблицы должен соответствует значению первичного ключа таблицы, с которой он связан. Это помогает сохранять согласованность базы данных путем обеспечения так называемой «ссылочной целостности» (referential integrity).
Давайте рассмотрим все это на примере простой базы данных. Для начала нам понадобится создать базу данных. Заходим в MySQL и создаем базу данных, в которой будут храниться записи о книгах в библиотеке:
create database slcbookshelf;
Так как дальше мы будем работать с этой базой, вводим команду:
use slcbookshelf;
И создаем таблицу, в которой будут храниться записи о книгах в библиотеке:
CREATE TABLE books ( book_id INT NOT NULL, book_name VARCHAR(255) NOT NULL, book_category VARCHAR(255));
Создание первичного ключа при создании таблицы и с помощью ALTER TABLE
В созданной выше таблице ни одно из полей не является первичным ключом. Увидеть это мы можем, выполнив команду:
DESC books;
Вывод команды будет выглядеть следующим образом:
mysql> DESC books; +---------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+-------+ | book_id | int | NO | | NULL | | | book_name | varchar(255) | NO | | NULL | | | book_category | varchar(255) | YES | | NULL | | +---------------+--------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
Первичный ключ при создании таблицы
Вы можете также создать его при создании таблицы, добавив в команду для создания таблицы следующую запись:
PRIMARY KEY (book_id)
В таком случае поле book_id после создания таблицы будет являться первичным ключом для таблицы books.
Создание первичного ключа при помощи ALTER TABLE
Если таблица уже создана, а первичный ключ в ней не указан, вы можете создать ключевое поле, с помощью команды ALTER TABLE. Команда ALTER TABLE помогает изменять уже существующие столбцы, удалять их или добавлять новые. Чтобы определить первичный ключ в поле book_id, выполните команду:
ALTER TABLE books ADD PRIMARY KEY (book_id); Проверяем: mysql> DESC books; +---------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+-------+ | book_id | int | NO | PRI | NULL | | | book_name | varchar(255) | NO | | NULL | | | book_category | varchar(255) | YES | | NULL | | +---------------+--------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
Установка внешнего ключа MySQL при создании таблицы и с помощью ALTER TABLE
Предположим, у нас есть еще одна таблица под названием authors, которую нам необходимо связать с текущей таблицей books с помощью внешнего ключа author_id.
Внешний ключ при создании таблицы
Для того, чтобы привязать к таблице внешний ключ сразу при создании таблицы, вам необходимо дополнить запрос, которым вы создаете таблицу следующей записью:
FOREIGN KEY (author_id) REFERENCES authors(author_id)
В итоге запрос, которым создается такая таблица будет выглядеть следующим образом:
CREATE TABLE books ( book_id INT NOT NULL, book_name VARCHAR(255) NOT NULL, book_category VARCHAR(255), FOREIGN KEY (author_id) REFERENCES authors(author_id));
Создание внешнего ключа при помощи ALTER TABLE
Если вам нужно определить поле уже созданной таблицы в качестве внешнего ключа, вы можете воспользоваться командой ALTER TABLE и создать внешний ключ в таблице командой:
ALTER TABLE books ADD FOREIGN KEY (author_id) REFERENCES authors(author_id);
Сценарии использования внешнего ключа
Внешний ключ является очень важным и мощным инструментом в работе современных баз данных. С помощью внешнего ключа, например, вы можете настроить параметры, которые зададут действия при удалении или обновлении строки в таблице, настроить каскадное удаление или запретить изменять строку в таблице. Давайте рассмотрим на примерах.
Каскадное удаление или CASCADE
Каскадное удаление позволит вам одновременно удалить строки из главной таблицы, а вместе с ними удалить все связанные строки в других таблицах. Задается каскадное удаление таким запросом:
CREATE TABLE Orders( Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE CASCADE);
Аналогично работает метод ON UPDATE CASCADE. При попытке изменить значение, записанное в поле первичного ключа, изменение будет применено к внешнему ключу, связанному с данным полем. Этот метод используется крайне редко, так как первичные ключи практически не являются изменяемыми полями.
RESTRICT
Опция RESTRICT позволяет отклонять все запросы на изменение или удаление строк в главной таблице при условии, что в связанной таблице также имеются строки. Задается данное ограничение следующим запросом:
CREATE TABLE Orders( Id INT PRIMARY KEY AUTO_INCREMENT, Customer_Id INT, CreatedAt Date, FOREIGN KEY (Customer_Id) REFERENCES Customers (Id) ON DELETE RESTRICT);
Заключение
В данной статье мы рассмотрели что такое первичный и внешний ключи SQL, зачем они нужны и как их создать различными способами: при создании таблицы или при помощи ALTER TABLE. Также мы рассмотрели несколько сценариев использования внешнего ключа для управления таблицами.
Как установить и использовать MySQL Workbench