관계형 데이터베이스(11): MySQL의 임시 및 복제 테이블

임시 테이블

MySQL 임시 테이블은 일부 임시 데이터를 저장할 때 매우 유용합니다. 임시 테이블은 현재 연결에서만 볼 수 있으며 연결이 닫히면 Mysql은 자동으로 테이블을 삭제하고 모든 공간을 해제합니다.

예시

# 创建临时表
mysql> CREATE TEMPORARY TABLE SalesSummary (
    -> product_name VARCHAR(50) NOT NULL , 
    -> total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00 ,
    -> avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00 ,
    -> total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

# 在临时表中插入数据
mysql> INSERT INTO SalesSummary
    -> (product_name, total_sales, avg_unit_price, total_units_sold)
    -> VALUES
    -> ('cucumber', 100.25, 90, 2);

# 在临时表中查找数据
mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

CREATE TEMPORARY TABLE 을 사용 하여 임시 테이블을 생성합니다. 

SHOW TABLES 명령을 사용하여  데이터 테이블 목록을 표시할 때 SalesSummary 테이블을 볼 수 없습니다.

현재 MySQL 세션을 종료하고  SELECT 명령을 사용하여 이전에 생성된 임시 테이블의 데이터를 읽는 경우 종료할 때 임시 테이블이 파괴되었기 때문에 데이터베이스에 테이블이 존재하지 않음을 알 수 있습니다.


드롭 임시 테이블

기본적으로 임시 테이블은 데이터베이스 연결이 끊어지면 자동으로 삭제됩니다. 물론 현재 MySQL 세션에서  DROP TABLE  명령을 사용하여 임시 테이블을 수동으로 삭제할 수도 있습니다.

# 手动删除临时表的实例:
mysql> DROP TABLE SalesSummary; 

테이블 복사

테이블 구조, 인덱스, 기본값 등을 포함하여 MySQL 데이터 테이블을 완전히 복제해야 하는 경우

이것은 CREATE TABLE ... SELECT  명령 만으로는 불가능합니다. 다음은 MySQL 데이터 테이블을 완전히 복사하는 방법에 대해 설명하며 단계는 다음과 같습니다.

  • SHOW CREATE TABLE  명령을 사용 하여  원본 데이터 테이블의 구조, 인덱스 등이 포함된 CREATE TABLE 문을 가져옵니다.
  • 다음 명령어로 표시되는 SQL문을 복사하여 데이터 테이블명을 수정한 후 SQL문을 실행하면 위의 명령어로 데이터 테이블 구조가 완전히 복사된다.
  • 테이블의 내용을 복사하려면  INSERT INTO ... SELECT  문을 사용하면 됩니다.

예시

1단계:

테이블이 생성된 시기에 대한 세부 정보를 보여주는 데이터 테이블의 전체 구조를 가져옵니다.

mysql> SHOW CREATE TABLE source_tbl \G;
*************************** 1. row ***************************
       Table: source_tbl
Create Table: CREATE TABLE `source_tbl` (
  `source_id` int(11) NOT NULL auto_increment,
  `source_title` varchar(100) NOT NULL default '',
  `source_author` varchar(40) NOT NULL default '',
  `submission_date` date default NULL,
  PRIMARY KEY  (`source_id`),
  UNIQUE KEY `AUTHOR_INDEX` (`source_author`)
) ENGINE=InnoDB 
1 row in set (0.00 sec)

2 단계:

SQL 문의 데이터 테이블 이름을 수정하고 SQL 문을 실행하여 데이터베이스에 새로운 클론 테이블 target_tbl을 생성한다.

mysql> CREATE TABLE `target_tbl` (
  -> `target_id` int(11) NOT NULL auto_increment,
  -> `target_title` varchar(100) NOT NULL default '',
  -> `target_author` varchar(40) NOT NULL default '',
  -> `submission_date` date default NULL,
  -> PRIMARY KEY  (`target_id`),
  -> UNIQUE KEY `AUTHOR_INDEX` (`target_author`)
-> ) ENGINE=InnoDB;
Query OK, 0 rows affected (1.80 sec)

3단계:

데이터 테이블의 데이터를 복사하려는 경우  INSERT INTO... SELECT  문을 사용하여 달성할 수 있습니다.

mysql> INSERT INTO target_tbl (target_id,
    ->                        target_title,
    ->                        target_author,
    ->                        submission_date)
    -> SELECT source_id, source_title,
    ->        source_author, submission_date
    -> FROM source_tbl;
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0

위의 단계를 수행하면 테이블 구조 및 테이블 데이터를 포함하여 테이블의 내용이 완전히 복사됩니다.

테이블을 복사하는 다른 방법:

CREATE TABLE targetTable LIKE sourceTable;
INSERT INTO targetTable SELECT * FROM sourceTable;

테이블의 다음 필드 중 일부는 복사할 수 있습니다.

CREATE TABLE targetTable AS
(
    SELECT username, password FROM sourceTable
)

새로 생성된 테이블의 필드 이름을 변경할 수 있습니다.

CREATE TABLE targetTable AS
(  
    SELECT id, username AS uname, password AS pass FROM sourceTable
)

데이터의 일부를 복사할 수 있습니다.

CREATE TABLE targetTable AS
(
    SELECT * FROM sourceTable WHERE LEFT(username,1) = 's'
)

테이블을 생성하는 동안 테이블의 필드 정보를 정의할 수 있습니다.

CREATE TABLE targetTable
(
    id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
)
AS
(
    SELECT * FROM sourceTable
)  

추천

출처blog.csdn.net/weixin_43145427/article/details/124190583