MySQL利用现有的数据表创建新表

MySQL利用现有的数据表创建新表

MySQL使用create table可以创建数据表,该命令通过为表指定字段并设置字段的数据类型,也可以设置主键、外键、unique约束、索引、默认值、自增等特性。

使用create table命令除了可以通过定义字段名创建一张新表,还可以在已有表的基础上创建新表。比如已经创建了emp(员工)表,并输入了数据。

create table emp(
    emp_id int primary key auto_increment comment '员工号',
    emp_name char(20) not null default '' comment '员工姓名',
    gender char(2) not null default '男' comment '性别',
    birth datetime not null default '1990-1-1' comment '出生日期',
    salary decimal(10,2) not null default 0 comment '工资',
    address varchar(200) not null default '' comment '通讯地址',
    dept_name char(20) comment '部门'
);

insert into emp(emp_name,gender,birth,salary,address,dept_name) 
values('张晓红','女','1980-1-23',5800,'河南省郑州市中原路10号','销售部'),
('张静静','女','1987-10-3',5400,'河南省新乡市平原路38号','销售部'),
('王云飞','男','1992-11-15',5600,'河南省新乡市人民路28号','销售部'),
('王鹏飞','男','1987-10-1',6800,'河南省新乡市东明大道12号','销售部'),
('王大鹏','男','1989-2-11',5900,'河南省郑州市东风路15号','生产制造部'),
('王萌萌','女','1986-12-30',5000,'河南省开封市五一路14号','生产制造部'),
('王大光','男','1988-11-8',6200,'河南省开封市八一路124号','生产制造部'),
('王小明','男','1998-1-3',4800,'河南省驻马店市雪松路128号','生产制造部'),
('王娜娜','女','1994-3-5',5200,'河南省驻马店市车站路2号','生产制造部'),
('刘云飞','男','1992-8-13',6800,'河南省南阳市民生路255号','人事部'),
('张陆军','男','1991-9-6',6200,'河南省南阳市张仲景路14号','人事部');

一、根据emp表结构创建新表

命令如下:

create table new_tablename like old_tablename;

create table employee like emp;

查看结果:

mysql> select * from employee;
Empty set (0.00 sec)

mysql> desc emp;
+-----------+---------------+------+-----+---------------------+----------------+
| Field     | Type          | Null | Key | Default             | Extra          |
+-----------+---------------+------+-----+---------------------+----------------+
| emp_id    | int(11)       | NO   | PRI | NULL                | auto_increment |
| emp_name  | char(20)      | NO   |     |                     |                |
| gender    | char(2)       | NO   |     | 男                  |                |
| birth     | datetime      | NO   |     | 1990-01-01 00:00:00 |                |
| salary    | decimal(10,2) | NO   |     | 0.00                |                |
| address   | varchar(200)  | NO   |     |                     |                |
| dept_name | char(20)      | YES  |     | NULL                |                |
+-----------+---------------+------+-----+---------------------+----------------+
7 rows in set (0.00 sec)

mysql> desc employee;
+-----------+---------------+------+-----+---------------------+----------------+
| Field     | Type          | Null | Key | Default             | Extra          |
+-----------+---------------+------+-----+---------------------+----------------+
| emp_id    | int(11)       | NO   | PRI | NULL                | auto_increment |
| emp_name  | char(20)      | NO   |     |                     |                |
| gender    | char(2)       | NO   |     | 男                  |                |
| birth     | datetime      | NO   |     | 1990-01-01 00:00:00 |                |
| salary    | decimal(10,2) | NO   |     | 0.00                |                |
| address   | varchar(200)  | NO   |     |                     |                |
| dept_name | char(20)      | YES  |     | NULL                |                |
+-----------+---------------+------+-----+---------------------+----------------+
7 rows in set (0.00 sec)

利用select命令可以看到,employee表为空表;利用desc命令可以看到,employee表结构和emp表完全相同。

二、根据另一个表的查询结果创建新表

命令如下:

create table table_name select statement;

举例:

mysql> create table emp1 select emp_id,emp_name,salary,address from emp;
Query OK, 11 rows affected (0.02 sec)
Records: 11  Duplicates: 0  Warnings: 0

mysql> desc emp1;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| emp_id   | int(11)       | NO   |     | 0       |       |
| emp_name | char(20)      | NO   |     |         |       |
| salary   | decimal(10,2) | NO   |     | 0.00    |       |
| address  | varchar(200)  | NO   |     |         |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> select * from emp1;
+--------+-----------+---------+--------------------------------------+
| emp_id | emp_name  | salary  | address                              |
+--------+-----------+---------+--------------------------------------+
|      1 | 张晓红    | 5800.00 | 河南省郑州市中原路10号               |
|      2 | 张静静    | 5400.00 | 河南省新乡市平原路38号               |
|      3 | 王云飞    | 5600.00 | 河南省新乡市人民路28号               |
|      4 | 王鹏飞    | 6800.00 | 河南省新乡市东明大道12号             |
|      5 | 王大鹏    | 5900.00 | 河南省郑州市东风路15号               |
|      6 | 王萌萌    | 5000.00 | 河南省开封市五一路14号               |
|      7 | 王大光    | 6200.00 | 河南省开封市八一路124号              |
|      8 | 王小明    | 4800.00 | 河南省驻马店市雪松路128号            |
|      9 | 王娜娜    | 5200.00 | 河南省驻马店市车站路2号              |
|     10 | 刘云飞    | 6800.00 | 河南省南阳市民生路255号              |
|     11 | 张陆军    | 6200.00 | 河南省南阳市张仲景路14号             |
+--------+-----------+---------+--------------------------------------+
11 rows in set (0.00 sec)

利用select命令可以看到,emp1表包含了emp表的数据。

### 如何使用 Pandas 创建 MySQL 数据表 为了通过 `pandas` 在 MySQL创建数据表,通常会借助 SQLAlchemy 来数据库连接。以下是实现这一目标的具体方式: #### 使用 SQLAlchemy 和 Pandas 的基本流程 可以通过调用 `DataFrame.to_sql()` 方法将 Pandas 的 DataFrame 写入到 MySQL 中。如果指定的目标不存在,则该方法可以自动创建一个结构[^1]。 #### 示例代码 以下是一个完整的 Python 脚本示例,展示如何使用 Pandas 将数据写入 MySQL创建格: ```python import pandas as pd from sqlalchemy import create_engine # 创建一个简单的 DataFrame data = { 'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35] } df = pd.DataFrame(data) # 配置数据库连接字符串 (此处以 MySQL+MySQL Connector为例) db_url = "mysql+pymysql://username:password@localhost/db_name" engine = create_engine(db_url) # 将 DataFrame 写入 MySQL 数据库中的 table_name = 'my_new_table' df.to_sql(name=table_name, con=engine, index=False, if_exists='replace') print(f"Table '{table_name}' has been created successfully.") ``` 上述脚本的关键部分解释如下: - **create_engine**: 这里我们定义了一个用于连接 MySQL 数据库的引擎实例。URL 参数指定了使用的驱动程序 (`mysql+pymysql`)、用户名、密码以及目标数据库名称。 - **to_sql**: 此函数负责把当前的 DataFrame 对象存储至 SQL 数据库内的某张之中。参数说明: - `if_exists`: 控制当目标已经存在时的行为选项;可选值有 `'fail'`, `'replace'`, 或者 `'append'`。 需要注意的是,在实际部署前应替换掉占位符 `"username"`、`"password"` 和 `"db_name"` 成真实的登录凭证与数据库名[^2]。 #### 关于追加单列的情况 对于仅向现有 MySQL 添加一列的需求,虽然可以直接通过执行原始 SQL 查询语句完成(即采用 cursor.execute()),但也可以先构包含字段 DataFrame ,再利用 `to_sql(if_exists="append")` 实现[^3] 。不过这种方法的前提条件是原和其他待插入记录之间需保持一致性的 schema 设计。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睿思达DBA_WGX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值