Ошибка sql 1075

MySQL is returning that error (most likely) because there is no unique index defined on the id column. (MySQL requires that there be a unique index. The other possibility, which you would have already figured out, is that there can be only one column defined as AUTO_INCREMENT within the table.)

To get that column to be an AUTO_INCREMENT, you can add either a UNIQUE constraint or a PRIMARY KEY constraint on the id column. For example:

ALTER TABLE `blog` ADD CONSTRAINT `blog_ux` UNIQUE (`id`) ;

(Note that this statement will return an error if any duplicate values exist for the id column.)

Alternatively, you can make the id column the PRIMARY KEY of the table (if the table doesn’t already have a PRIMARY KEY constraint defined).

ALTER TABLE `blog` ADD PRIMARY KEY (`id`) ;

(Note that this statement will return an error if any duplicate value exist for the id column, OR if there are any NULL values stored in that column, of if there is already a PRIMARY KEY constraint defined on the table.)

2 / 2 / 1

Регистрация: 25.12.2016

Сообщений: 115

1

09.01.2017, 08:48. Показов 14816. Ответов 11


Студворк — интернет-сервис помощи студентам

При создании таблицы вышла ошибка:

Что сделано не правильно.

Миниатюры

Ошибка 1075: "Некорректное определение таблицы"
 



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

09.01.2017, 08:48

11

Модератор

4204 / 3044 / 581

Регистрация: 21.01.2011

Сообщений: 13,178

09.01.2017, 09:48

2

Цитата
Сообщение от SZV
Посмотреть сообщение

Что сделано не правильно

Как минимум, у тебя столбец объявлен как PRIMARY, т.е. PK и при этом может иметь значение NULL. Что неверно по определению PK.
А вообще лучше приводить не картинку, а конструкцию CREATE TABLE, ибо не все знакомы с теми визуальными средами, которыми пользуешься ты.



0



2 / 2 / 1

Регистрация: 25.12.2016

Сообщений: 115

09.01.2017, 11:55

 [ТС]

3

Да, тут была ошибка, стоит галочка на null, что, действительно не должно быть.

Интересно, а что означает галочка на A_l, нужна ли она там в строке где ставится id?



0



Модератор

4204 / 3044 / 581

Регистрация: 21.01.2011

Сообщений: 13,178

09.01.2017, 12:35

4

Цитата
Сообщение от SZV
Посмотреть сообщение

что означает галочка на A_l, нужна ли она там в строке где ставится id

Полагаю, что AUTO_INCREMENT. А нужна или нет зависит от того, каким способом ты формируешь значение id.



0



2 / 2 / 1

Регистрация: 25.12.2016

Сообщений: 115

09.01.2017, 12:38

 [ТС]

5

Но ведь у меня в индексе уже указано PRIMARY что и означает AUTO_INCREMENT, или PRIMARY означает что-то другое.



0



Модератор

4204 / 3044 / 581

Регистрация: 21.01.2011

Сообщений: 13,178

09.01.2017, 13:19

6

Цитата
Сообщение от SZV

уже указано PRIMARY что и означает AUTO_INCREMENT

Нет.
PK — это одно из ограничений целостности данных, служит для однозначной идентификации строки. Кроме того, если есть дочерняя таблица, в которой заводится FK (Foreign Key), то он ссылается на PK дочерней таблицы.
AUTO_INCREMENT — это один из способов формирования уникального значения в колонке, не единственный.
Более того, если PK — это элемент структуры данных и существует во всех реляционных БД, то A_I — совсем не во всех.



1



410 / 364 / 142

Регистрация: 09.04.2011

Сообщений: 1,041

09.01.2017, 14:28

7

Цитата
Сообщение от Grossmeister
Посмотреть сообщение

FK (Foreign Key),то он ссылается на PK дочерней таблицы.

Это не так:
1. FK ссылается на родительскую
2. не обязательно PK, достаточно unique
3. InnoDB имеет своё собственное расширение стандарта, позволяющее ссылаться на не уникальные значения в родительской таблице. (зачем не знаю; кроме трудно диагностируемых ошибок это, имхо, ни к чему не приводит)

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



0



Модератор

4204 / 3044 / 581

Регистрация: 21.01.2011

Сообщений: 13,178

09.01.2017, 14:57

8

Цитата
Сообщение от retvizan

1. FK ссылается на родительскую

Ну конечно это моя описка.

Цитата
Сообщение от retvizan

2. не обязательно PK, достаточно unique

Я в курсе, но все таки чаще на PK.

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



0



2 / 2 / 1

Регистрация: 25.12.2016

Сообщений: 115

09.01.2017, 15:28

 [ТС]

9

Ребята вы так много и хорошо сказали, что я не уловил главное. Если мне достаточно поставить галочку на A_l для AUTO_INCREMENT то тогда нет ни какого смысла указывать индекс PRIMARY? или все таки указывать.
Я здесь говорю о строке где будет автоматически отображаться id.



0



Модератор

4204 / 3044 / 581

Регистрация: 21.01.2011

Сообщений: 13,178

09.01.2017, 15:41

10

Цитата
Сообщение от SZV
Посмотреть сообщение

я не уловил главное

Еще раз: PRIMARY KEY и AUTO_INCREMENT — это перпендикулярные вещи. PK может не быть A_I и наоборот, A_I может не быть PK.
Я уж не говорю про случаи с составным PK, когда он состоит из нескольких полей. Ну а если ты прочитаешь про отличия естественного и суррогатного ключей, будет вообще хорошо.



0



2 / 2 / 1

Регистрация: 25.12.2016

Сообщений: 115

09.01.2017, 16:19

 [ТС]

11

Ладно сделаю вид, что понял. Сам для себя уяснил что суррогатные ключи помогают в работе реальным ключам, т.е указав PRIMARY KEY галочку на A_l лучше все таки поставить (это и будет суррогатный ключ), даже боюсь спрашивать о том, что если я буду использовать только суррогатный ключ: будет ли id отображаться по порядку? Сам изучаю php даже не первый год, а первую неделю, так что… все очень интересно.



0



Модератор

4204 / 3044 / 581

Регистрация: 21.01.2011

Сообщений: 13,178

09.01.2017, 16:36

12

Цитата
Сообщение от SZV
Посмотреть сообщение

будет ли id отображаться по порядку

Нет. В общем случае отсутствие «дырок» в нумерации никто не гарантировал.



0



Доброго дня,
Читаю учебник по MySQL и при выполнении примеров из него, у меня не получается создать новую таблицу с AUTO_INCREMENT’ом. Код:

CREATE TABLE album (
artist_id SMALLINT(5) NOT NULL,
album_id SMALLINT(4) NOT NULL AUTO_INCREMENT,
album_name CHAR(128) DEFAULT NULL,
PRIMARY KEY (artist_id, album_id)
);

Ошибка:

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

Я понимаю суть того на что оно ругается, но не понимаю — почему? У меня же указан единственный столбец с AUTO_INCREMENT и он является частью индекса. В книге идентичный пример работает почему-то. Если сделать PRIMARY KEY только из album_id — таблица создается.


  • Вопрос задан

    более трёх лет назад

  • 3088 просмотров

В книге идентичный пример работает почему-то

Фокусы руками, найдите различие:

mysql> CREATE TABLE album ( artist_id SMALLINT(5) NOT NULL, album_id SMALLINT(4) NOT NULL AUTO_INCREMENT, album_name CHAR(128) DEFAULT NULL, PRIMARY KEY (artist_id, album_id) ) engine=innodb;
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
mysql> CREATE TABLE album ( artist_id SMALLINT(5) NOT NULL, album_id SMALLINT(4) NOT NULL AUTO_INCREMENT, album_name CHAR(128) DEFAULT NULL, PRIMARY KEY (artist_id, album_id) ) engine=myisam;
Query OK, 0 rows affected (0,00 sec)

mysql>

У вас с книгой разные дефолтные движки, в будущем от этого могут ещё сюрпризы возникать. Очень разные myisam и innodb по поведению, возможностям и ограничениям.

Пригласить эксперта


  • Показать ещё
    Загружается…

05 июн. 2023, в 22:21

1500 руб./за проект

05 июн. 2023, в 22:02

500 руб./за проект

05 июн. 2023, в 21:36

100000 руб./за проект

Минуточку внимания

I try to «alter Table»
I need one more AI field, not key…
«List»

ID INT(11):PK Not Null AutoIn..
Name VARCHAR
UserID INT(11):FK Not Null
edit BOOL

and now i need one more field «sortpos» as AI.
I try it with MySQL Workbench

ALTER TABLE `**mydb**`.`List` 
ADD COLUMN `sortpos` INT(11) NOT NULL AUTO_INCREMENT AFTER `edit`;

Can u help me?

Thx

asked Mar 12, 2014 at 21:32

Akdes's user avatar

7

You can’t get better error message than this one. You already have ID defined as Auto Increment in your table. Now you are trying to add another field sortpos as auto increment which is not allowed. One table can only have one auto increment which must be defined as primary key.

Remove AUTO_INCREMENT from the alter statement and create a trigger to increment the new column.

answered Mar 12, 2014 at 23:26

Riz's user avatar

RizRiz

1,11915 silver badges23 bronze badges

1

Based on your comments, you are confusing user interface with table data. The table only needs to have one ID, if you want you can create a query like this:

SELECT ID, ID AS SORTPOS, NAME FROM List

But you don’t even need a query for that, you should do it only at user interface level.

Plus, what you show in your comment is merely the heading of a list, not the list itself.

answered Mar 14, 2014 at 6:41

koriander's user avatar

korianderkoriander

3,0922 gold badges15 silver badges23 bronze badges

To fix this error, you need to add PRIMARY KEY to auto_increment field. Let us now see how this error occurs −

Here, we are creating a table and it gives the same error −

mysql> create table DemoTable
(
   StudentId int NOT NULL AUTO_INCREMENT,
   StudentName varchar(40),
   StudentAge int
);
ERROR 1075 (42000) : Incorrect table definition; there can be only one auto column and it must be defined as a key

To solve the above error, you need to add PRIMARY KEY with AUTO_INCREMENT. Let us first create a table −

mysql> create table DemoTable
(
   StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   StudentName varchar(40),
   StudentAge int
);
Query OK, 0 rows affected (1.01 sec)

Insert some records in the table using insert command −

mysql> insert into DemoTable(StudentName,StudentAge) values('Chris Brown',19);
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable(StudentName,StudentAge) values('David Miller',18);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(StudentName,StudentAge) values('John Doe',20);
Query OK, 1 row affected (0.11 sec)

Display all records from the table using select statement :

mysql> select *from DemoTable;

This will produce the following output −

+-----------+--------------+------------+
| StudentId | StudentName  | StudentAge |
+-----------+--------------+------------+
|         1 | Chris Brown  |         19 |
|         2 | David Miller |         18 |
|         3 | John Doe     |         20 |
+-----------+--------------+------------+
3 rows in set (0.00 sec)

Понравилась статья? Поделить с друзьями:
  • Ошибка spn 523704 fmi 5
  • Ошибка spn 523470 fmi 16 камаз евро 5
  • Ошибка spn 520264 fmi 11
  • Ошибка spn 520243 shacman
  • Ошибка spn 520211 fmi 12 на камазе