← 返回首页
MySQL基础教程(七)
发表时间:2020-03-16 12:51:55
讲解MySQL的DML语句

DML是指对数据库中表记录的操作,主要包括数据的增删改查以及更新。

1.插入数据

如果不指定字段名时顺序,一一对应全要传值。

CREATE DATABASE IF NOT EXISTS myschool
DEFAULT CHARACTER SET utf8 
DEFAULT COLLATE utf8_bin;

create table users (
   uid int not null,
   username varchar(20),
   password varchar(20),
   gender varchar(2),
   primary key (uid)
) ;

insert into users values (1,'admin','admin','男');
select * from users;

mysql还支持多条语句同时插入。注意每条记录之间要逗号隔开。

insert into users values (2,'zhangsan','123456','男'),(3,'lisi','123456','女'),(4,'王五','654321','男');
select * from users;

可以插入指定字段的数据,如果主键是自动递增类型插入是主键值无需指定。

//修改users表主键为自动递增。
ALTER table users modify column uid int auto_increment ;
//仅仅给指定的username和password字段插入数据。
insert into users (username,password) values ('guest','guest');
select * from users;

2.修改数据

对于表中的记录的值可以通过update命令来修改。 语法1: update 表名 set 字段名=修改值 where 字段名=值;where是筛选条根据条件把找到的记录然后将set后面的字段名设定成指定值。

语法2:update 表名 set 字段名=修改值 where 字段名 like 值;

//把用户编号为1的用户的密码改为'888888'
update users set password = '888888' where uid = 1;
//把所有以'王'开头的用户名的密码改为'666666'
update users set password = '666666' where username like '王%';
select * from users;

一些实用性较强的更新语句。

1)插入或更新

插入一条新记录(INSERT),但如果记录已经存在,就更新该记录。

INSERT INTO users (uid, username, password, gender) VALUES (2, '张三丰', '222222', '男') ON DUPLICATE KEY UPDATE username='张三丰', password='222222',gender='男';

2)插入或替换 如果我们希望插入一条新记录(INSERT),但如果记录已经存在,就先删除原记录,再插入新记录。

REPLACE INTO users (uid, username, password, gender) VALUES (2, '小花', '444444', '女');

3)插入忽略 如果我们希望插入一条新记录(INSERT),但如果记录已经存在,就啥事也不干直接忽略。

INSERT IGNORE INTO users (uid, username, password, gender) VALUES (1, '小明', '555555','男');

4)快照

如果想要对一个表进行快照,即复制一份当前表的数据到一个新表。

CREATE TABLE users_temp SELECT * FROM users WHERE uid<5;

3.删除记录

对于表中的记录可以使用delete和truncate命令删除。

//删除所有以'王'开头的用户记录
delete from users where username like '王%';
//删除所有用户记录
delete from users;

truncate将表中数据全部删除,在功能上和不带where子句的delete语句相同。

truncate table users;

对比delete/truncate/drop的区别:

1)delete属于DML语言,每次删除一行,可以使用rollback回滚。删除表中数据而不删除表的结构(定义),同时也不释放空间。

2)truncate是DDL语言, 操作立即生效,自动提交,不能回滚。删除内容、释放空间但不删除表的结构(定义)。

3)delete 语句可以使用where子句实现部分删除,而truncate不可以,会将表中的整个数据全部删除,使用时,可以按需求选择;

5)应用范围看:TRUNCATE 只能对table;DELETE可以是table和view。

6)如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变;使用truncate删除之后,种子会恢复到初始值。

7)drop也属于DDL语言,删除整个表。立即执行,DROP语句将表所占用的空间全释放掉。

8)执行速度:drop > truncate > delete