Hãy xem xét một nhiệm vụ phổ biến mà nhà phát triển thực hiện trong công việc hàng ngày của họ. Một bảng cơ sở dữ liệu sẽ được sửa đổi cho dữ liệu và/hoặc cấu trúc của nó. Trước khi thực hiện bất kỳ thay đổi nào, điều đầu tiên luôn luôn khôn ngoan là sao lưu bảng cơ sở dữ liệu. Cách dễ dàng để thực hiện điều này là viết một đoạn script SQL như bên dưới. Kịch bản là chúng ta sẽ thực hiện một số thay đổi đối với bảng Sản phẩm, vì vậy chúng ta bắt đầu
Hầu hết các truy vấn trong hướng dẫn đều cần cơ sở dữ liệu Northwind MySQL, bạn có thể tải xuống tập lệnh cơ sở dữ liệu trên trang này
create table products_bk
as
select * from products
Đoạn mã SQL ở trên tạo một bảng sao lưu có tên Products_bk chứa tất cả dữ liệu từ bảng Products. Sau đó, bạn có thể tiến hành bất kỳ thay đổi nào bạn muốn thực hiện với bảng Sản phẩm. Nếu xảy ra sự cố, bạn có thể tạo lại bảng từ bản sao lưu, cả về cấu trúc và dữ liệu
Trong MySQL, bạn có thể tạo một bảng mới và dữ liệu từ một bảng hiện có, đôi khi nó còn được gọi là sao chép hoặc sao chép bảng. Về bản chất, bạn có thể tạo một bảng mới từ một bảng hiện có bằng cách thêm câu lệnh SELECT vào cuối câu lệnh CREATE TABLE
Để biết thêm thông tin, hãy kiểm tra hướng dẫn sử dụng MySQL để biết phiên bản bạn sử dụng. TẠO BẢNG. CHỌN Cú pháp
Cú pháp cơ bản là
TẠO BẢNG [NẾU KHÔNG TỒN TẠI] new_tbl [AS] CHỌN * TỪ hiện tại_tbl;
Nó tạo bảng mới trước, sau đó chèn dữ liệu vào bảng dựa trên các cột được sử dụng trong câu lệnh SELECT từ một bảng hiện có
Có một vài biến thể của cú pháp cơ bản khi được sử dụng
1. Tạo một bản sao chính xác của một bảng hiện có
Đây là cách đơn giản nhất để tạo bảng. Không có cú pháp cấu trúc bảng [cột, kiểu dữ liệu, ràng buộc, v.v. ] có liên quan. Bảng mới sẽ được tạo đơn giản bằng cách sử dụng cùng cấu trúc của bảng hiện có. Bảng mới cũng sẽ chứa tất cả dữ liệu từ bảng hiện có
create table products_bk
as
select * from products
2. Tạo một bảng mới dựa trên một hoặc nhiều bảng hiện có
Ở đây, chúng tôi tạo một bảng mới có tên product_sold_by_order cho các sản phẩm trong mỗi đơn hàng và tổng doanh số của từng sản phẩm
Các cột được tạo trong bảng mới đều được lấy từ các định nghĩa cột trong câu lệnh SELECT. MySQL xác định kiểu dữ liệu tốt nhất để sử dụng cho các cột được tính toán, e. g. cột Tổng Doanh số. Truy vấn CHỌN có thể đơn giản hoặc phức tạp, tùy thuộc vào nhu cầu của bạn, chẳng hạn như sử dụng WHERE, JOIN, UNION, GROUP BY, HAVING, v.v.
create table product_sold_by_order
as
select distinct y.OrderID,
y.ProductID,
x.ProductName,
y.UnitPrice,
y.Quantity,
y.Discount,
round[y.UnitPrice * y.Quantity * [1 - y.Discount], 2] as TotalSales
from Products x
inner join Order_Details y on x.ProductID = y.ProductID
order by y.OrderID;
3. Tạo một bảng mới dựa trên một hoặc nhiều bảng hiện có, đồng thời tạo thêm [các] cột mới
Truy vấn bên dưới tương tự như truy vấn hiển thị ở trên, nhưng trong câu lệnh tạo bảng, nó đã chỉ định một cột mới sẽ được tạo với kiểu dữ liệu, không phải ràng buộc null và thuộc tính auto_increment. Trong bảng mới product_sold_by_order2, tất cả các cột trong câu lệnh CHỌN được thêm vào bên phải của ID cột mới bổ sung. Điều này cho phép chúng tôi linh hoạt thêm các cột mới bổ sung mà không phải viết và chạy một truy vấn bảng ALTER khác sau khi bảng mới được tạo
create table product_sold_by_order2[ID int not null auto_increment, PRIMARY KEY [ID]]
as
select distinct y.OrderID,
y.ProductID,
x.ProductName,
y.UnitPrice,
y.Quantity,
y.Discount,
round[y.UnitPrice * y.Quantity * [1 - y.Discount], 2] as TotalSales
from Products x
inner join Order_Details y on x.ProductID = y.ProductID
order by y.OrderID;
Những điều cần lưu ý
- Từ khóa AS là tùy chọn nhưng bạn nên sử dụng nó để nhất quán với cùng loại truy vấn được sử dụng bởi công cụ cơ sở dữ liệu khác như Oracle, PostgreSQL, SQLite, v.v.
- Tạo bảng theo cách này không tự động tạo bất kỳ chỉ mục nào trên bảng mới. Nếu bạn cần chỉ mục trên bảng mới, hãy chỉ định chúng trước câu lệnh CHỌN, tương tự như chỉ định KHÓA CHÍNH [ID] trong ví dụ trên, e. g. bạn có thể chỉ định INDEX[ProductName] hoặc KEY[ProductName] để tạo chỉ mục trên cột ProductName. KEY thường là từ đồng nghĩa với INDEX
Ngoài ra, bạn có thể tạo các chỉ mục riêng sau khi tạo bảng
- Hãy cẩn thận khi sử dụng từ khóa NẾU KHÔNG TỒN TẠI, trong các phiên bản MySQL trước 5. 5. 6, nếu bảng đích tồn tại trong cơ sở dữ liệu, nó sẽ chèn các hàng vào bảng nếu từ khóa IF NOT EXISTS được sử dụng. Đây có thể không phải là những gì bạn muốn. Kể từ MySQL 5. 5. 6, nếu IF NOT EXISTS được đưa ra và bảng đích tồn tại, thì không có gì được chèn vào bảng đích
Vì vậy, để tránh mọi kết quả hoặc tác dụng phụ không mong muốn, trước khi sử dụng CREATE TABLE. câu lệnh SELECT, đảm bảo rằng
[1] bạn kiểm tra phiên bản MySQL đang sử dụng
[2] bảng đích KHÔNG tồn tại. Nếu nó tồn tại, đổi tên hoặc xóa nó. Sau đó, sau khi bảng đích được tạo, hãy kiểm tra cấu trúc của nó để đảm bảo mọi thứ bạn muốn đều ở đó. Nếu không, hãy sửa đổi cấu trúc bảng cho phù hợp với nhu cầu của bạn
Ngoài ra, bạn có thể chia quá trình tạo bảng thành 2 bước rõ ràng - tạo bảng trước, sau đó điền dữ liệu vào đó
Phương pháp số 1
Sử dụng CREATE TABLE IF NOT EXISTS trong câu lệnh, sau đó INSERT. CHỌN trong một câu lệnh khác thay vì CREATE TABLE IF NOT EXISTS. CHỌN trong một câu lệnh
Tạo bảng đầu tiên
create table ProductsAboveAvgPrice
[
ProductName varchar[40] not null,
UnitPrice double not null
]Sau đó thêm dữ liệu vào bảng mới
insert into ProductsAboveAvgPrice
select distinct ProductName, UnitPrice
from Products
where UnitPrice > [select avg[UnitPrice] from Products]
order by UnitPricePhương pháp #2
Tạo cấu trúc bảng từ bảng hiện có bằng cách sử dụng CREATE TABLE. THÍCH, sau đó CHÈN. CHỌN trong một tuyên bố khác
Đầu tiên, sử dụng TẠO BẢNG. THÍCH tạo một bảng trống dựa trên định nghĩa của một bảng khác, bao gồm bất kỳ thuộc tính và chỉ mục cột nào được xác định trong bảng gốc
create table employees_copy like employees
Bây giờ chèn dữ liệu vào bảng employee_copy
insert into employees_copy
select * from employeesGhi chú
- TẠO BẢNG. Câu lệnh LIKE chỉ hoạt động cho các bảng cơ sở, không hoạt động cho các dạng xem
- Nếu bảng gốc là bảng TẠM THỜI thì CREATE TABLE. THÍCH không bảo toàn TẠM THỜI, có nghĩa là bảng trống được tạo sẽ là bảng cố định chứ không phải bảng tạm thời. Để tạo một bảng TẠM THỜI trống, hãy sử dụng TẠO BẢNG TẠM THỜI. GIỐNG
Câu lệnh sau tạo một bảng tạm thời cho các sản phẩm có giá trên trung bình
________số 8_______
Sau đó, nếu bạn tạo một bảng trống dựa trên cấu trúc của bảng tạm thời tempProductsAboveAvgPrice, bảng trống sẽ được tạo dưới dạng bảng cố định trong cơ sở dữ liệu Northwind. Có thể nhìn thấy bảng nếu bạn chạy câu lệnh SHOW TABLES
create table tempProductsAboveAvgPrice_copy like tempProductsAboveAvgPrice
Để tạo một bảng trống TẠM THỜI, hãy sử dụng TẠO BẢNG TẠM THỜI. GIỐNG. Bằng cách này, bảng trống tempProductsAboveAvgPrice_copy2 sẽ không trở thành một phần của lược đồ cơ sở dữ liệu Northwind
Bạn có thể tạo một bảng trống trong MySQL không?
Sử dụng TẠO BẢNG. THÍCH để tạo một bảng trống dựa trên định nghĩa của một bảng khác, bao gồm mọi thuộc tính cột và chỉ mục được xác định trong bảng gốc . TẠO BẢNG new_tbl THÍCH orig_tbl; .Làm cách nào bạn có thể tạo một bảng trống từ một bảng hiện có trong MySQL?
Bạn có thể tạo một bảng từ một bảng khác bằng cách thêm câu lệnh CHỌN vào cuối câu lệnh CREATE TABLE . TẠO BẢNG new_tbl [AS] CHỌN * TỪ orig_tbl; .Làm cách nào để tạo một bảng giả trong MySQL?
Trong MySQL, cú pháp tạo bảng tạm giống như cú pháp tạo câu lệnh bảng thông thường ngoại trừ từ khóa TEMPORARY. Chúng ta hãy xem câu lệnh sau tạo bảng tạm thời. mysql> TẠO BẢNG TẠM THỜI tên_bảng [ cột_1, cột_2,. , table_constraint .Chúng ta có thể TẠO BẢNG trong MySQL không?
Sử dụng câu lệnh CREATE TABLE để chỉ định bố cục bảng của bạn . mysql> TẠO BẢNG pet [tên VARCHAR[20], chủ VARCHAR[20], loài VARCHAR[20], giới tính CHAR[1], NGÀY sinh, NGÀY chết]; .