← Назад к вопросам
В каком случае первичный ключ равен null
1.3 Junior🔥 171 комментариев
#Базы данных и SQL
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
В каком случае первичный ключ равен null
Краткий ответ
Первичный ключ никогда не может быть NULL в реляционных базах данных. Это одно из фундаментальных свойств первичного ключа, определённое в стандарте SQL и принципах ACID.
Почему это невозможно
Определение первичного ключа:
- Уникально идентифицирует каждую строку в таблице
- Не содержит дубликатов
- Не может быть NULL
Если первичный ключ содержит NULL, это нарушает его назначение:
- Как идентифицировать строку, если значение неизвестно?
- Как различать две строки с NULL в PK?
- Нарушается уникальность (NULL != NULL в SQL стандарте)
Попытка вставить NULL в PK
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100)
);
INSERT INTO users (id, name) VALUES (NULL, 'John');
// Error: NOT NULL constraint violated
Частые ошибки разработчиков
1. Забывают про AUTO_INCREMENT:
// ❌ Плохо
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100)
);
INSERT INTO users (name) VALUES ('John');
// ✅ Правильно
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100)
);
INSERT INTO users (name) VALUES ('John');
2. Путают с UNIQUE ключами: Уникальный ключ может быть NULL:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100) UNIQUE,
phone VARCHAR(20) UNIQUE
);
INSERT INTO users (email, phone) VALUES (NULL, NULL);
В контексте Node.js ORM
Sequelize:
const User = sequelize.define('User', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
});
TypeORM:
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
}
Вывод
Первичный ключ не может быть NULL — это требование реляционной модели данных. Проверяйте AUTO_INCREMENT, избегайте ручного управления и используйте ORM для безопасности.