mysql> update teacher set name='aaa'; Query OK, 3 rows affected (0.09 sec) Rows matched: 3 Changed: 3 Warnings: 0 mysql> update teacher set name='bbb' where id =10002; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from teacher; +-------+------+---------+ | id | name | dept_id | +-------+------+---------+ | 10002 | bbb | 1 | | 10003 | aaa | 4 | | 10004 | aaa | 4 | +-------+------+---------+ 3 rows in set (0.00 sec) mysql> update teacher set name='ccc' order by id desc limit 2; Query OK, 2 rows affected (0.06 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> select * from teacher; +-------+------+---------+ | id | name | dept_id | +-------+------+---------+ | 10002 | bbb | 1 | | 10003 | ccc | 4 | | 10004 | ccc | 4 | +-------+------+---------+ 3 rows in set (0.00 sec)
mysql> select * from students; Empty set (0.01 sec) mysql> desc students; +---------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+----------------+ | sid | int(11) | NO | PRI | NULL | auto_increment | | sname | varchar(64) | YES | | NULL | | | gender | varchar(12) | YES | | NULL | | | dept_id | int(11) | NO | MUL | NULL | | +---------+-------------+------+-----+---------+----------------+ 4 rows in set (0.01 sec) mysql> insert into students values(1,'a',1,1); Query OK, 1 row affected (0.10 sec) mysql> insert into students values(4,'b',1,1); Query OK, 1 row affected (0.12 sec) mysql> create table students2 as select * from students; ERROR 1050 (42S01): Table 'students2' already exists mysql> select * from students2; +-----+-------+------+ | sid | sname | sex | +-----+-------+------+ | 1 | bbb | 1 | +-----+-------+------+ 1 row in set (0.00 sec) mysql> insert into students2 values(3,'cc',1); Query OK, 1 row affected (0.04 sec) mysql> drop table students2; Query OK, 0 rows affected (0.19 sec) mysql> create table students2 as select * from students; Query OK, 2 rows affected (0.15 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from students2; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | a | 1 | 1 | | 4 | b | 1 | 1 | +-----+-------+--------+---------+ 2 rows in set (0.00 sec) mysql> update students2 set sid=3,sname='bb' where sid=4; Query OK, 1 row affected (0.05 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> update students2 set sname='aa' where sid=1; Query OK, 1 row affected (0.07 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from students2; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | aa | 1 | 1 | | 3 | bb | 1 | 1 | +-----+-------+--------+---------+ 2 rows in set (0.00 sec) mysql> select * from students; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | a | 1 | 1 | | 4 | b | 1 | 1 | +-----+-------+--------+---------+ 2 rows in set (0.01 sec) mysql> insert into students2 values(3,'cc',1,1); Query OK, 1 row affected (0.04 sec) mysql> select * from students; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | a | 1 | 1 | | 4 | b | 1 | 1 | +-----+-------+--------+---------+ 2 rows in set (0.00 sec) mysql> select * from students2; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | aa | 1 | 1 | | 3 | bb | 1 | 1 | | 3 | cc | 1 | 1 | +-----+-------+--------+---------+ 3 rows in set (0.00 sec) mysql> update students2 set sid=4 where sid=3 and sname='cc'; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from students; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | a | 1 | 1 | | 4 | b | 1 | 1 | +-----+-------+--------+---------+ 2 rows in set (0.00 sec) mysql> select * from students2; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | aa | 1 | 1 | | 3 | bb | 1 | 1 | | 4 | cc | 1 | 1 | +-----+-------+--------+---------+ 3 rows in set (0.00 sec) mysql> update students,students2 -> set students.sname=students2.sname -> where students.sid=students2.sid; Query OK, 2 rows affected (0.06 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> select * from students; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | aa | 1 | 1 | | 4 | cc | 1 | 1 | +-----+-------+--------+---------+ 2 rows in set (0.00 sec) mysql> select * from students2; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | aa | 1 | 1 | | 3 | bb | 1 | 1 | | 4 | cc | 1 | 1 | +-----+-------+--------+---------+ 3 rows in set (0.00 sec)
• 单表修改是指修改指定单个表中的已经存在数据的一个或多个列的数值;set短语后面跟要修改的列和值;
• where子句表示限定要修改表中的哪些行数据,如果没有where子句则表示所有行都要修改;order by子句表示update数据按照指定的顺序进行;limit子句表示限定修改数据的行数
• 多表修改是指修改table_references指定的多个表中满足条件的行数据,多表修改不允许使用order by和limit子句
• 执行update语句需要修改表的权限
• Low_priority关键词表示修改语句需要等待其他链接的读此表操作结束后再执行,只作用在MyISAM, MEMORY, and MERGE存储引擎
• Ignore关键词表示当修改语句碰到违反唯一性约束条件等情况是,语句不会报错回退而是报警告信息
mysql> show variables like '%commit%'; +-----------------------------------------+-------------------+ | Variable_name | Value | +-----------------------------------------+-------------------+ | autocommit | ON | | binlog_group_commit_sync_delay | 0 | | binlog_group_commit_sync_no_delay_count | 0 | | binlog_order_commits | ON | | innodb_api_bk_commit_interval | 5 | | innodb_commit_concurrency | 0 | | innodb_flush_log_at_trx_commit | 1 | | original_commit_timestamp | 36028797018963968 | | slave_preserve_commit_order | OFF | +-----------------------------------------+-------------------+ 9 rows in set (0.02 sec) mysql> set autocommit=off; Query OK, 0 rows affected (0.01 sec) mysql> select * from students; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | aa | 1 | 1 | | 4 | cc | 1 | 1 | +-----+-------+--------+---------+ 2 rows in set (0.00 sec) mysql> update students set sname='bb'; Query OK, 2 rows affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> select * from students; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | bb | 1 | 1 | | 4 | bb | 1 | 1 | +-----+-------+--------+---------+ 2 rows in set (0.00 sec) mysql> rollback; Query OK, 0 rows affected (0.10 sec) mysql> select * from students; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | aa | 1 | 1 | | 4 | cc | 1 | 1 | +-----+-------+--------+---------+ 2 rows in set (0.00 sec) mysql> update students set sname='bb'; Query OK, 2 rows affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0mysql> update students set gender=2; Query OK, 2 rows affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> select * from students; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | bb | 2 | 1 | | 4 | bb | 2 | 1 | +-----+-------+--------+---------+ 2 rows in set (0.00 sec) mysql> rollback; Query OK, 0 rows affected (0.03 sec) mysql> select * from students; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | aa | 1 | 1 | | 4 | cc | 1 | 1 | +-----+-------+--------+---------+ 2 rows in set (0.00 sec) mysql> update students set gender=3; Query OK, 2 rows affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> commit; Query OK, 0 rows affected (0.03 sec)