MySql -基础学习3 - DML语言
数据库的意义:数据存储,数据管理
DML语言,数据操作语言
- insert - 插入
- update - 修改
- delete - 删除
1.插入
-- 插入语句 -- insert into 表名(字段1,字段2,字段3) values(值1,值2,值3) INSERT INTO `grade`(`gradeid`,`gradename`) VALUES(1,'大二') -- 如果主键设置了自增的话,我们可以不用管,如果主键没有自增,就必须在插入时带上主键 -- 一般写插入语句,我们一定要数据和字段一一对应 -- 插入多个字段 INSERT INTO `stdent`(`name`,`paw`) VALUES('马明','mdming'), ('周杰伦','mdming'), ('张学友','mdming'), ('郭富城','mdming')
-- 无name的插入,要把表中所有的数据 一 一 对应
INSERT INTO `stdent1` VALUES(9,'黎明','liming','男','2002-11-04','重庆',9)
对于有默认值的字段,我们在插入的时候可以使用default占位,
也就是: insert into 表名 (字段,字段,字段) values(值1,default)
插入语句公式:
insert into 表名(字段1,字段2....) values(值1,值2....)
注意事项:
- 字段和字段之间要用逗号隔开,
- 字段是可以省略的,但是后面的值要一 一对应,连自增的主键都要有对应
- 可以同时插入多条数据,values 后面的值,括号都要使用逗号隔开 : ( ) , ( ) , ( )
2.修改
-- 修改数据表的字段值 UPDATE `stdent1` SET `name`='马明' WHERE id=9 -- 不指定的话会把表中所有元素改动 UPDATE `stdent1` SET `name`='周杰伦' -- 修改多个属性 UPDATE `stdent1` SET `name`='张学友',`addreess`='香港' WHERE id=1 -- 运算符测试 UPDATE `stdent1` SET `name`='郭富城',`addreess`='香港' WHERE id<>1 UPDATE `stdent1` SET `sex`='女',`addreess`='香港' WHERE id BETWEEN 1 AND 9 -- 定位数据修改 UPDATE `stdent1` SET `gradeid`=1 WHERE `sex`='女' AND `name`='郭富城' -- 修改value的值为变量 UPDATE `stdent1` SET `birthday`=CURRENT_TIME WHERE id=1
公式:
update 表名 set 字段=要修改的值 where 条件
注意:
- 字段名尽量带上 ` `
- 条件,筛选的条件要写上,如果没有筛选的条件,就会默认更改所有的数据
- value,可以是一个具体的值也可以是变量
- 多个设置属性之间应该使用英文逗号隔开 ,
操作符 会返回布尔值:false true
操作符 | 含义 | 范围 | 结果 |
= |
等于 | 5=6 | false(不执行) |
<>或!= | 不等于 | 5<>6 | true(执行) |
> | |||
< | |||
<= | |||
>= | |||
between ....and.... | 在某个范围内 | [2,5] | true |
and | A 和 B && | ||
or | A 或 B |
3.删除
delete:命令
-- 删除指定数据 DELETE FROM `stdent1` WHERE id=1 -- 删除一个表中的所有数据 DELETE FROM `stdent1`
公式:
delete from 表名 where 条件
truncate:命令(专业删除数据表)
-- 删除一个表中的所有数据 TRUNCATE `stdent1`
delete 和truncate的区别
相同点:都可以删除数据
不同点:
truncate:重新设置自增列,计数器 归零,不会影响事务
拓展:(了解即可)
重启数据库后的结果:delete
innodb:自增列会从1开始(存在内存中,断电即失)
myisam:继续从上一个自增量开始(存在文件中,不会丢失)
二.数据库查询语言DQL(重点)
Data Query Language:数据查询语言
- 所有的数据查询语言都用它 Selsct
- 简单的查询,复杂的查询它都可以做
- 数据库最核心的语言
- 使用最频繁的语句
-- 通配符查询 SELECT * FROM `student` -- 查询字段 SELECT `name`,`id` FROM `student` -- 别名,给表取一个别名,可以给字段起别名,也可以给表取别名 SELECT `name` AS 名字,`id` AS 学号 FROM `student` AS stu -- 函数 拼接字符串 SELECT CONCAT('姓名:',`name`) AS 名字 FROM student
公式:
1.select 字段,..... from 表名
我们在查询的时候数据库字段名可能不太符合常规的表格显示,我们就可以使用 as 给字段或者表取一个别名
2.去重:distinct
作用:去除select查询出来的重复数据只显示一条
-- 去重,去掉重复数据 SELECT DISTINCT id FROM `student` -- 查看系统版本号(函数) SELECT VERSION() -- 用来计算(表达式) SELECT 100-7 AS 计算结果 -- 查询自增的步长(变量) SELECT @@auto_increment_increment -- 查询学生id并 + 1 SELECT id +1 AS 提升id后 FROM student
数据库中的表达式:文本值,列(字段),null,函数,计算公式,系统变量
select 表达式 from 表名
3.where 条件子句
作用::检索出符合条件的值
运算符 | 语法 | 描述 |
and && | a and b a&&b | 逻辑与 两个都为真结果为真 |
or || | a or b a||b | 逻辑或 一个为真,结果为真 |
not ! | not a !a | 逻辑非,真为假,假为真 |
-- 查询id在6~7之间 SELECT * FROM student WHERE id>=6 AND id<=7 -- 模糊查询(区间) SELECT * FROM student WHERE id BETWEEN 6 AND 7 -- 查询除了6 号id SELECT * FROM student WHERE NOT id=6
3.模糊查询:比较运算符
运算符 | 语法 | 描述 |
IS NULL | a is null | 如果字段为空,结果为真 |
IS NOT NULL | a is not null | 如果字段不为空,结果为真 |
BETWEEN | a between b and c | 若a在b和c之间,则结果为真 |
like | a like b | 如果a中的元素匹配上了b,结果为真 |
in | a in (a1,a2,a3....) | 如果a在a1,a2,a3中某一个相同,则为真 |
-- 查询姓马的同学 -- 通过 % (0~任意字符) 和_(一个字符) 结合like SELECT * FROM student WHERE `name` LIKE '马%' -- 查询姓氏后面只有一个字的 SELECT * FROM student WHERE `name` LIKE '马_' -- 查询名字后面有两个字的 SELECT * FROM student WHERE `name` LIKE '马__' -- 查询id 为5,6,7 的学生 SELECT * FROM student WHERE id IN (5,6,7) -- 查询地址为空的学生 SELECT * FROM student WHERE `addreess` IS NULL
注意:模糊查询最重要的使用是 LIKE 和 IN
like 可以和通配符结合使用 %(多个字符 ) _(一个字符)
in 后面必须跟实际的字段值