MySQL表数据更新

本文详细介绍了MySQL数据库中常见的增删改操作,包括INSERT语句的多种用法,如单行插入、多行插入、带SELECT子句的插入及处理唯一键冲突的方法;UPDATE语句用于更新表中的数据,支持单或多列更新以及使用SELECT语句进行更新;DELETE语句则用于删除表中的数据,可指定条件删除或删除所有行。

1,INSERT 语句:

<1>,单行插入: INSERT INTO table(column1,column2...)

                            VALUES (value1,value2,...);

 简单例子: INSERT INTO tasks(subject,start_date,end_date,description)
                   VALUES('Learn MySQL INSERT','2018-05-24','2018-05-25','Start learning..');

<2>,多行插入: INSERT INTO table(column1,column2...)
                            VALUES (value1,value2,...),
                                          (value1,value2,...),

                            ...;

简单例子:INSERT INTO tasks(subject,start_date,end_date,description)
                 VALUES ('任务-1','2018-05-24','2018-05-25','Description 1'),
                 ('任务-2','2018-05-24','2018-05-25','Description 2'),
                 ('任务-3','2018-05-24','2018-05-25','Description 3');

<3>,带SELECT子句的插入:在MySQL中,可以使用SELECT语句返回的列和值来填充INSERT语句的值。 此功能非常方便,因为您可以使用INSERT和SELECT子句完全或部分复制表。

简单例子:假设要将tasks表复制到tasks_bak表。       

                 首先,通过复制tasks表的结构,创建一个名为tasks_bak的新表,如下所示:

                 CREATE TABLE tasks_bak LIKE tasks;

                 第二步,使用以下INSERT语句将tasks表中的数据插入tasks_bak表:

                 INSERT INTO tasks_bak SELECT * FROM tasks;

<4>,INSERT与ON DUPLICATE KEY UPDATE:

如果新行违反主键(PRIMARY KEY)或UNIQUE约束,MySQL会发生错误。 例如,如果执行以下语句:

INSERT INTO tasks(task_id,subject,start_date,end_date,description)
VALUES (4,'Test ON DUPLICATE KEY UPDATE','2018-05-24','2018-05-25','Next Priority');

错误消息:

Error Code: 1062. Duplicate entry '4' for key 'PRIMARY' 0.016 sec

因为表中的主键task_id列已经有一个值为 4 的行了,所以该语句违反了PRIMARY KEY约束。
但是,如果在INSERT语句中指定ON DUPLICATE KEY UPDATE选项,MySQL将插入新行或使用新值更新原行记录。

此时使用 ON DUPLICATE KEY UPDATE:

INSERT INTO tasks(task_id,subject,start_date,end_date,description)
VALUES (4,'Test ON DUPLICATE KEY UPDATE','2018-05-24','2018-05-25','Next Priority')
ON DUPLICATE KEY UPDATE 

   task_id = task_id + 1, 

  subject = 'Test ON DUPLICATE KEY UPDATE',

  start_date ='2018-05-24',

  end_date ='2018-05-25',

  description ='Next Priority';

2,UPDATE 语句:

<1>,单多列更新:

UPDATE [LOW_PRIORITY] [IGNORE] table_name 
SET 
    column_name1 = expr1,
    column_name2 = expr2,
    ...
WHERE
    condition;

LOW_PRIORITY修饰符指示UPDATE语句延迟更新,直到没有从表中读取数据的连接。 LOW_PRIORITY对仅使用表级锁定的存储引擎(例如MyISAM,MERGE,MEMORY)生效。即使发生错误,IGNORE修饰符也可以使UPDATE语句继续更新行。导致错误(如重复键冲突)的行不会更新。

简单例子:单列:
                UPDATE employees 
                SET 
                              email = 'mary.new@yiibai.com'
                WHERE
                              employeeNumber = 1056;
                多列:
                UPDATE employees 
                SET 
                              lastname = 'Hill',
                              email = 'mary.hill@yiibai.com'
                WHERE
                              employeeNumber = 1056;


<2>,使用SELECT语句的UPDATE:

要更新customers表中的销售代表员工编号(employeeNumber)列(为空值),从employees表中随机选择一个职位为Sales Rep的雇员,并将其更新到customers表中。

UPDATE customers 
SET 
    salesRepEmployeeNumber = (SELECT 
            employeeNumber
        FROM
            employees
        WHERE
            jobtitle = 'Sales Rep'
        LIMIT 1)
WHERE

    salesRepEmployeeNumber IS NULL;

3,DELETE 语句:DELETE FROM table_name
                            WHERE condition;

<1>,指定条件删除:DELETE FROM employees 
                                  WHERE
                                                        officeCode = 4;

<2>,删除所有行:DELETE FROM employees;

<3>,DELETE和LIMIT子句:限定删除的行数:DELETE FROM table

                                                                        LIMIT row_count;

按客户名称按字母排序客户,删除前十行:

                    DELETE FROM customers

                    ORDER BY customerName

                    LIMIT 10;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

无敌的黑星星

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

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

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

打赏作者

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

抵扣说明:

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

余额充值