Как использовать ключевое слово «ссылки» в MySQL?

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

26
задан Eric Leschinski 3 August 2014 в 03:50
поделиться

3 ответа

Создайте таблицу хобби аналогично этой:

CREATE TABLE hobby (
  id INT NOT NULL AUTO_INCREMENT,
  person_id INT NOT NULL,
  hobby_name VARCHAR(255),
  PRIMARY KEY(id),
  FOREIGN KEY(person_id) REFERENCES person(id))
33
ответ дан 28 November 2019 в 03:20
поделиться

Вот пример непосредственно с веб-сайта MySQL :

CREATE TABLE parent (id INT NOT NULL,
                     PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT, parent_id INT,
                    INDEX par_ind (parent_id),
                    FOREIGN KEY (parent_id) REFERENCES parent(id)
                    ON DELETE CASCADE
) ENGINE=INNODB;
7
ответ дан 28 November 2019 в 03:20
поделиться

Помимо того, что разъединение является специфичным для UNIX (как указал Крис), мы читаем в руководстве POSIX:

Если путь не называет каталог, удалить (путь) эквивалентно разъединению (путь). Если путь именует каталог, remove (путь) эквивалентен rmdir (путь).

Что касается переданного каталогом unlink , мы читаем:

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

-121--1190101-

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

-121--2475336-
CREATE TABLE person (person_id INT NOT NULL, 
PRIMARY KEY (person_id));

CREATE TABLE hobby (hobby_id INT NOT NULL, person_id INT NOT NULL,
PRIMARY KEY(hobby_id),
FOREIGN KEY(person_id) REFERENCES person(person_id));

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

Чтобы ответить на ваш вопрос выше о том, что делает «ON DELETE CASCADE», он позволяет удалить родительскую запись ключа (лично) и соответствующие ей дочерние записи (в хобби) без предварительного удаления всех дочерних записей.

Если у вас есть дочерние записи, присоединенные к записи первичного ключа, и вы пытаетесь удалить запись первичного ключа, такую как

DELETE FROM person where person_id = 1;

, без использования команды DELETE ON CASCADE, вы получите ошибку, если какие-либо записи в хобби имели person_id's 1. Прежде чем выполнить удаление, необходимо удалить все эти записи. При использовании команды DELETE ON CASCADE указанное выше удаление приведет к успешному и автоматическому удалению всех записей из таблицы хобби таблицы, связанных с person_id, удаляемым из таблицы первичного ключа.

7
ответ дан 28 November 2019 в 03:20
поделиться
Другие вопросы по тегам:

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