Sao chép bảng mà không sao chép dữ liệu


153
CREATE TABLE foo SELECT * FROM bar

sao chép bảng foovà sao chép nó dưới dạng bảng mới được gọi bar.

Làm cách nào tôi có thể sao chép lược đồ của foomột bảng mới được gọi bar mà không cần sao chép dữ liệu?


1
Làm thế nào để làm điều tương tự trong sqlserver 2005?
Sấm

có nghĩa là gì từ thanh?
Smit Saraiya


@Thunder có vẻ như bạn có thể thực hiện một bản sao "Chỉ colums" trong MS SQL. Xem phần này để tham khảo: stackoverflow.com/questions/2505728/ Kẻ
Kevin Worthington

Câu trả lời:


140

Thử:

CREATE TABLE foo SELECT * FROM bar LIMIT 0

Hoặc là:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0

4
@Thunder: Hãy thửselect * into foo from bar where 1=0
Andomar

29
Điều này dường như không sao chép các ràng buộc hoặc khóa
Timo Huovinen

15
@TimoHuovinen: Có lẽ create table NewTable like OldTablelà một lựa chọn cho bạn. Liên kết được sao chép từ câu trả lời bị xóa.
Andomar

1
Hãy thực sự cẩn thận về việc sử dụng điều này dưới tải và đồng thời cao. Tôi vừa bị đốt cháy bằng cách sử dụng tỷ lệ này, ở đó chúng tôi đã tạo khoảng 50 bảng khác nhau dựa trên cùng một bảng nguồn, cùng lúc với việc chèn vào bảng nguồn từ các quy trình khác. Về cơ bản gây ra một cuộc khủng hoảng khóa lớn và phải khởi động lại MySQL.
Đánh dấu B

6
Uhm, OP có nhầm lẫn không? Đây rõ ràng là một câu trả lời sai cho câu hỏi, nếu chúng ta chú ý đến tiêu đề và sự nhấn mạnh trong câu hỏi "... mà không sao chép dữ liệu ..." Câu trả lời của RCNell được bình chọn cao nhất. Không chắc chắn tại sao cái này được chấp nhận. Chỉ cần nói.
xyphenor

421

Thử

CREATE TABLE foo LIKE bar;

Vì vậy, các khóa và chỉ mục được sao chép là tốt.

Tài liệu


40
Đây là một câu trả lời tốt hơn vì bản sao này cũng chỉ mục!
Chaitan

2
Nó tốt hơn nhiều, nhưng vẫn không sao chép khóa ngoại.
Josef Sábl

@RCNeil, CREATE TABLE new_tbl LIKE orig_tbl;Bản sao có đặc quyền không? Hoặc phải được sao chép bằng tay?
Pacerier

2
Có lẽ bởi vì câu trả lời này xuất hiện muộn hơn 4 năm so với câu trả lời là đúng
pythonia29033

1
@ Pierre-OlivierVares Văn bản tài liệu không liên quan trực tiếp đến câu trả lời thực tế. Văn bản trả lời ngắn gọn trong việc chỉ ra cách thực hiện những gì câu hỏi được hỏi, trong khi liên kết tài liệu chỉ cung cấp ngữ cảnh bổ sung. Như vậy, đầy đủ câu trả lời với văn bản từ tài liệu là không hữu ích.
Abion47

27
SHOW CREATE TABLE bar;

bạn sẽ nhận được một câu lệnh tạo cho bảng đó, chỉnh sửa tên bảng hoặc bất cứ thứ gì bạn thích và sau đó thực hiện nó.

Điều này sẽ cho phép bạn sao chép các chỉ mục và cũng tự điều chỉnh việc tạo bảng.

Bạn cũng có thể chạy truy vấn trong một chương trình.


Làm thế nào bạn có thể chuyển đổi show create table barthành một tuyên bố thực thi năng động?
Pacerier 2/2/2015

kết quả được cung cấp bởi show create table barđã có thể thực thi được, nếu tập lệnh có quyền tạo bảng, bạn có thể phân tích cú pháp và sau đó thực hiện thay đổi các câu lệnh bảng.
Timo Huovinen 5/2/2015

create table...sẽ không sao chép chỉ mục. câu trả lời này là lựa chọn tốt hơn
bluepinto

2

Chỉ muốn sao chép cấu trúc của bảng:

CREATE TABLE foo SELECT * FROM bar WHERE 1 = 2;

Cũng muốn sao chép dữ liệu:

CREATE TABLE foo as SELECT * FROM bar;
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.