1. DML语言
数据库存在的意义:数据存储 、数据管理
DML((Data Manipulation Language))语言:作为SQL的分类之一,该命令能够使用户查询数据库以及操作已有数据库中的数据的计算机语言。主要用于操作数据库对象中所包含的数据,是一种数据操作语言。
DML分成交互型DML和嵌入型DML两类:
-
交互型DML:这类DML自成系统,可在终端上直接对数据库进行操作。
-
嵌入型DML:这类DML是嵌入在主语言中使用。此时主语言是经过扩充能处理DML语句的语言。
依据语言的级别,DML又可分成过程性DML和非过程性DML两种:
-
过程性DML:用户编程时,不仅需要指出“做什么”(需要什么样的数据),还需要指出“怎么做”(怎么获得数据),层状、网状的DML属于过程性语言。
-
非过程性DML:用户编程时,只需要指出“做什么”,不需要指出“怎么做”,关系型DML属于非过程性语言。
主要包括:添加数据(INSERT)、删除数据(DELETE)、修改数据(UPDATE)
1.1 插入(insert)
-- 语法:insert into `表名`(`字段名1`,`字段名2`,...) values('值1','值2',...),('值1','值2',...),... -- 指定字段插入数据 -- insert into `表名`(`字段名1`,`字段名2`,...) values('值1','值2',...) INSERT INTO `grade`(`gradename`)VALUES('大四') -- 如果不写表的字段,它就会一一匹配,此时所有字段值都必须写全,主键值不能省略 INSERT INTO `grade`VALUES('研一') -- 报错 INSERT INTO `grade`VALUES(5,'研二') -- 成功 -- 一般写插入语句,我们一定要使数据和字段一一对应! -- 插入一个字段多个值,主键自增可以忽略 INSERT INTO `grade`(`gradename`)VALUES('大三'),('大二') INSERT INTO `student`(`name`)VALUES('赵四') -- 一次插入一个字段 INSERT INTO `student`(`name`,`pwd`,`sex`)VALUES('张三','111111','男') -- 一次插入多个字段 -- 插入除主键外的所有字段,此时要写出所有字段名,不可省略字段名 INSERT INTO `student`(`name`,`pwd`,`sex`,`birthday`,`gradeid`,`address`,`email`) VALUES('王五','222222','男','2020-02-02','3','吉林','111@163.com'), ('小黄','222222','男','2020-02-02','3','吉林','111@163.com'), ('小红','222222','男','2020-02-02','3','吉林','111@163.com') -- 插入全部字段(包括了主键),此时可省略全部字段名 INSERT INTO `student`VALUES (4,'王七','333333','男','2000-01-01','8','黑龙江','222@qq.com') -- 插入全部字段的多条数据,此时可忽略字段名 INSERT INTO `student`VALUES (5,'1','1','男','2001-01-01','11','1','1@qq.com'), (6,'2','1','男','2002-01-01','12','1','2@qq.com'), (7,'3','1','男','2003-01-01','13','1','3@qq.com'), (8,'4','1','男','2004-01-01','14','1','4@qq.com'), (9,'5','1','男','2005-01-01','15','1','5@qq.com'), (10,'6','1','男','2006-01-01','16','1','6@qq.com')
注意事项:
-
字段和字段之间用英文“,”隔开
-
字段是可以省略的,但是后面的值要一一对应,不能少,字段都省略时,主键值就不能忽略
-
可以同时插入多条数据,values后面的值需要使用“,”隔开
-
每写完一条sql指令,最好后面加上一个“;”,这样在执行值更加明确减少报错
1.2 修改(update)
-- 语法:update `表名` set `字段名1`='值1',`字段名2`='值2',... where 条件 -- 修改学员名字 UPDATE `student` SET `name`='小红' WHERE id=1 -- 不指定条件的情况下,会改动表中的所有值 UPDATE `student` SET `name`='小明' -- 修改多个属性,之间用”,“隔开 UPDATE `student` SET `name`='小红',`pwd`='123456' WHERE id=1 -- 通过多个条件定位数据,修改多个属性 UPDATE `student` SET `name`='刘壮实',`pwd`='654321' WHERE `id`=1 AND `sex`='男' -- 值可以是一个具体的值,也可以是一个变量 UPDATE `student` SET `birthday`=CURRENT_TIME,`sex`='女' WHERE `name`='刘壮实' AND `sex`='男'
操作符 | 含义 | 举例 | 结果 |
---|---|---|---|
= | 等于 | 5=6 | false |
> | 大于 | 5>6 | false |
< | 小于 | 5<6 | true |
>= | 大于等于 | 5>=6 | false |
<= | 小于等于 | 5<=6 | true |
<> 或 != | 不等于 | 5<>6 或 5!=6 | true |
BETWEEN 条件1 AND 条件2 | 在某个范围内 | [1,5] | |
AND | && | 1>2 && 3<4 | false |
OR | || | 1>2 || 3<4 | true |
注意事项:
-
字段名是数据库的列,尽量带上``
-
筛选的条件如果没有指定,则会修改所有的列
-
值value可以是一个具体的值,也可以是一个变量
-
多个设置的属性之间使用英文“,”隔开
1.3 删除(delete)
-- 删除数据(避免这样写,会删除表中全部数据),要指定条件进行删除 DELETE FROM `student` -- 删除指定数据 DELETE FROM `student` WHERE id =1
-- 清空student表 TRUNCATE `student`
-
相同点:都能删除数据,都不会删除表结构
-
不同点:
-
TRANCATE 重新设置自增列,计数器会归零
-
TRANCATE 不会影响事务
-
-- 测试delete和TRANCATE区别 CREATE TABLE IF NOT EXISTS`test`( `id` INT(4) NOT NULL AUTO_INCREMENT, `col` VARCHAR(20) NOT NULL, PRIMARY KEY(`id`) )ENGINE=INNODB DEFAULT CHARSET=utf8 INSERT INTO `test`(`col`)VALUES('1'),('2'),('3') -- id会自增,不用写字段名进行插入 DELETE FROM `test` -- 不会影响自增 TRUNCATE TABLE `test` -- 自增会清零
delete删除结果:改变表---高级
TRANCATE删除效果:查看方式同上