2014-10-26 13 views
11

Tôi đang cố gắng tạo một chuỗi trong MySQL (tôi rất mới đối với SQL nói chung). Tôi đang sử dụng mã sau đây, nhưng nó gây ra lỗi:Làm cách nào để tạo chuỗi trong MySQL?

CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622; 

ORDID đề cập đến trường trong bảng Tôi đang sử dụng. Làm cách nào để tạo chuỗi chính xác?

Chỉnh sửa:

Bị cáo buộc, MySQL không sử dụng trình tự. Tôi hiện đang sử dụng mã sau đây, nhưng điều này cũng gây ra lỗi. Làm thế nào để sửa chúng?

CREATE TABLE ORD (
ORDID NUMERIC(4) NOT NULL AUTO_INCREMENT START WITH 622, 
//Rest of table code 

Edit:

Tôi nghĩ rằng tôi tìm thấy một sửa chữa. Đối với phpMyAdmin (mà tôi đang sử dụng), bạn có thể sử dụng đoạn mã sau.

ALTER TABLE ORD AUTO_INCREMENT = 622; 

Tôi không biết tại sao nó thích điều này, nhưng nếu có ai khác cần trợ giúp về vấn đề này thì tại đây bạn đi. :)

+0

Không có điều gì trong MySQL. Bạn đang cố làm gì vậy? – Barmar

+0

Trong MySQL, bạn sử dụng một cột với thuộc tính 'AUTO_INCREMENT'. – Barmar

+0

MySQL không hỗ trợ trình tự –

Trả lời

15

Kiểm tra this article. Tôi tin rằng nó sẽ giúp bạn có được những gì bạn đang muốn. Nếu bảng của bạn đã tồn tại và đã có dữ liệu trong đó, lỗi bạn đang nhận có thể là do auto_increment đang cố gán giá trị đã tồn tại cho các bản ghi khác.

Tóm lại, như những người khác đã đề cập trong các nhận xét, trình tự, như chúng được nghĩ đến và được xử lý trong Oracle, không tồn tại trong MySQL. Tuy nhiên, bạn có thể sử dụng auto_increment để thực hiện những gì bạn muốn.

Không có chi tiết bổ sung về lỗi cụ thể, rất khó để cung cấp trợ giúp cụ thể hơn.

CẬP NHẬT

CREATE TABLE ORD (
    ORDID INT NOT NULL AUTO_INCREMENT, 
    //Rest of table code 
    PRIMARY KEY (ordid) 
) 
AUTO_INCREMENT = 622; 

This link cũng rất hữu ích để mô tả việc sử dụng của auto_increment. Đặt giá trị AUTO_INCREMENT có vẻ là table option và không phải là thứ được chỉ định làm thuộc tính cột cụ thể.

Ngoài ra, theo một trong các liên kết từ trên, bạn có thể đặt giá trị bắt đầu tăng tự động thông qua thay đổi đối với bảng của bạn.

ALTER TABLE ORD AUTO_INCREMENT = 622; 

UPDATE 2 Đây là một liên kết đến một working sqlfiddle example, sử dụng tự động tăng.
Tôi hy vọng thông tin này sẽ hữu ích.

+0

Cảm ơn sự giúp đỡ, nhưng bây giờ MySQL tuyên bố rằng mã này có chứa một "specifier column không chính xác". – Ben

+0

Tôi đang sử dụng một chuỗi mã lớn để tạo các bảng từ đầu mỗi lần (nếu xảy ra lỗi, tôi xóa các bảng và bắt đầu lại). MySQL chưa bao giờ gặp vấn đề với "số (4)" trước đây. – Ben

+0

Bỏ qua nhận xét trước của tôi. Tôi đã xóa nó, vì nó không chính xác. – Daileyo

17

Đây là một giải pháp suggested by the MySQl manual:

If expr is given as an argument to LAST_INSERT_ID(), the value of the argument is returned by the function and is remembered as the next value to be returned by LAST_INSERT_ID(). This can be used to simulate sequences:

Create a table to hold the sequence counter and initialize it:

mysql> CREATE TABLE sequence (id INT NOT NULL); 
    mysql> INSERT INTO sequence VALUES (0); 

Use the table to generate sequence numbers like this:

mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1); 
    mysql> SELECT LAST_INSERT_ID(); 

The UPDATE statement increments the sequence counter and causes the next call to LAST_INSERT_ID() to return the updated value. The SELECT statement retrieves that value. The mysql_insert_id() C API function can also be used to get the value. See Section 23.8.7.37, “mysql_insert_id()”.

You can generate sequences without calling LAST_INSERT_ID(), but the utility of using the function this way is that the ID value is maintained in the server as the last automatically generated value. It is multi-user safe because multiple clients can issue the UPDATE statement and get their own sequence value with the SELECT statement (or mysql_insert_id()), without affecting or being affected by other clients that generate their own sequence values.

2

Bằng cách tạo bảng increment bạn nên lưu ý không xóa dòng chèn vào. lý do cho điều này là để tránh lưu trữ dữ liệu câm lớn trong db với ID-s trong đó. Nếu không, trong trường hợp khởi động lại mysql, nó sẽ nhận được hàng tối đa hiện tại và tiếp tục tăng từ điểm đó như đề cập trong tài liệu http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html

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