Удалите первичный ключ в MySQL

К сожалению, вы не можете проверить их, используя код, как он есть. Эти функции являются частными для области действия функции обертывания (недоступны за ее пределами). Тем не менее, вы можете реорганизовать свой код, чтобы это произошло:

// module 1
function initSomethings($) {  // <-- notice I added a name
    function iWantToTestThisOne_1() {
        //do something
        doSomething();
    }

    function iWantToTestThisOne_2() {
        //do something
        doSomething();
    }

    function iWantToTestThisOne_3() {
        //do something
        doSomething();
    }

    function doSomething() {
        //doing something
    }

    return { // give back the methods in here...
        iWantToTestThisOne_1,
        iWantToTestThisOne_2,
        iWantToTestThisOne_3,
        doSomething
        // Note that we don't have to return ALL of them, so you could keep some of them private by not returning them here
    };
};  // <-- notice that I am NOT calling the wrapper function

Затем, позже, в каком-то «главном» модуле мы можем инициализировать наши функции:

// "main" module
initSomething();
initAnother();

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

QUnit.test('iWantToTestThisOne_1()', function(assert){
    // Start by initializing your functions...
    let methods = initSomething();
    // Then stub it out...
    let stub_doSomething = sinon.stub(methods, "doSomething").returns("something");

    // Now you call the function you're testing:
    methods.iWantToTestThisOne_1();
    // And do your assertions
    assert.equal(stub_doSomething.called, true, "doSomething() is called");
    // more assertions...
});
171
задан OMG Ponies 15 March 2011 в 22:18
поделиться

6 ответов

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

Вы должны удалить свойство AUTOINCREMENT, прежде чем бросить ключ:

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
ALTER TABLE user_customer_permission DROP PRIMARY KEY;

Обратите внимание, что у вас есть композитный первичный ключ , который охватывает все три столбца, а ID не гарантировано быть уникальным Отказ

Если бы оно было уникальным, вы можете сделать его первичным ключом и auto_increment :

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
273
ответ дан 23 November 2019 в 20:41
поделиться
ALTER TABLE `table_name` ADD PRIMARY KEY( `column_name`);
1
ответ дан 23 November 2019 в 20:41
поделиться

Мне удалось создать Javadocs для всех моих классов, убедившись, что в Android SDK и AVD Manager установлен компонент «Documentation for Android SDK» и что на этапе 2 генерации Javadoc в качестве эталонного архива был выбран андроид.jar.

Он не создал ссылки на справочные документы, но создал документы для всех моих классов.

-121--1562236-

Какой вывод (точно) дает dir myfile.txt в текущем каталоге? Что произойдет, если установить разделители?

FOR /f "tokens=1,2* delims= " %%a in ('dir myfile.txt^|find /i " myfile.txt"') DO SET fileDate=%%a 

(обратите внимание на космос после разделителей = )
(чтобы облегчить жизнь, это можно сделать из командной строки, заменив %% a на % a )

-121--237192-

Одна строка:

ALTER TABLE  `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY (  `id` )

Вы также не потеряете автоприращение и придется добавить его повторно, что может иметь побочные эффекты.

116
ответ дан 23 November 2019 в 20:41
поделиться
ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;
10
ответ дан 23 November 2019 в 20:41
поделиться

Я считаю, что Quassnoi ответил на ваш прямой вопрос. Только сбоку Примечание. Может быть, это просто некоторая неловкая формулировка с вашей стороны, но, похоже, вы находитесь под впечатлением, что у вас есть три основных ключа, один на каждом поле. Это не тот случай. По определению, у вас можно только один основной ключ. То, что у вас здесь - главный ключ, который является композитом трех полей. Таким образом, вы не можете «бросить первичный ключ в столбце». Вы можете бросить первичный ключ или не бросить первичный ключ. Если вы хотите первичный ключ, который включает в себя только один столбец, вы можете отбросить существующую первичную клавишу на 3 столбцах и создать новую первичную клавишу на 1 столбец.

14
ответ дан 23 November 2019 в 20:41
поделиться

"если вы восстановите первичный ключ, то вы обязательно сможете вернуть его обратно в AUTO_INCREMENT"

Не должно быть вопроса, желательно ли "восстановить свойство PK" и "восстановить свойство автоинкрементирования" столбца ID.

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

Любая такая программа прервёт свою работу, не восстановив свойство автоинкремента.

5
ответ дан 23 November 2019 в 20:41
поделиться
Другие вопросы по тегам:

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