修改MySQL中的数据
一:insert语句
1.介绍
在执行插入语句前,需要具有执行INSERT
语句的INSERT
权限。
2.准备环境
3.简单insert语句
4.插入多行
在这种形式中,每行的值列表用逗号分隔。
如果为表中的所有列指定相应列的值,则可以忽略INSERT
语句中的列列表
5.具有SELECT子句的MySQL INSERT
可以使用INSERT
和SELECT
子句完全或部分复制表。
6.INSERT与ON DUPLICATE KEY UPDATE
如果新行违反主键(PRIMARY KEY)或UNIQUE
约束,MySQL会发生错误。
但是,如果在INSERT
语句中指定ON DUPLICATE KEY UPDATE选项,MySQL将插入新行或使用新值更新原行记录。
=》
=》问题
这个取决与on duplicate key update后面的值,如果id是2,因为后面加1,id的值变成3,在表中id=3是有的,所以还会继续报错。
二:insert ignore
1.介绍
当使用INSERT语句向表中添加一些行数据并且在处理期间发生错误时,INSERT
语句将被中止,并返回错误消息。因此,可能不会向表中没有插入任何行。
但是,如果使用INSERT INGORE
语句,则会忽略导致错误的行,并将其余行插入到表中。
请注意,IGNORE
子句是MySQL对SQL标准的扩展。
所以当使用INSERT IGNORE
语句来执行插入数据时,MySQL只发出警告而不是发出错误,以防发生错误退出其它数据无法插入。
2.准备数据
UNIQUE约束确保电子邮件列中不存在重复的电子邮件。
3.示例
先插入一条记录
使用ignore:
结果:
4.strict模式
当STRICT
模式打开时,如果您尝试将无效值插入到表中,MySQL将返回错误并中止INSERT
语句。
但是,如果使用INSERT IGNORE
语句,则MySQL将发出警告而不是错误。 此外,它将尝试调整值以使其在插入表之前有效。
说明:
例如表中的字段的长度限制是6.
当数据插入的时候是7。
不会报错,只会将字符串截取,剩下6个字符被插入。
三:Update语句
1.介绍
使用UPDATE
语句来更新表中的现有数据。也可以使用UPDATE
语句来更改表中单个行,一组行或所有行的列值。
- 首先,在
UPDATE
关键字后面指定要更新数据的表名。 - 其次,
SET
子句指定要修改的列和新值。要更新多个列,请使用以逗号分隔的列表。以字面值,表达式或子查询的形式在每列的赋值中来提供要设置的值。 - 第三,使用WHERE子句中的条件指定要更新的行。
WHERE
子句是可选的。 如果省略WHERE
子句,则UPDATE
语句将更新表中的所有行。
支持的修饰符:
LOW_PRIORITY
修饰符指示UPDATE
语句延迟更新,直到没有从表中读取数据的连接。LOW_PRIORITY
对仅使用表级锁定的存储引擎(例如MyISAM,MERGE,MEMORY)生效。- 即使发生错误,IGNORE修饰符也可以使UPDATE语句继续更新行。导致错误(如重复键冲突)的行不会更新。
2.示例
使用yiibaidb数据库中的emplee表。
修改数据:
验证数据
3.update多列
要更新多列中的值,需要在SET
子句中指定分配。
四:update join
1.介绍
使用MySQL UPDATE JOIN
语句来执行跨表更新。
2.相同的意思的语句
在这个UPDATE
语句与具有隐式INNER JOIN
子句的UPDATE JOIN
工作相同
3.准备数据
CREATE DATABASE IF NOT EXISTS empdb; USE empdb;
-- create tables
CREATE TABLE merits (
performance INT(11) NOT NULL,
percentage FLOAT NOT NULL,
PRIMARY KEY (performance)
); CREATE TABLE employees (
emp_id INT(11) NOT NULL AUTO_INCREMENT,
emp_name VARCHAR(255) NOT NULL,
performance INT(11) DEFAULT NULL,
salary FLOAT DEFAULT NULL,
PRIMARY KEY (emp_id),
CONSTRAINT fk_performance FOREIGN KEY (performance)
REFERENCES merits (performance)
);
-- insert data for merits table
INSERT INTO merits(performance,percentage)
VALUES(1,0),
(2,0.01),
(3,0.03),
(4,0.05),
(5,0.08);
-- insert data for employees table
INSERT INTO employees(emp_name,performance,salary)
VALUES('Mary Doe', 1, 50000),
('Cindy Minsu', 3, 65000),
('Sue Greenspan', 4, 75000),
('Grace Dell', 5, 125000),
('Nancy Johnson', 3, 85000),
('John Doe', 2, 45000),
('Lily Bush', 3, 55000);
4.INNER JOIN子句的示例
假设想根据员工的工作表现来调整员工的工资。
因此,优点百分比存储在merits
表中,您必须使用UPDATE INNER JOIN
语句根据存储在merits
表中的百分比来调整employees
表中员工的工资。
5.具有LEFT JOIN的MySQL UPDATE JOIN示例
假设公司又雇用了两名新员工:
因为这些员工是新员工,所以他们的绩效(performance
)数据不可用或为NULL
。现在 employees
表中的数据。
这时:
要计算新员工的工资,不能使用UPDATE INNER JOIN
语句,因为它们的绩效数据在merits
表中不可用。
要使用UPDATE LEFT JOIN
来实现了。
当UPDATE LEFT JOIN
语句在另一个表中没有相应行时,就会更新表中的一行。
做法:
您可以使用以下语句将新雇员的工资增加1.5%。
五:delete语句
1.介绍
使用MySQL DELETE
语句从单个表中删除数据。
2.示例
3.与limit结合
如果要限制要删除的行数,则使用LIMIT子句。
这个时候会删除开始的m行。
六:on delete cascade语句
1.介绍
使用MySQL ON DELETE CASCADE
引用操作来执行外键从多个相关表中删除数据。
ON DELETE CASCADE
对于外键的引用操作,可以实现在从父表中删除数据时自动删除子表中的数据。
ON DELETE CASCADE
仅支持使用存储引擎支持外键(如InnoDB
)的表上工作。 某些表类型不支持诸如MyISAM
的外键,因此应该在使用MySQL ON DELETE CASCADE
引用操作的表上选择适当的存储引擎。
2.需求
假设有两张表:建筑物(buildings
)和房间(rooms
)。 在这个数据库模型中,每个建筑物都有一个或多个房间。
当我们从buildings
表中删除一行时,还要删除rooms
表中引用建筑物表中行的行。
3.准备数据
USE testdb; CREATE TABLE buildings (
building_no INT PRIMARY KEY AUTO_INCREMENT,
building_name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE rooms (
room_no INT PRIMARY KEY AUTO_INCREMENT,
room_name VARCHAR(255) NOT NULL,
building_no INT NOT NULL,
FOREIGN KEY (building_no)
REFERENCES buildings (building_no)
ON DELETE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO buildings(building_name,address)
VALUES('海南大厦','海口市国兴大道1234号'),
('万达水城','海口市大同路1200号'); INSERT INTO rooms(room_name,building_no)
VALUES('Amazon',1),
('War Room',1),
('Office of CEO',1),
('Marketing',2),
('Showroom',2);
4.示例
DELETE FROM buildings WHERE building_no = 2;
5.查找受MySQL ON DELETE CASCADE操作影响的表的技巧
有时,当要从表中删除数据时,知道哪个表受到MySQL ON DELETE CASCADE
参考操作的影响是有用的。 可从information_schema
数据库中的referential_constraints
表中查询此数据。
七:delete join
1.介绍
使用MySQL DELETE JOIN
语句来从多个表中删除数据。
2.示例
每个用户有多个订单,每个订单属于一个唯一的用户。
示例一:
可以使用DELETE
语句与LEFT JOIN
子句来清理客户数据。 以下声明删除未下订单的客户:
八:replace语句
1.介绍
REPLACE
语句是标准SQL的MySQL扩展。 MySQL REPLACE
语句的工作原理如下:
要使用MySQL REPLACE
语句,至少需要具有INSERT
和DELETE
权限。
MySQL使用PRIMARY KEY或UNIQUE KEY
索引来要确定表中是否存在新行。
2.准备数据
USE testdb; CREATE TABLE cities (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
population INT NOT NULL
);
INSERT INTO cities(name,population)
VALUES('New York',8008278),
('Los Angeles',3694825),
('Shanghai',1923400);
3.示例
现在name
列为NULL
。 您可能期望name
列的值保持不变。但是,REPLACE
语句不这样做。
4.示例二
5.注意:
请注意,没有出现在REPLACE
语句中的列将使用默认值插入相应的列。
如果列具有NOT NULL
属性并且没有默认值,并且您如果没有在REPLACE
语句中指定该值,则MySQL将引发错误。这是REPLACE
和INSERT
语句之间的区别。
6.对于有update意思的replace的其他写法。
请注意,REPLACE
语句中没有WHERE子句。
例如:
7.注意点
如果您开发的应用程序不仅支持MySQL数据库,而且还支持其他关系数据库管理系统(RDBMS),则应避免使用
REPLACE
语句,因为其他RDBMS可能不支持。代替的作法是在事务中使用DELETE和INSERT语句的组合。如果在具有触发器的表中使用了
REPLACE
语句,并且发生了重复键错误的删除,则触发器将按以下顺序触发:在删除前删除,删除之后,删除后,如果REPLACE
语句删除当前 行并插入新行。 如果REPLACE
语句更新当前行,则触发BEFORE UPDATE
和AFTER UPDATE
触发器。
九:Prepared语句
1.介绍
之前的MySQL版本4.1,查询以文本格式发送到MySQL服务器。
之后,MySQL服务器使用文本协议将数据返回给客户端。MySQL必须完全解析查询,并将结果集转换为字符串,然后再将其返回给客户端。
文本协议具有严重的性能问题。
为了解决这个问题,MySQL自版本4.1以来添加了一个名为prepare
语句的来实现一些新功能。
prepare
语句利用客户端/服务器二进制协议。 它将包含占位符(?
)的查询传递给MySQL服务器。
2.说明
当MySQL使用不同的productcode
值执行此查询时,不必完全解析查询。
因此,这有助于MySQL更快地执行查询,特别是当MySQL多次执行查询时。
因为prepare
语句使用占位符(?
),这有助于避免SQL注入的问题,从而使您的应用程序更安全一些。
3.语法
4.示例
修改MySQL中的数据的更多相关文章
- (笔记)Mysql命令update set:修改表中的数据
update set命令用来修改表中的数据. update set命令格式:update 表名 set 字段=新值,… where 条件; 举例如下:mysql> update MyClass ...
- 利用Ajax实现数据的同步传输,从mysql中提取数据,通过echarts可视化
如何将mysql数据库中的方式通过echarts可视化呢,以下面这个简单的例子向大家进行演示: 步骤一:mysql的创表和插入数据,当然这些数据也可以是你通过爬虫抓取的. 步骤二: 创 ...
- Vusual C++连接Mysql和从MySql中取出数据的API介绍
.1 mysql_real_connect() 2.1.1 函数原型: MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const ...
- sql server中如何修改视图中的数据?
sql server中如何修改视图中的数据? 我做个测试,视图的数据有标记字段时,如果是这种方式(0 as FlagState),是无法修改的 --创建视图语句 --- create view V_E ...
- 用python批量向数据库(MySQL)中导入数据
用python批量向数据库(MySQL)中导入数据 现有数十万条数据,如下的经过打乱处理过的数据进行导入 数据库内部的表格的数据格式如下与下面的表格结构相同 Current database: pyt ...
- PHP如何批量更新MYSQL中的数据
最近项目需要用到批量更新数据库里的数据,在网上找了一下这方面的例子,觉得这个还不错,分享给大家. 在这个业务里里面涉及到了更新两张数据表,那么大家是不是会想到非常简单,马上上代码 $sql ,type ...
- hadoop项目实战--ETL--(二)实现自动向mysql中添加数据
四 项目开发 1 创建数据库db_etl,新建两张表user 和oder.表结构如第一部分图所示. 2 编写python脚本,实现自动向mysql中插入数据. 新建python 项目,目录结构如下图 ...
- PHP读取mysql中的数据
<!DOCTYPE HTML> <html> <head> <title> PHP动态读取mysql中的数据 </title> <me ...
- 辛星浅谈mysql中的数据碎片以及引擎为MyISAM下的操作
对于mysql中的数据碎片,事实上和我们删除数据是息息相关的,删除数据的时候必定会在数据文件里造成不连续的空白空间,对于少量的数据的删除,并不会产生多少的空白空间.假设在一段时间内的大量的删除操作,会 ...
随机推荐
- 以太坊 链私有链环境搭建(windows)
摸索以太坊区块链技术几个月了.最近打算逐步的把自己学到的东西和大家分享一下.在阅读本文之前,希望大家能对区块链的概念能有所了解.这样操作过程中的环节理解更深入.下面开始进入准备.因为本次是window ...
- 学习Spring Boot:(十四)spring-shiro的密码加密
前言 前面配置了怎么使用 shiro ,这次研究下怎么使用spring shiro的密码加密,并且需要在新增.更新用户的时候,实现生成盐,加密后的密码进行入库操作. 正文 配置凭证匹配器 @Bean ...
- luogu1373 小a和uim之大逃离 (dp)
直接设f[i][j][k][l][2]是在(i,j)时两人分数是k,l,复杂度会爆掉 但其实只需要知道两人分数只差就行了 所以设f[i][j][k][2],k是分数之差%(K+1),最后一位表示该谁走 ...
- python之旅:并发编程
一 背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所 ...
- Linux上java程序的jar包启动通用脚本(稳定用过)
Linux上java程序的jar包启动通用脚本如下: #! /bin/sh export LANG="zh_CN.GBK" SERVICE_NAME=` .sh` SCRIPT_N ...
- OpenStack中RabbitMQ高可用性配置
采用镜像队列的方案进行配置 1. 网络拓扑 node1:10.10.11.1 node2:10.10.11.2 2. 配置hosts node1+node2: vim /etc/hosts >1 ...
- 纯CSS实现表单验证
ladies and 乡亲们,表单验证你在做吗?客户端or服务器端,javascript or jquery,动手写 or 使用插件,今天我们来探索下使用纯css实现表单验证,借以学习css sele ...
- Jsp使用遍历List集合
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- python解析minicap
上篇知道了minicap发送图片的格式,照着官网的app.js代码,改用一个python版的来解析它,适当扩展,可以做个小工具实时显示手机屏幕. 步骤: 一.手机开启minicap服务 adb she ...
- JavaScript继承详解(一)
面向对象与基于对象 几乎每个开发人员都有面向对象语言(比如C++.C#.Java)的开发经验. 在传统面向对象的语言中,有两个非常重要的概念 - 类和实例. 类定义了一类事物公共的行为和方法:而实例则 ...