Thêm nhiều cột SAU một cột cụ thể trong MySQL


361

Tôi cần thêm nhiều cột vào một bảng nhưng định vị các cột sau một cột được gọi lastname.

Tôi đã thử điều này:

ALTER TABLE `users` ADD COLUMN
(
    `count` smallint(6) NOT NULL,
    `log` varchar(12) NOT NULL,
    `status` int(10) unsigned NOT NULL
) 
AFTER `lastname`;

Tôi nhận được lỗi này:

Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để biết đúng cú pháp để sử dụng gần ') SAU lastname' ở dòng 7


Làm cách nào tôi có thể sử dụng SAU trong một truy vấn như thế này?


5
Bạn đang nói phương ngữ gì? Trông giống như mysql đối với tôi. Nhưng ALTER TABLEcú pháp thay đổi một chút giữa các phương ngữ.
Damien_The_Unbeliever


1
Tôi nghĩ rằng bạn cần một từ khóa SAU trên mỗi cột bạn đang thêm. Cho dù điều đó có nghĩa là bạn cần cả 3 để trở thành họ SAU hoặc một câu lệnh ALTER TABLE riêng cho mỗi cột mới, tôi không thể chắc chắn.
Zec

Câu trả lời:


728

Thử cái này

ALTER TABLE users
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

kiểm tra cú pháp


6
[ Là một biết thêm chi tiết ] Nhiều ADD, ALTER, DROP, và CHANGEcác điều khoản được phép trong một đơn ALTER TABLEtuyên bố, cách nhau bằng dấu phẩy. Đây là một phần mở rộng MySQL cho SQL tiêu chuẩn, chỉ cho phép một trong mỗi mệnh đề cho mỗi câu lệnh ALTER TABLE.
informatik01

@Ayyappan Chúng ta có thể làm điều này trong máy chủ sql không?
Roshan

77

Nếu bạn muốn thêm một cột sau một trường cụ thể, thì truy vấn MySQL sau sẽ hoạt động:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL
    AFTER lastname

Nếu bạn muốn thêm nhiều cột, thì bạn cần sử dụng lệnh 'THÊM' mỗi lần cho một cột. Đây là truy vấn MySQL cho điều này:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL,
    ADD COLUMN log VARCHAR(12) NOT NULL,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL
    AFTER lastname

Điểm cần lưu ý

Trong phương thức thứ hai, ADD COLUMN cột cuối cùng thực sự phải là cột đầu tiên bạn muốn nối vào bảng.

Ví dụ: nếu bạn muốn thêm count, log, statustheo thứ tự chính xác sau lastnamethì cú pháp sẽ thực sự là:

ALTER TABLE users
    ADD COLUMN log VARCHAR(12) NOT NULL AFTER lastname,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL AFTER lastname,
    ADD COLUMN count SMALLINT(6) NOT NULL AFTER lastname

3
Phiên bản thứ hai hoạt động hoàn toàn tốt cho tôi. Tôi đang sử dụng MySql 5.5.25.
Norman

không bit cuối cùng của mã thêm các cột theo thứ tự count, log, statushay count, status, log?
Sarfaraaz

1
lưu ý: nếu bạn không thêm bit 'SAU SAU', thì thứ tự mà cột cuối cùng bạn đặt trong danh sách bảng thay đổi đó sẽ không thực sự được áp dụng. Vì vậy, khi bạn thực hiện bảng ALTER TABLE ADD COLUMN blah1, ADD COLUMN blah2; (lưu ý không có mệnh đề 'SAU'), cột blah1 sẽ được thêm vào trước, sau đó là blah2.
Hongyi Li

10

Bạn không thể đề cập đến nhiều tên cột bằng dấu phẩy bằng cách sử dụng ADD COLUMN. Bạn cần đề cập đến ADD COLUMNmỗi khi bạn xác định một cột mới.


4
Tôi đã cho +1 nhưng đây phải là một nhận xét cho câu trả lời được chấp nhận
mjsarfatti

9

Điều này là chính xác:

ALTER TABLE `users`
    ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
    ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
    ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

3
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

Bạn có thể làm điều đó với điều này, làm việc tốt cho tôi.


1

Một khả năng là không bận tâm về việc sắp xếp lại các cột trong bảng và chỉ cần sửa đổi nó bằng cách thêm các cột. Sau đó, tạo chế độ xem có các cột theo thứ tự bạn muốn - giả sử rằng thứ tự đó thực sự quan trọng. Khung nhìn có thể dễ dàng thay đổi để phản ánh bất kỳ thứ tự nào bạn muốn. Vì tôi không thể tưởng tượng rằng thứ tự sẽ quan trọng đối với các ứng dụng lập trình, nên chế độ xem đủ cho các truy vấn thủ công trong đó có thể quan trọng.


4
nếu tôi có thể thêm hai xu của mình, "vị trí" cho dù cột hoặc hàng của bảng, sẽ không quan trọng. Bảng tính sử dụng vị trí để tìm thứ, cơ sở dữ liệu thì không.
Mike S.

1

ALTER TABLE listingADD countINT (5), ADD logVARCHAR (200), ADD statusVARCHAR (20) SAU stat

Nó sẽ cho kết quả tốt.


0

Cái này làm việc tốt cho tôi:

ALTER TABLE 'users'
ADD COLUMN 'count' SMALLINT(6) NOT NULL AFTER 'lastname',
ADD COLUMN 'log' VARCHAR(12) NOT NULL AFTER 'count',
ADD COLUMN 'status' INT(10) UNSIGNED NOT NULL AFTER 'log';

Ăn cắp một bình luận để nhận phiếu bầu. Đừng làm bạn đời đó.
MBouwman

0

Giải pháp phù hợp với tôi với giá trị mặc định 0 là như sau

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0

0

Cách khác:

ALTER TABLE users
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `lastname`,
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`;

Sẽ đặt chúng theo thứ tự bạn muốn trong khi hợp lý hóa câu lệnh SAU.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.