DML语言即数据操作语言,作用是更新,添加,删除数据表中的的行,也就是给每个字段添加新的数据。
目录
如下图,DML语言就是对表中箭头的地方进行添加,更新,删除数据的。
DML语言的分类。 insert:在新行中添加数据。update:对已经存在数据的行进行修改。delete:删除某行中的数据。
选择插入是指:向指定的字段添加数据,未被选择的字段不会添加。
- INSERT INTO 表名(列名1 ,列名2 ,列名3.....) VALUES(值1,值2 ,值3......);
- insert into departments
- (department_name,location_id)
- values
- ("market", 1);
完全插入是指:默认一行中所有字段都要添加数据。使用了主键增长的字段由于数据库管理系统自动维护,我们不需要给他主动加数据,对其使用null,0,default占位即可。
- INSERT INTO 表名 VALUES(值 1 ,值 2 ,值3......);
- //如果主键是自动增长,需要使用 default 或者 null 或者 0 占位。
- insert into departments values(default,"development",2);
- insert into departments values(null,"human",3);
- insert into departments values(0,"teaching",4);
默认值处理是指:初始化的时候或者给未被选择的字段添加默认值,一般的默认值有:null,unknown,0,未知,NaN,undefined,default等。而且这个默认值的数据类型要与这个字段的数据类型保存一致。
- CREATE TABLE 表名(列名 类型 default 默认值,...... );
- //创建emp3表,该表包含emp_id主键且自动增长,包含name,包含address,该列默认值为”未知”。
- create table emp3(emp_id int primary key
- auto_increment,name varchar(10),address
- varchar(50) default 'Unknown');
- ALTER TABLE 表名 ADD COLUMN 列名 类型 DEFAULT 默认值;
- alter table emp3 add column job_id int default 0;
如果在插入数据时并未指定该列的值,那么MySQL会将默认值添加到该列中(通常是null)。如果是完全项插入需要使用default来占位。
- //向emp3表中添加数据,要求address列与job_id列使用默认值作为该列的值。
- insert into emp3(name) values("admin");//选择插入
- insert into emp3 values(default,"xiaoming",default,default);//完全插入
update对已经存在数据的行进行数据内容修改。更新语句中一定要给定更新条件,否则表中的所有数据都会被更新成新的值。
一般更新条件(也就是准确定位到需要修改数据的单元格)很好做,作为一张二维表,只需要x和y两个坐标即可确定,通常使用一个字段+主键的形式来确定单元格,如:address = "BeiJing" where emp_id = 1。
常见操作有:1,修改某一个单元格;2,修改一行中多个字段。
- UPDATE 表名 SET 列名=值,列名=值…… WHERE 条件;
- //更新emp3表中的id为1的数据,添加address为 BeiJing。
- update emp3 set address = "BeiJing" where emp_id = 1;//修改单元格
- UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson';//修改一行中多个列
在DELETE语句中,如果没有给定删除条件则会删除表中的所有数据。
- DELETE FROM 表名 WHERE 条件;
- delete from emp3 where emp_id = 1;//删除emp_id为1的一整行。
- TRUNCATE TABLE 表名;
- truncate table emp3;
truncate是整体删除(速度较快),delete 是逐条删除(速度较慢);
truncate不写服务器log日志,delete写服务器log,也就是truncate效率比delete高的原因
truncate是会重置自增值,相当于自增列会被置为初始值,又重新从1开始记录,而不是接着原来的值。而delete删除以后,自增值仍然会继续累加。