Tôi đang cố gắng thay đổi bảng không có cột chính cũng như cột auto_increment. Tôi biết làm thế nào để thêm một cột khóa chính nhưng tôi đã tự hỏi nếu nó có thể chèn dữ liệu vào cột khóa chính tự động (tôi đã có 500 hàng trong DB và muốn cung cấp cho họ id nhưng tôi không muốn làm điều đó bằng tay) . Có suy nghĩ gì không? Cảm ơn rất nhiều.Chèn khóa chính tăng tự động vào bảng hiện có
Trả lời
Một ALTER TABLE
tuyên bố thêm cột PRIMARY KEY
hoạt động chính xác trong thử nghiệm của tôi:
ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;
Trên một bảng tạm thời được tạo ra cho mục đích thử nghiệm, tuyên bố trên tạo ra các giá trị tự động tăng AUTO_INCREMENT
id
cột và chèn vào cho mỗi hiện hàng trong bảng, bắt đầu với 1.
Đúng, đây là trải nghiệm của tôi. Không bao giờ nhớ phải chạy một tập lệnh riêng để điền id auto_increment ... –
lol..Cảm ơn. lỗi của tôi. Dấu màu xanh lá cây dành cho bạn vì bạn sẽ dễ thực hiện hơn. : D – FlyingCat
+1, hoạt động trong 5.1.51-ndb-7.1.9a-log, trên bảng với công cụ MyISAM –
có, một cái gì đó như thế này sẽ làm điều đó, có thể không phải là tốt nhất, mặc dù bạn có thể muốn tạo bản sao lưu
$get_query = mysql_query("SELECT `any_field` FROM `your_table`");
$auto_increment_id = 1;
while($row = mysql_fetch_assoc($get_query))
{
$update_query = mysql_query("UPDATE `your_table` SET `auto_increment_id`=$auto_increment_id WHERE `any_field` = '".$row['any_field']."'");
$auto_increment_id++;
}
lưu ý rằng số any_field
bạn chọn phải giống nhau khi cập nhật.
một điều tốt. Cảm ơn. – FlyingCat
Đối với những người như bản thân tôi nhận được một thử Multiple primary key defined
lỗi:
ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST NOT NULL;
On MySQL v5.5.31 này thiết lập các cột id
làm khóa chính cho tôi và dân cư mỗi hàng với giá trị incrementing.
giả sử bạn không có cột cho increment tự như id, không, sau đó bạn có thể thêm bằng truy vấn sau đây:
ALTER TABLE table_name ADD id int NOT NULL AUTO_INCREMENT primary key FIRST
Nếu bạn cột đã, sau đó thay đổi để tự động tăng sử dụng truy vấn sau đây:
ALTER TABLE table_name MODIFY column_name datatype(length) AUTO_INCREMENT PRIMARY KEY
'FIRST' cuối cùng là gì? – Dementic
Nó sẽ làm cho cột 'id' mới đầu tiên trong bảng trái ngược với cuối cùng, đó là hành vi mặc định. –
Các dễ nhất và nhanh nhất tôi thấy là thế này
ALTER TABLE mydb.mytable
ADD COLUMN mycolumnname INT NOT NULL AUTO_INCREMENT AFTER updated,
ADD UNIQUE INDEX mycolumnname_UNIQUE (mycolumname ASC);
tôi đã có thể thích nghi với những ins các phiên đấu giá có một khóa có số chính là hiện tại không chính xác và thêm khóa chính gia tăng vào bảng và tạo khóa chính mới kết hợp với cả khóa cũ và mới làm khóa chính kết hợp sử dụng mã sau:
DROP TABLE IF EXISTS SAKAI_USER_ID_MAP;
CREATE TABLE SAKAI_USER_ID_MAP (
USER_ID VARCHAR (99) NOT NULL,
EID VARCHAR (255) NOT NULL,
PRIMARY KEY (USER_ID)
);
INSERT INTO SAKAI_USER_ID_MAP VALUES ('admin', 'admin');
INSERT INTO SAKAI_USER_ID_MAP VALUES ('postmaster', 'postmaster');
ALTER TABLE SAKAI_USER_ID_MAP
DROP PRIMARY KEY,
ADD _USER_ID INT AUTO_INCREMENT NOT NULL FIRST,
ADD PRIMARY KEY (_USER_ID, USER_ID);
Khi điều này được thực hiện, trường _USER_ID tồn tại và có tất cả giá trị số cho khóa chính chính xác như bạn mong đợi. Với "DROP TABLE" ở trên cùng, bạn có thể chạy lặp đi lặp lại để thử nghiệm với các biến thể.
Điều tôi chưa thể làm việc là tình huống có các khóa NGOẠI HỐI đến đã trỏ vào trường USER_ID. Tôi nhận được thông báo này khi tôi cố gắng làm một ví dụ phức tạp hơn với một khóa lạ đến từ một bảng khác.
#1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150)
Tôi đoán rằng tôi cần phải xé tất cả các khóa ngoài trước khi thực hiện bảng ALTER và sau đó xây dựng lại chúng sau đó. Nhưng bây giờ tôi muốn chia sẻ giải pháp này cho một phiên bản thử thách hơn của câu hỏi ban đầu trong trường hợp những người khác gặp phải tình huống này.
Xuất bảng của bạn, sau đó làm trống bảng, sau đó thêm trường làm INT duy nhất, sau đó thay đổi thành AUTO_INCREMENT, sau đó nhập lại bảng của bạn mà bạn đã xuất trước đó.
Làm thế nào để viết PHP để ALTER trường đã tồn tại (tên, trong ví dụ này) để làm cho nó một khóa chính? W/o, tất nhiên, thêm bất kỳ trường 'id' bổ sung nào vào bảng ..
Bảng này hiện được tạo - Số lượng hồ sơ được tìm thấy: 4 tên VARCHAR (20) CÓ giống VARCHAR (30) YES màu VARCHAR (20) YES cân SMALLINT (7) YES
này một kết quả cuối cùng đã tìm (BẢNG MÔ tẢ) -
số hồ sơ tìm thấy 4 tên VARCHAR (20) NO PRI giống VARCHAR (30) CÓ VARCHAR màu (20) CÓ trọng lượng NHỎ (7) CÓ
Thay vì nhận được này -
Số ghi tìm thấy: 5 id int (11) NO PRI tên VARCHAR (20) YES giống VARCHAR (30) YES màu VARCHAR (20) YES cân SMALLINT (7) YES
sau khi thử ..
$ query = "ALTER TABLE ADD ngựa đua id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id)";
làm cách nào để có được điều này? -
Số hồ sơ tìm thấy 4 tên VARCHAR (20) NO PRI giống VARCHAR (30) YES màu VARCHAR (20) YES cân SMALLINT (7) YES
tức INSERT/ADD .. vv khóa chính INTO bản ghi trường đầu tiên (w/o thêm trường 'id' bổ sung, như đã nêu trước đó.
Bạn có thể thêm một cột Khóa chính mới vào bảng hiện có, có thể có số thứ tự, sử dụng lệnh:
ALTER TABLE mydb.mytable ADD pk_columnName INT IDENTITY
Tôi đã phải đối mặt với cùng một vấn đề vì vậy những gì tôi đã làm tôi bỏ lĩnh vực cho khóa chính sau đó tôi tái tạo nó và chắc chắn rằng nó là tự động gia tăng. Điều đó làm việc cho tôi. Tôi hy vọng nó sẽ giúp người khác
- 1. Chèn khóa chính được tăng tự động vào bảng Access
- 2. PHP mySQL - Chèn bản ghi mới vào bảng với tự động tăng trên khóa chính
- 3. Máy chủ SQL thêm tự động tăng khóa chính vào bảng hiện có
- 4. Làm cách nào để chèn dữ liệu vào MySQL có khóa chính tăng tự động?
- 5. Tự động tăng khóa chính trong bảng SQL
- 6. Thêm khóa chính vào bảng MySQL và tự động điền vào nó
- 7. Thêm khóa chính vào bảng MySQL hiện có trong alembic
- 8. Oracle - Chèn hàng mới có ID gia tăng tự động
- 9. "chọn * vào bảng" Nó có hoạt động để chèn dữ liệu vào bảng hiện có
- 10. Làm cách nào để chèn vào bảng và lấy lại giá trị khóa chính?
- 11. Mọi bảng có khóa chính không?
- 12. Thêm khóa chính vào bảng có nhiều bản ghi
- 13. Có thể dựa vào khóa chính tăng tự động trong cơ sở dữ liệu của bạn không?
- 14. Làm cách nào để ghi đè thuộc tính của khóa chính tăng tự động khi chèn giá trị vào bảng MySQL?
- 15. Thêm khóa ngoại vào bảng hiện có
- 16. Thêm cột có khóa chính trong bảng hiện có
- 17. Chèn vào hai bảng
- 18. Tự động SQL Server tăng một cột không có khóa chính
- 19. MySQL - Cách chèn vào nhiều bảng có khóa ngoài
- 20. cách thêm cột mới vào khóa chính composite hiện có
- 21. LINQ to SQL chèn với khóa chính như tinyint thiết lập để tự động gia tăng cho thông báo lỗi
- 22. Tự động tạo khóa trên chèn JDBC trong SQL Server
- 23. Lấy khóa chính của bảng?
- 24. Khóa chính có tự động là chỉ mục không?
- 25. JPA tự động khóa chính tạo
- 26. Lý do không sử dụng số tự động gia tăng cho khóa chính
- 27. Có tăng tự động trong sqlite không?
- 28. Làm cách nào để lấy tên trường tự động gia tăng hoặc tên trường khóa chính từ bảng mysql?
- 29. Chèn nơi không tồn tại mà không có khóa chính
- 30. Thêm tự động tăng trở lại cột khóa chính trong Rails
Bạn có thể dễ dàng thực hiện 'thay đổi bảng' để thêm khóa, nhưng MySQL sẽ không tạo ID cho các trường chưa có chúng. Bạn sẽ phải cập nhật thủ công các trường hiện có và sau đó đảm bảo auto_increment mới của bạn bắt đầu ở độ lệch bên phải - giá trị mặc định là '1' và bạn chỉ cần kết thúc với các lỗi khóa trùng lặp. –
@MarcB Tôi vừa thử nghiệm và thực tế đã chèn các id cho các hàng hiện tại bắt đầu từ 1 –