2011-06-21 35 views
7

Tôi đã sử dụng MySQL và tôi cần một cột được gọi là "Trạng thái" trong bảng.Một cột được gọi là Trạng thái trong MySQL

Tôi biết từ này “Status” là một từ khóa trong MySQL, và tôi muốn biết nếu tôi sẽ có vấn đề với nó nếu tôi viết câu lệnh SQL như:

select t.Id, t.Name, t.Status from Table t 

Hoặc trong trigger:

Set new.Status = 1; 

if (new.Status <> old.Status) then 
    /* do something */ 
end if 

Hoặc tôi có nên đổi tên nó cho một từ khác không?

Trả lời

8

Trạng thái có thể là cột riêng của nó nếu bạn bọc nó, trong MySQL, với ``.

SELECT `t`.`Status`. FROM `t` 

Nhưng để tránh nhầm lẫn sau này, bạn nên phân biệt nó theo cách khác.

+0

Về mặt kỹ thuật, điều này là không cần thiết, mặc dù một số trình soạn thảo SQL (ví dụ: phpMyAdmin và Navicat) sẽ đánh dấu từ đó anyway.Xem http://stackoverflow.com/questions/16593166/is -type-and-status-a-reserved-word-in-mysql – seanvalencourt

0

Bạn nên sử dụng ` 'xung quanh sau đó trong mysql và sql bạn nên sử dụng []

3

Tôi sẽ không bao giờ khuyên bạn nên sử dụng các từ khóa như tên cột, nhưng nó không phải là một vấn đề nếu bạn đặt nó bên trong [] như [Trạng thái].

0

đổi tên cột của bạn, kết thúc của cuộc thảo luận

0

TL; DR: Tránh định từ khóa và đổi tên họ nếu bạn có thể, báo giá chúng một cách tỉ mỉ khác.


Bạn chính xác là STATUS is a keyword, có thể do SHOW STATUS.

Nếu đổi tên cột không có nhiều việc vặt cho bạn, việc thay đổi tên là lựa chọn tốt nhất. Bằng cách đó, bạn tránh gặp phải sự cố sau này hoặc lưu mọi người gặp sự cố khi sử dụng cấu trúc cơ sở dữ liệu của bạn.

Nếu bạn muốn giữ lại, tuy nhiên (vì “trạng thái” là tên tiện dụng), điều đó hoàn toàn ổn. Trong khi chủ nghĩa thuần túy rant, nó đảm bảo mã sạch sẽ bởi vì bạn phải sử dụng backticks (') hoặc dấu ngoặc kép ANSI (tức ") theo manual on quoting identifiers.

SELECT `t`.`Status` FROM `Table` t -- properly quoted 

SELECT t.status FROM `Table` t -- multi-part identifier 

SELECT STATUS FROM `Table` t -- will still work, but tease any pedant 

Dĩ nhiên loại này công trình nhận dạng trích dẫn trong logic thủ tục (như trong các kịch bản kích hoạt)

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