2013-04-09 72 views
7

Tôi đã tạo ra một bảng với một giá trị mặc định cột maleChèn vào bảng với một giá trị mặc định cột

CREATE TABLE Persons 
(name varchar(20), 
    age int, 
    sex varchar(5) default 'male') 

Chèn tuyên bố # 1:

INSERT INTO Persons values('Bob', 20) 

Chèn tuyên bố # 2:

INSERT INTO Persons(name,sex) values('Bob', 20) 

Khi tôi cố gắng chèn các giá trị vào bảng Persons bằng cách sử dụng câu lệnh chèn # 1 , Tôi nhận được lỗi hiển thị dưới tên cột

hoặc số của các giá trị cung cấp không khớp với định nghĩa bảng

Nhưng khi tôi chèn vào Persons sử dụng tuyên bố # 2, nó thực hiện thành công.

Xin vui lòng giải thích tại sao điều này xảy ra?

Trả lời

5

Vâng, trong tuyên bố của bạn # 1, nếu bạn bỏ qua danh sách các cột, bạn phải giá trị cung cấp cho cả ba cột, và bạn không làm điều đó. Đó là lý do tại sao nó thất bại nếu bạn chỉ cung cấp hai trong số những giá trị đó.

Và tuyên bố của bạn # 2 có lẽ nên được:

INSERT INTO Persons(name, age) values('Bob', 20) 

và sau đó bạn rõ định cột để chèn vào (nameage) và bạn đang cung cấp hai giá trị cần thiết để điền hai cột - đó là lý do tại sao nó hoạt động. Cột thứ ba sẽ được lấp đầy với mặc định được cấu hình, vì bạn không chỉ định bất cứ điều gì cho nó.

Đối với những lý do này, tôi muốn giới thiệu đến luôn xác định rõ ràng danh sách các cột mà bạn muốn chèn dữ liệu vào - không chỉ bỏ qua danh sách đó và giả rằng bạn đang nhận được tất cả các cột đúng ... ..

1

Trường hợp đầu tiên không thành công vì bạn không chỉ định bất kỳ cột nào trong câu lệnh INSERT. Sau đó, bạn chỉ cung cấp các giá trị cho hai cột thay vì cả 3 cột nên không biết cột nào sẽ đặt giá trị vào ... điều này sẽ không hoạt động.

Cách thứ hai hoạt động vì bạn rõ ràng muốn nói rằng bạn muốn chèn vào namegender và bạn chỉ định một giá trị cho mỗi cột.

Sau đây sẽ làm việc (nhưng tôi nghi ngờ bạn muốn 20 trong cột gender):

INSERT INTO Persons(name,gender) 
values('Bob',20) 

Hoặc:

INSERT INTO Persons(name,age) 
values('Bob',20) 

Tôi đoán rằng bạn thực sự muốn được chèn vào age không gender.Điều rất quan trọng là bạn khai báo rõ ràng những cột nào bạn đang chèn dữ liệu vào để bạn lấy dữ liệu trong các cột bên phải.

0

bảng của bạn có 3 cột -

Name 
Age 
Gender 

Bạn đã đặt mặc định cho giới tính. Trong truy vấn (1), bạn đang cung cấp 2 giá trị cho 3 cột, không có danh sách cột. Do đó lỗi.

Raj

2

Nếu bạn không muốn viết các trường, VALUES phải khớp với số trường trong bảng.

Bạn có thể sử dụng DEFAULT Bốn mục đích của bạn:

INSERT INTO Persons VALUES('Bob', 20, DEFAULT); 
+0

True - làm việc này - nhưng tôi vẫn nghĩ rằng nó thích hợp hơn để dứt khoát nói ra danh sách các cột bạn đang chèn vào. Điều này sẽ phá vỡ ngay sau khi ai đó thêm một cột thứ tư vào bảng ... –

+0

@corretge Cảm ơn bạn đã tip :) –

+0

có @marc_s, luôn luôn thích hợp hơn là kiểm soát dữ liệu mà chúng tôi đang chèn. Tôi thêm vào câu trả lời cho mệnh đề DEFAULT chỉ khi bạn quan tâm không giải thích tất cả các trường. – corretge

Các vấn đề liên quan