sql语句
分类
DDL
data definition language 数据库定义语言:定义数据库对象:数据库、表、列
关键字create、drop、alter
DML
data manipulation language 数据操作语言 对数据库中表数据进行增删改
关键字 insert delete update
DQL
data query language 数据查询语言 查询数据库中标的记录
关键字 select where、等
DCL
data control language 数据库控制语言 定义数据库的访问权限和安全级别
关键字 grant、revoke
操作数据库和表
crud
c:create
r:retrieve===select查询
u:update
d:delete
主要语句
create database 数据库名 character setutf8:创建数据库
create table 表名(
列名 数据类型 约束,
列名 数据类型 约束,
列名 数据类型 约束
) 创建表
还有其他操作不是最重要的省略
操作表中的数据 增删改【重点】
insert into 表名 set (列名1,列名2…)values (值1,值2)–添加列 一般是省略列名 直接values 多个值对
update 表名 set 列名=值1,列名2=值2… where 条件 --修改列中的数据
delete from 表名 where 条件
操作表中的数据 查询【重点】
查询基础知识
select * from 表名–查询表中所有的数据
select 列名,列名 from 表名–查询指定列名中的数据
select distinct 列名 from 表名 --去除重复的列名
select 列名1(±*/)列名2 from 表名–列名之间还可以进行加减乘除 前提是要都是int型
select 列名 As 名称 from 表名–起别名 as关键字可以省略不写
条件查询
关键字where
语法:where 条件
符号:列出几个不常见的:
<> 或 != ----不等于
between and 在一个范围之内
in 多选一
like 占位符 比如:%表示任意多个字符 _表示任意一个字符
is null is not null
and或&&
or或||
not或!
举例子:select * from student where age>25;
聚合函数
max、min、count、sum、avg
语法 函数名(字段名)
举例:select max(age) from student;
分组查询
关键字 group by
语法 group by 字段
举例 select max(age) from student where sex=‘男’ group by sex;
注意事项:分组过后一般查询的字段是聚合函数或者分组字段
排序查询
关键字 order by
语法order by 字段名 排序规则(asc,desc)
举例:select * from student order by age asc;–默认是asc升序 可以不写
分页查询
关键字 limit
语法 limit 当前页的起始索引 一页展示的行数
比如:一页展示三行
第一页 limit 0 3
第二页 limit 3 3
第三页 limit 6 3
这些关键字的顺序还是从上往下的 聚合函数写在前面除外。
约束
主键约束
作用:表中数据的唯一标识
特点:非空和唯一
关键字 primary key
可以是单列的主键约束 也可以是多列的主键约束
– 删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY;
– 建表后单独添加主键约束
ALTER TABLE 表名 MODIFY 列名 数据类型 PRIMARY KEY;
主键自增约束
不用手动添加数据 数据库自动设置值 注意:只能是int类型的字段才能添加这个自增约束
关键字:primary key auto_increment
其余同上 只是要求int类型
唯一约束
作用:某一字段的数据不重复
关键字 unique
– 删除唯一约束
ALTER TABLE student DROP INDEX age;
– 建表后单独添加唯一约束
ALTER TABLE student MODIFY age INT UNIQUE;
非空约束
作用:保证数据不为null
关键字 not null
外键约束
作用:当一个表和另外一个表由关联的时候,需要用到外键约束
掌握
建表添加外键时:
语法:constraint 外键名 foreign key (本表外键名) reference 主表名(主表主键列名)
了解:
– 在建表后添加外键语法
alter table 表名 add constraint 外键名称 foreign key(外键列) references 主表(主键);
删除外键
alter table 表名 drop foreign key 外键名称;
外键级联操作
理解:就是主表关联的数据发生改变是从表中的关联数据也随之改变 牵一发动全身
– 添加外键级联更新、级联删除
– ON UPDATE CASCADE 级联更新
– ON DELETE CASCADE 级联删除
ALTER TABLE 从表 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键列) REFERENCES 主表(主键列) ON UPDATE CASCADE ON DELETE CASCADE;
多表查询
内连接
理解:取两个表中共有的部分 分显示和隐式
就记一个隐式语法: select * from 表1,表2;
外连接
理解:可以取到一个表中的所有数据 另外一个表中有交集的数据,没有的数据就会取null
左外连接 表1 left outer join 表2 取左边全部数据
右边连接 表1 right outer join 表2 取右边全部数据
子查询
理解:一个查询语句嵌套一个查询语句
子查询的结果是单行单列
使用场景:子查询的结果是一行一列,可以将子查询的结果当做某一个字段的值,作为where子句的条件;
子查询的结果是多行单列
使用场景:子查询的结果是多行单列,可以将子查询的结果当做某一个字段的多个值,作为where子句的条件。
子查询的结果是多行多列
使用场景:子查询的结果是多行多列,可以将子查询的结果当做一个表来看待,并和其他表进行连接查询。
总结:子查询可以作为条件也可以作为虚拟表和其他表连接查询,如果是作为条件,那么子查询结果一定是单列的,如果子查询结果有多列,那么必须作为虚拟表和其他表连接查询。
自关联查询
概念
在同一张表中数据有关联性,我们可以把这张表当成多个表来查询。
视图
就是封装查询结果 虚拟表
创建视图:
create view 视图名称 (列名1,列名2)AS 查询语句
操作和表的操作差不多
数据库备份
见开篇图
存储存过程和存储函数
封装多个sql语句
创建存储过程
delimiter $
create procedure 存储过程名称(参数)
begin
sql语句
end $
delimiter ;
delimiter 的作用:首先sql语句会用;表示所有的语句执行结束 存储过程中会有多个;所有我们可以用delimiter将结束标志修改为其他的 然后在最后换回常用的;
参数可以为
in :输入
out:输出
inout :既可以输入也可以输出
if语句的语法
IF 判断条件 THEN 条件满足需要执行的语句;
ELSEIF 判断条件 THEN 条件满足需要执行的语句;
...
ELSE 其他情况下需要执行的语句;
END IF;
while语句的语法
初始化语句;
WHILE 条件判断语句 DO
循环体语句;
条件控制语句;
END WHILE;
调用存储过程
call 存储过程名称(参数)
存储函数
创建存储函数
DELIMITER $
CREATE FUNCTION 函数名称(参数列表) RETURNS 返回值类型
BEGIN
SQL语句列表;
RETURN结果;
END $
DELIMITER ;
存储过程和函数的区别
- 返回值不同
存储函数必须有一个且必须只有一个返回值,并且还要指定返回值的数值类型。存储过程可以有返回值,也可以没有返回值,甚至可以有多个返回值。 - 两者赋值的方式不同:
存储函数可以采用select …into …方式和set值得方式进行赋值,只能用return返回结果集。存储过程可以使用select的方式进行返回结果集。 - 使用方法不同:
函数可以直接用在sql语句当中,可以用来拓展标准的sql语句。存储过程,需要使用call进行单独调用,不可以嵌入sql语句当中。 - 函数中函数体的限制较多,不能使用显式或隐式方式打开transaction、commit、rollback、set autocommit=0等。但是存储过程可以使用几乎所有的sql语句。
触发器 【了解】开篇图里面相应的内容即可
事务 【重点】掌握开篇图中相应的内容!!!