数据操作语言(DML)是对表中记录进行添加(INSERT)、更新(UPDATE)、删除(DELETE)等操作。
添加数据
向表中添加数据时,字段名与字段值的数据类型、个数、顺序必须一一对应。语法:
insert into <表名> [<字段1>[,<字段2>,...<字段n>]] values (<值1>[,<值2>,...<值n>]);
- 省略字段名,则默认依次插入所有字段。
- 批量添加多个表或多个值之间使用逗号分隔。
示例1:不指定字段名添加
mysql> insert into employee values('e01','张三',26,'p01');
示例2:指定字段名添加
mysql> insert into employee (e_id,e_name,p_id) values ('e01','张三','p01');
示例3:批量添加
mysql> insert into employee values
-> ('e01','张三',26,'p01'),
-> ('e02','李四',29,'p01'),
-> ('e03','王五',33,'p03');
导入本地数据:
load data local infile ‘<本地文件路径>’into table <表名> fields terminated by ‘<分隔符>' [ignore n lines];
- 本地文件路径中不能含有中文,路径中用’‘或’/’。
- 文件的字符集编码与数据库的字符集编码一致,否则会出现乱码情况。
示例:
-- 创建表
mysql> create table emp(
-> empno int primary key auto_increment,
-> ename varchar(5) not null,
-> ename varchar(5),
-> mgr int,
-> hiredate date,
-> sal float,
-> comm float,
-> deptno int);
-- 导入数据
mysql> load data local infile 'C:/employee.csv'
-> into table emp
-> fields terminated by ','
-> ignore 1 lines;
将查询结果添加到表中:
insert into <新表名> [<字段1>[,<字段2>,...<字段n>]]
select <字段1>[,<字段2>,...<字段n>] from <原表名> [where <查询条件>];
- 新表需事先创建,且与select子句的字段类型一一对应。
示例:
-- 创建表
mysql> create table emp(
-> empno int primary key auto_increment,
-> ename varchar(5) not null,
-> ename varchar(5),
-> mgr int,
-> hiredate date,
-> sal float,
-> comm float,
-> deptno int);
-- 添加数据
mysql> insert into emp (empno,ename,deptno)
-> select e_id,e_name,d_id from employee;
将查询结果添加到新表中:
create table <新表名> as
select <字段1>[,<字段2>,...<字段n>] from <原表名> [where <查询条件>];
- 添加数据的同时创建新表
示例:
mysql> create table emp as
-> select e_id,e_name,d_id from employee;
更新数据
在MySQL中,可以使用update语句来修改、更新表中的数据。语法:
update <表名> set <字段1>=<值1> [,<字段2>=<值2>…<字段n>=<值n>]
[where <更新条件> ]
[order by <排序字段> [排序方向]]
[limit <限制行数>];
- set子句用于指定表中要修改的字段名及其字段值。每个指定的值可以是表达式,也可以是该字段对应的默认值。如果指定的是默认值,可用关键字default。
- where子句用于限定表中要修改的行。若不指定,则修改表中所有的行。
- order by子句用于限定表中的行被修改的次序。
- limit子句用于限定被修改的行数。
- 修改多个字段值时,set子句的每个值用逗号分开即可。
示例:将7369员工的姓名修改为abc
mysql> update emp set ename='abc' where empno=7369;
删除数据
在MySQL中,可以使用delete语句来删除表中记录。语法:
delete from <表名> [where 删除条件] [order by <排序字段> [排序方向]] [limit <限制行数>];
- where子句表示为删除操作限定删除条件,若省略则代表删除表中的所有行。
- order by子句表示删除时,表中各行将按照子句中指定的顺序进行删除。
- limit子句用于告知服务器在控制命令被返回到客户端前被删除行的最大值。
示例1:删除20部门的员工记录
mysql> delete from emp where deptno=20;
示例2:删除所有的员工记录
mysql> delete from emp;
清除表中所有记录:
truncate 表名;