mysql插入记录INSERT与多表更新
1、第一种:INSERT [INTO] tbl_name[ (col_name, ... ) ] {VALUES | VALUE}({expr |default}, ... ), (...), ...
如果为自动编号的字段赋值的话,可以采用NULL或者DEFAULT让其采用默认的递增的形式来实现。
INSERT users VALUES(DEFAULT, 'Tom', '123', 25, 1);
INSERT users VALUES(NULL, 'John', '456', 3*7-5, 1);
INSERT users VALUES(NULL, 'John', '456', DEFAULT, 1);
INSERT users VALUES(DEFAULT, 'John', '456', 3*7-5, 1), (NULL, 'ROSE',67, DEFAULT, 0);
2、第二种:INSERT [INTO] tbl_name SET col_name = {expr |DEFAULT}, ...
与第一种方法的区别在于,此方法可以使用子查询(SubQuery),
一次性只能插入一条记录
INSERT users SET username='Ben', password='456';
多表更新
1、第一种方法
(1)将查询结果写入数据表
INSERT [INTO] tbl_name[(col_name,...)] SELECT...
mysql> SELECT goods_cate FROM tdb_goods GROUP BY goods_cate; #以goods_cate分组
+---------------+
| goods_cate |
+---------------+
| 台式机 |
| 平板电脑 |
| 服务器/工作站 |
| 游戏本 |
| 笔记本 |
| 笔记本配件 |
| 超级本 |
+---------------+
7 rows in set (0.00 sec)
mysql> SHOW COLUMNS FROM tdb_goods_cates; #创建的数据表
+-----------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------------------+------+-----+---------+----------------+
| cate_id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| cate_name | varchar(20) | NO | | NULL | |
+-----------+----------------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
mysql> INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate; #将查询结果写入数据表
Query OK, 7 rows affected (0.04 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM tdb_goods_cates;
+---------+---------------+
| cate_id | cate_name |
+---------+---------------+
| 1 | 台式机 |
| 2 | 平板电脑 |
| 3 | 服务器/工作站 |
| 4 | 游戏本 |
| 5 | 笔记本 |
| 6 | 笔记本配件 |
| 7 | 超级本 |
+---------+---------------+
7 rows in set (0.00 sec)
(2)更新数据表
UPDATE table_references
SET col_name1={expr1|DEFAULT}
[, col_name2={expr2|DEFAULT}]...
[WHERE where_condition]
table_references
{[INNER|CROSS] JOIN | {LEFT|RIGHT} [OUTER] JOIN}
mysql> UPDATE tdb_goods INNER JOIN(内连接) tdb_goods_cates ON goods_cate=cate_name(连接条件) SET goods_cate=cate_id;
Query OK, 22 rows affected (0.06 sec)
Rows matched: 22 Changed: 22 Warnings: 0
修改之前:
*************************** 21. row ***************************
goods_id: 21
goods_name: HMZ-T3W 头戴显示设备
goods_cate: 笔记本配件
brand_name: 索尼
goods_price: 6999.000
is_show: 1
is_saleoff: 0
*************************** 22. row ***************************
goods_id: 22
goods_name: 商务双肩背包
goods_cate: 笔记本配件
brand_name: 索尼
goods_price: 99.000
is_show: 1
is_saleoff: 0
修改之后:
*************************** 21. row ***************************
goods_id: 21
goods_name: HMZ-T3W 头戴显示设备
goods_cate: 6
brand_name: 索尼
goods_price: 6999.000
is_show: 1
is_saleoff: 0
*************************** 22. row ***************************
goods_id: 22
goods_name: 商务双肩背包
goods_cate: 6
brand_name: 索尼
goods_price: 99.000
is_show: 1
is_saleoff: 0
方法2:(1)创建数据表同时将查询结果写入到数据表
CREATE TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
select_statement
mysql> CREATE TABLE tdb_goods_brands(
-> brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> brand_name VARCHAR(40) NOT NULL
-> )
-> SELECT brand_name FROM tdb_goods GROUP BY brand_name;
(2)更新数据表
mysql> UPDATE tdb_goods AS g INNER JOIN tdb_goods_brands AS b ON g.brand_name=b.
brand_name SET g.brand_name = b.brand_id;
3、第三种:INSERT [INTO] tbl_name [(col_name, ... )] SELECT ...
说明:此方法可以将查询结果插入到指定数据表
mysql> SELECT * FROM users;
+----+----------+----------+-----+------+
| id | username | password | age | sex |
+----+----------+----------+-----+------+
| 1 | Tom | 123 | 29 | 0 |
| 2 | John | 456 | | 0 |
| 3 | Tom | 123 | 27 | 0 |
| 4 | John | 456 | 27 | 0 |
| 10 | John | 456 | 21 | 0 |
| 11 | ROSE | 67 | 4 | 0 |
| 12 | Ben | 456 | 13 | NULL |
+----+----------+----------+-----+------+
mysql> CREATE TABLE TEST(
-> id TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> username VARCHAR(20)
-> );
Query OK, 0 rows affected (0.13 sec)
mysql>
mysql> SELECT * FROM test;
Empty set (0.02 sec)
mysql> INSERT test(username) SELECT username FROM users WHERE age >=30;
Query OK, 1 row affected (0.05 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM test;
+----+----------+
| id | username |
+----+----------+
| 1 | John |
+----+----------+
1 row in set (0.00 sec)
mysql插入记录INSERT与多表更新的更多相关文章
- MySQL插入记录 insert
一.insert insert tb_name [(col_name,......)] {values | value} ({expr | default } ....... ) , ( ... ) ...
- 插入记录INSERT(二十五)
插入记录INSERT 我们先来看第一个操作:INSERT 实际上在mysql当中一共存在着3种不同的insert语句,我们先来看第一种.它的语法结构如下: 一.插入记录 INSERT [INTO] t ...
- Mysql 插入记录时检查记录是否已经存在,存在则更新,不存在则插入记录SQL
我们在开发数据库相关的逻辑过程中, 经常检查表中是否已经存在这样的一条记录, 如果存在则更新或者不做操作, 如果没有存在记录,则需要插入一条新的记录. 这样的逻辑固然可以通过两条sql语句完成. SE ...
- MYSQL:插入记录检查记录是否存在,存在则更新,不存在测插入记录SQL
我们在开发数据库相关的逻辑过程中, 经常检查表中是否已经存在这样的一条记录, 如果存在则更新或者不做操作, 如果没有存在记录,则需要插入一条新的记录. 这样的逻辑固然可以通过两条sql语句完成. SE ...
- MySql插入记录时判断
我们在开发数据库相关的逻辑过程中, 经常检查表中是否已经存在这样的一条记录, 如果存在则更新或者不做操作, 如果没有存在记录,则需要插入一条新的记录. 这样的逻辑固然可以通过两条sql语句完成. SE ...
- MySQL 插入记录时自动更新时间戳
将字段设置成timestamp类型,同时默认值设置成 CURRENT_TIMESTAMP.
- SqlServer和Mysql插入记录前判断是否存在,存在则插入,不存在则修改。
SqlServer中是这样: ) ,@title,@searchKeys,@serviceIntervalSecond,@sleepMillisecondPerSearch) ELSE UPDATE ...
- mysql插入数据频繁出现坏表
测试环境mysql出现了一个怪表:select查询表卡死,alter修改表卡死,甚至我不想要这个表了,delete.truncate.drop表都卡死卡主了...... 解决办法: >show ...
- Mysql学习(慕课学习笔记4)创建数据表、查看数据表、插入记录
创建数据表 Create table [if not exists] table_name(column_name data_type,…….) UNSIGNED 无符号SIGNED 有符号 查看创建 ...
随机推荐
- centos7/centos6修改系统默认语言
应用环境: 一直在使用centos7.x,系统默认的语言也是英文环境,工作内容偶遇中文,顺便搜罗修改一番,小记如下. 测试环境: 测试步骤: CentOS 7.x 1. 查看当前语言环境 [root@ ...
- bzoj4198 荷马史诗
关于Huffman树: 大概就是那样子吧. 是这样的:对于最多只能有k个叉的树,我们想要使得∑val(i) * deep(i)最大 那么我们补0后建立小根堆即可. 最典型例题:合并果子. 然后是这个: ...
- Idea + Git + GitLab 使用
首先去下载Git,https://git-scm.com/ 安装好之后,打开Idea--->Settings,,,设置Git路径,然后点击Test按钮 然后是GitLab,一般企业内部开发都会有 ...
- 字符类型char、字符串与字符数组、字符数组与数据数组区别
字符类型是以ASCII码值运算的:小写字母比相应的大写字母大32,其中A=65,a=97 Esc键 27(十进制).'\x1B'(十六进制).'\33'(八进制) 转义字符:\0 空字符 AS ...
- (链表 双指针) leetcode 160. Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...
- (map)水果 hdu1263
水果 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- 洛谷P2765魔术球问题 最小路径覆盖
https://www.luogu.org/problemnew/show/P2765 看到这一题第一眼想到:这不是二分最大流吗,后来发现还有一种更快的方法. 首先如果知道要放多少个球求最少的柱子,很 ...
- CentOS 6.5 64位 安装Nginx, MySQL, PHP
此篇文章参考了一些网站找的教程,自己遇到了很多坑,写一下自己的安装全过程. 服务器是腾讯云的.安装了centos 6.5系统. 一. 安装Nginx 1.首先安装GCC,make,C++编译器 yum ...
- nginx中间件
Nginx简介 Nginx是一个开源且高性能.可靠的HTTP中间件.代理服务.其特点是占有内存少,并发能力强. Nginx优势:IO多路复用epoll 1.什么是IO复用 它是内核提供的一种同时监控多 ...
- python 管道 事件(Event) 信号量 进程池(map/同步/异步)回调函数
####################总结######################## 管道:是进程间通信的第二种方式,但是不推荐使用,因为管道会导致数据不安全的情况出现 事件:当我运行主进程的 ...