MySQL如何复制表中的一条记录并插入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL如何复制表中的一条记录并插入相关的知识,希望对你有一定的参考价值。

1、打开navicat软件,打开要复制表的数据库,如下图所示:

2、点击上方的“工具->数据传输”,如下图所示:

3、进去之后,左边选择的是要复制的表的数据库,右边选择的将表复制到目标数据库,如下图所示:

4、打开左边数据库对象中的“表”,选择要复制哪几张表,点击开始。

5、点击开始,会弹出一个框,点击是,等待一下,出现如下界面,复制成功,点击“关闭”。

6、可以看到表已经复制到另外一个数据库上了,如下图所示:

参考技术A

1、创建测试表,create table test_copy(id int);

2、插入测试数据,

insert into test_copy values(1);

insert into test_copy values(2);

insert into test_copy values(3);

insert into test_copy values(4);

insert into test_copy values(5);

insert into test_copy values(6);

3、查看现有表数据,select * from test_copy,

4、从原表中复制一条记录,并插入数据表,

insert into test_copy select * from test_copy where id = 1;

5、再次查询数据表,select * from test_copy,发现多了一条记录;

参考技术B

需要用insert into...select语句来操作。

如test表中有如下数据:

另有表结构相同的test1表,现在要将test表中的id=1的数据插入到test1中,可用如下语句:

insert into test1 select * from test where id=1;

执行后test1中结果如下:

参考技术C 先把需求说一下吧。从 MSSQL 中导出一个文章表,需要插入到 phpCMS 中的内容表 phpcms_content 去,需要做到文章可以发布到不同的栏目中去。也就是说,需要复制一条记录,并修改其 catid,再插入到表尾的位置上。
mysql复制一条数据并插入的语句:
INSERT INTO phpcms_content (SELECT ".$r[$i]['aid']." + 520, ".$r[$i]['cateid'].", news_catid, catid, typeid, areaid, title, style, thumb, keywords, keywords, posids, url, listorder, status, userid, username, inputtime, updatetime, searchid, islink, prefix FROM phpcms_content WHERE contentid = '".$r[$i-1]['aid']."')
大致为:insert into a SELECT id+1, ...(其它字段) FROM a ;
下面PHP具体程序:
$query = "SELECT * FROM articleincategory ORDER BY ArticleID ";
$result = $connector -> query($query);$i = 0;while($myrow = $connector -> fetch_array($result))$r[$i]['aid'] = $myrow["ArticleID"];
$r[$i]['cateid'] = $myrow["CategoryID"];$i++;
for($i = 0; $i < count($r); $i++)if($i > 0)if( $r[$i]['aid'] == $r[$i-1]['aid'] )echo '第 '. $i. ' 条数据 '. $r[$i]['aid'] .' 与前一条数据 '. $r[$i-1]['aid'] .' 重复'.'/>';
$sql = " INSERT INTO phpcms_content (SELECT ".$r[$i]['aid']." + 520, ".$r[$i]['cateid'].", news_catid, catid, typeid, areaid, title, style, thumb, keywords, keywords, posids, url, listorder, status, userid, username, inputtime, updatetime, searchid, islink, prefix FROM phpcms_content WHERE contentid = '".$r[$i-1]['aid']."') ";
//$sql = " INSERT INTO phpcms_c_news (SELECT ".$r[$i]['aid']." + 520, template, titleintact, content, groupids_view, readpoint, author, copyfrom, paginationtype, maxcharperpage, sub_title FROM phpcms_c_news WHERE contentid = '".$r[$i-1]['aid']."') ";
echo $sql.' />';
//$result = $connector -> query($sql);
//INSERT INTO test (SELECT id + 10, name, class, score FROM test WHERE id = '1');
else if( $r[$i]['aid'] != $r[$i-1]['aid'] )$sql = " UPDATE phpcms_content SET origin_cateid = '".$r[$i]['cateid']."' WHERE contentid = '".$r[$i]['aid']."' ";
echo $sql.' />';
//$result = $connector -> query($sql);如果不需要插入本回答被提问者采纳
参考技术D

点击表字段并右击

129 MySQL表操作

一、表介绍

表就相当于时文件,表中的一条记录就相当于文件的一行内容,不同的是表中的一条记录有对应的标题,称之为表的字段

例子:有一个名为student的文件

id,name,age,sex , course

1 , 张三,17,男,语文

2,李四,18,男,英语

3,王二,19,女,数学

4 刘一 ,18 ,女, 化学

现在我们把上面的文件改为一个表的话,应该是下面的样子

id name age sex course
1 张三 17 语文
2 李四 18 英语
3 王二 19 数学
4 刘一 18 化学

id,name,age,sex,course 称之为上面表的字段,其余的一行内容称之为是一条记录

二、创建表

2.1 语法

create table [数据库名.]表名(字段名1 类型[(宽度) 约束条件],字段名2 类型[(宽度) 约束条件],字段名1 类型[(宽度) 约束条件]);
  • 在同一表中,不能有相同的字段名
  • 宽度和约束条件是可选的
  • 字段名和类型是必须要有的

2.2建表

1.先建一个库mydb
create database mydb; 使用默认字符编码的

2.打开这个mydb数据库,在这个库里创建表t1
use mydb;
create table tb1(id int(1),name varchar(10),age int(2),sex varchar(2),course varchar(8))

# 2.可以不打开表直接在mydb这个库里直接创建表t1
# create table mydb.tb1(id int,name varchar,age int,sex   char,course char);

3.创建表以后显示mydb库里面的所有表
show tables;

4.查看表t1的结构
desc t1;

5.查看表t1中的所有记录
select * from [数据库名.]t1;

6.查看表t1中某个字段的数据
select id,name,age,sex,course from t1;

##################################  cmd终端运行  ##########################################
mysql> create database mydb;
Query OK, 1 row affected (0.00 sec)

mysql> use mydb;
Database changed
mysql> create table t1 (id int(1),name varchar(10),age int(2),sex varchar(2),course varchar(8));
Query OK, 0 rows affected (0.37 sec)

mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

mysql> desc t1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(1)      | YES  |     | NULL    |       |
| name   | varchar(10) | YES  |     | NULL    |       |
| age    | int(2)      | YES  |     | NULL    |       |
| sex    | varchar(2)  | YES  |     | NULL    |       |
| course | varchar(8)  | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)

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

mysql> select id,name,age,sex,course from t1;
Empty set (0.00 sec)

########################################## end ########################################

三、表中插入数据

3.1 语法

insert [into] [数据库名.]表名[(字段名1,字段名2,字段名3····)] values(字段对应的值)
  • 插入数据时,一条数据的每一个字段都要和最开始创建表时的字段对应
  • 并且输入的数据要和字段的约束类型一致
  • 中括号的字段名是可选的

3.2 插数据

1.在当前数据库时后表插入一条数据,加中括号带字段名的(可省略数据库名.)
use mydb;
insert into t1 (id,name,age,sex,course) values(1,'xichen',18,'女','语文');

2.不在当前数据库的时候,t1表插入一条数据(记录)
insert into mydb.t1(id,name,age,sex,course) values(2,'chen',19,'女','数学');

3.省略字段名,向表t1中添加一条数据
insert into t1 values(3,'xixi',19,'男','数学');

4.一次性向表中添加多条数据
insert into t1 values(4,'haha',19,'女','语文'),
                     (5,'lele',19,'男','英语'),
                     (6,'dada',20,'男','数学');
        
        
        
##################################### cmd ############################################### 
        
mysql> use mydb;
Database changed
mysql> insert into t1(id,name,age,sex,course) values(1,'xichen',18,'女','语文');
Query OK, 1 row affected, 2 warnings (0.06 sec)

mysql> insert into mydb.t1(id,name,age,sex,course) values (2,'chen',19,'女','数学');
Query OK, 1 row affected, 2 warnings (0.13 sec)

mysql> insert into t1 values(3,'xixi',19,'男','数学');
Query OK, 1 row affected, 2 warnings (0.13 sec)

mysql> insert into t1 values(4,'haha',19,'女','英语'),(5,'lele',19,'男','语文'),(6,'dada',20,'男','数学');
Query OK, 3 rows affected, 6 warnings (0.13 sec)
Records: 3  Duplicates: 0  Warnings: 6
mysql> select * from t1;
+------+--------+------+------+--------+
| id   | name   | age  | sex  | course |
+------+--------+------+------+--------+
|    1 | xichen |   18 | 女   | 语文   |
|    2 | chen   |   19 | 女   | 数学   |
|    3 | xixi   |   19 | 男   | 数学   |
|    4 | haha   |   19 | 女   | 语文   |
|    5 | lele   |   19 | 男   | 英文   |
|    6 | dada   |   20 | 男   | 数学   |
+------+--------+------+------+--------+
6 rows in set (0.00 sec)
######################################  end #############################################

四、查看表的结构

4.1 语法

1. desc [tablename]; 可以查看当前表的结构
虽然desc 方法可以查看当前表的结构,但是他输出的信息还不够全面
2.show creat table 表名[\G];
得到更全面的表定义信息,除了可以看到表定义之外,还可以看到engine(存储引擎)和charset(字符集)等信息。(\G选项的含义是是的记录能够竖向排列,以便更好的显示内容较长的记录。)

4.2 使用desc/show create table

1.显示t1表的结构(desc t1;)
2.显示创建表定义的表结构(show create table t1;)
3.以树状形式显示表的机构(show create table t1\G;)
######################################### cmd ###########################################
mysql> desc t1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(1)      | YES  |     | NULL    |       |
| name   | varchar(10) | YES  |     | NULL    |       |
| age    | int(2)      | YES  |     | NULL    |       |
| sex    | char(2)     | YES  |     | NULL    |       |
| course | char(10)    | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)

mysql> show create table t1;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t1    | CREATE TABLE `t1` (
  `id` int(1) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL,
  `age` int(2) DEFAULT NULL,
  `sex` char(2) CHARACTER SET utf8 DEFAULT NULL,
  `course` char(10) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table t1\G;
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(1) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL,
  `age` int(2) DEFAULT NULL,
  `sex` char(2) CHARACTER SET utf8 DEFAULT NULL,
  `course` char(10) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

ERROR:
No query specified
###################################### end ##############################################

五、修改表的结构

5.1 语法

1. 修改表名
alter table 旧表名 rename 新表名;

2.增加表中字段
alter table 表名 add 字段名 数据类型[完整性约束条件····],add···

3.删除表中字段
alter table 表名 drop 字段名;

4.修改表中字段
alter table 表名 MODIFY  字段名 数据类型 [完整性约束条件…];
alter table 表名 change 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
alter table 表名 change 旧字段名 新字段名 新数据类型 [完整性约束条件…];

5.修改字段在表中的排列顺序/在增加的时候指定位置
alter table 表名 add 字段名  数据类型 [完整性约束条件…]  frist;
alter table 表名 add 字段名  数据类型 [完整性约束条件…]  after 字段名;
alter table 表名 change 字段名  旧字段名 新字段名 新数据类型 [完整性约束条件…] frist;
alter table 表名 modify 字段名  数据类型 [完整性约束条件…]  after 字段名;

5.2 使用

1.将t1表名改为t2
alter table t1 rename t2;

2.向t2表中增加hobby字段
alter table t2 add hobby char(8);

3.删除t2表中的hobby字段
alter table t2 drop hobby;

4.把t2表中的course字段的宽度
alter table t2 modify course char(8);

5. 把t2表中的course字段改为class
alter table t2 change course class char(20)

6.把t2表的age字段放在sex字段后
alter table t2 modify age int(2) after sex;


########################################### cmd #########################################
mysql> alter table t1 rename t2;
Query OK, 0 rows affected (1.10 sec)
mysql> alter table t2 add hobby char(8) character set 'utf8';
Query OK, 0 rows affected (0.70 sec)
mysql> alter table t2 drop hobby;
Query OK, 0 rows affected (0.56 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> alter table t2 modify course char(8);
Query OK, 5 rows affected, 5 warnings (0.97 sec)
Records: 5  Duplicates: 0  Warnings: 5
mysql> alter table t2 change course class char(20) character set 'utf8';
Query OK, 5 rows affected (0.94 sec)
Records: 5  Duplicates: 0  Warnings: 0
mysql> select * from t2;
+------+--------+------+------+-------+
| id   | name   | age  | sex  | class |
+------+--------+------+------+-------+
|    1 | xichen |   18 | 女   | ??    |
|    2 | chen   |   19 | 女   | ??    |
|    3 | xixi   |   19 | 男   | ??    |
|    4 | haha   |   19 | 女   | ??    |
|    6 | dada   |   20 | 男   | ??    |
+------+--------+------+------+-------+
5 rows in set (0.00 sec)
mysql> alter table t2 modify age int(2) after sex;
Query OK, 0 rows affected (0.69 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t2;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(1)      | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
| sex   | char(2)     | YES  |     | NULL    |       |
| age   | int(2)      | YES  |     | NULL    |       |
| class | char(20)    | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
####################################### end #############################################

六、删除表

drop table 表名;

以上是关于MySQL如何复制表中的一条记录并插入的主要内容,如果未能解决你的问题,请参考以下文章

将Access数据库表中的记录一一插入/复制到MySQL远程数据库

如何 SQL 为另一个表中的每个 id 插入一条记录? [复制]

MySQL查询结果复制到新表(更新插入)

MySql 复制记录并插入到当前表中

从 SQL Server 中的每个表中只复制一条记录

mysql表操作