Как я узнаю, уникален ли индекс SQLite? (С SQL)

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

На этой странице откройте консоль JavaScript и введите:

document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").click();

И он попытается открыть всплывающее окно независимо от ваших настроек, потому что «щелчок» происходит из пользовательского действия.

Чтобы вести себя как фактический «щелчок мышью» по ссылке, вы нужно следовать рекомендациям @ spirinvladimir и really создать его:

document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").dispatchEvent((function(e){
  e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,
                    false, false, false, false, 0, null);
  return e
}(document.createEvent('MouseEvents'))));

Вот полный пример (не пробуйте его на jsFiddle или аналогичные онлайн-редакторы, поскольку он не позволит вам перенаправлять на внешние страницы):




  


   Go to Google 
  
Click me to trigger custom click

17
задан Christian Davén 3 October 2008 в 07:06
поделиться

4 ответа

PRAGMA INDEX_LIST('table_name');

Returns a table with 3 columns:

  1. seq Unique numeric ID of index
  2. name Name of the index
  3. unique Uniqueness flag (nonzero if UNIQUE index.)

Edit

Since SQLite 3.16.0 you can also use table-valued pragma functions which have the advantage that you can JOIN them to search for a specific table and column. See @mike-scotty's answer.

35
ответ дан 30 November 2019 в 06:51
поделиться

Начиная ни с кого придумал хороший ответ, я думаю, что лучшее решение - это:

  • , Если индекс запускается с "sqlite_autoindex", это - автоматически сгенерированный индекс для единственного столбца
  • UNIQUE Иначе, ищите УНИКАЛЬНОЕ ключевое слово в sql столбце в таблице sqlite_master с чем-то вроде этого:

    ВЫБОР * ОТ sqlite_master, ГДЕ тип = 'индекс' И sql КАК '%UNIQUE %'

5
ответ дан 30 November 2019 в 06:51
поделиться

можно программно создать избранный оператор, чтобы видеть, указывают ли какие-либо кортежи больше чем на одну строку. Если Вы возвращаете три столбца, нечто, панель и baz, создаете следующий запрос

select count(*) from t
group by foo, bar, baz
having count(*) > 1

, Если это возвращает какие-либо строки, Ваш индекс не уникален, так как больше чем одна строка отображается на данный кортеж. Если sqlite3 поддерживает полученные таблицы (у меня должна все же быть потребность, таким образом, я не знаю бесцеремонно), можно сделать это еще более сжатым:

select count(*) from (
    select count(*) from t
    group by foo, bar, baz
    having count(*) > 1
)

Это возвратит набор результатов одной строки, обозначая количество дублирующихся наборов кортежа. Если положительный, Ваш индекс не уникален.

2
ответ дан 30 November 2019 в 06:51
поделиться

Вы близки:

1), Если индекс запускается с "sqlite_autoindex", это - автоматически сгенерированный индекс для первичного ключа. Однако это будет в sqlite_master или sqlite_temp_master таблицы, зависящие в зависимости от того, является ли индексируемая таблица временной.

2) необходимо не упустить имена таблиц и столбцы, которые содержат подстроку unique, таким образом, Вы хотите использовать:

SELECT * FROM sqlite_master WHERE type = 'index' AND sql LIKE 'CREATE UNIQUE INDEX%'

Видят, что sqlite документация веб-сайта относительно Создает Индекс

1
ответ дан 30 November 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: