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