Tạo bảng trống MySQL

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 UnitPrice

    Phươ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 employees

    Ghi 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); .