2016-09-07 10 views
0

Если я создаю новый Tabel в моей h2 базе данных, как это ...H2 базы данных первичного ключа на создание

CREATE TABLE MAININCOMER(timestamp TIMESTAMP, value REAL);

Это означает, что идентификатор будет скрыт и автоматическое приращение, когда я пишу в Tabel , правильно? - (насколько я узнал из учебника и функций)

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

CREATE TABLE MAININCOMER(timestamp TIMESTAMP PRIMARY KEY, value REAL);

Спасибо, Алекс

+0

"* Это означает, что идентификатор будет скрыт *" - НЕТ. Это означает, что ваша таблица не будет иметь столбец «ID», даже не «скрытый». Если вы хотите иметь столбец с именем 'ID', вам нужно его определить. –

ответ

0

№: ваша таблица не будет иметь ID колонку, так как он не указан в вашем DDL CREATE TABLE.

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

Но это гораздо меньше, чем с любой другой базы данных :-D

Пожалуйста, измените свой DDL на эту полную линию:

CREATE TABLE MAININCOMER(id IDENTITY, timestamp TIMESTAMP, value REAL); 

Вы можете проверить его в веб-консоли H2, как это:

@loop 1000 insert into mainincomer (timestamp) values (now()); 

Это будет вставлять 1000 записей, и вы увидите, что идентификатор определяется как BIGINT(19) NOT NULL, при этом ему назначается ограничение PRIMARY KEY, и оно является autoincreme Хорошо.

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

+0

Хорошо, давайте посмотрим на большую картину того, чего я пытаюсь достичь. У меня есть вызов среды DGLux5 здесь, я подключаюсь к счетчику энергии и записываю данные в таблицу, когда я ее открываю, у нее есть строка столбца, временная метка и значение. Мне нужно сохранить их в базе данных H2. Теперь моя таблица данных и таблица H2 не должны быть идентичны для передачи данных? приводя к моему следующему вопросу, как написать несколько записей из таблицы данных в базу данных? С INSERT INTO tbl_name VALUES (..., ...), (..., ...), (..., ...), ...., (..., ...); ? В среде сценариев dglux (JavaScript) я могу использовать таблицу – Lexus

+0

tableGetRows (@ parent.table), и она дает мне результат, похожий на этот [[0, 2016-09-08T07: 03: 00.184 "," 50.16 "], [1," 2016-09-08T07: 05: 00.340 "," 50.17 "]] - как бы я мог удалить столбец строк? Удалить« вокруг метки времени »и заменить это с «и удалить» из значения, чтобы в итоге дать мне этот INSERT INTO tbl_name VALUES ('2016-09-08T07: 03: 00.184', 50.16), ('2016-09-08T07: 05: 00.340', 50.17) – Lexus

+0

Вы можете вставить эти данные без использования идентификатора: он создаст для вас значение id. Если вам нужно сохранить исходную информацию о строке, я бы предложил «вставить» в значения mainincomer (original_row, timestamp, value) (10, «2016-09-08T07: 03: 00.184», «50.16») '' ' –

0

Попробуйте это:

create table mainincomer(id bigint auto_increment,t timestamp,value real,primary key(id)) 
+0

Мне действительно не нужен столбец идентификатора, так как я регистрирую данные с измерителя энергии в таблицу темп, у которой есть метка времени и значения по 2 столбца. если я хочу написать это в таблицу базы данных, я думаю, что эти две таблицы должны быть одинаковыми. мне нужен первичный ключ, назначенный одному из столбцов? – Lexus

+0

Если вы используете внешний ключ, то использовать первичный ключ или уникальный ключ является обязательным. @Lexus – dharan

Смежные вопросы