目录
数据库概述
SQL语句的分类:
DQL:查询语句,凡是select语句都是DQL。
DML:insert,delete,updata,对表当中的数据进行增删改查。
DDL:create,drp,alter,对表结构的增删改。
TCL:commit,rollback。
DCL:grant,revoke。
对sql脚本的理解:
以sql结尾的文件,被称为sql脚本。
直接使用source命令可以执行sql脚本。
基本命令
sql
mysql -uroot -p密码
show databases;
create database 数据库名;
use 数据库名;
show tables;
source 文件路径
drop database 数据库名;
select 数据库名();
select version();
select * from stu;
desc stu;
show create table stu;
查询命令
sql
select name from stu;
select name as na from stu;
select * from stu;
select name from stu where age > 20;
as关键字可以省略
模糊查询中,%表示任意多个字符,_表示任意一个字符
select max(name) from stu group by age;
group by:按照某个字段或者某些字段进行分组
having:是对分组之后的数据进行再次过滤
注意:
分组函数一般都会和group by联合使用
并且任何一个分组函数都是在group by语句执行结束后才会执行
当一条语句中有group by,select后面只能跟分组函数和参与分组的字段

sql
select distinct name fron stu;
select name from stu
where age between 20 and 50;
select * from stu order by age asc;
select * from stu order by age asc, name desc;
select * from stu limit 5;
select * from stu a inner join stu b on 条件;
select * from stu a left | right join stu b on 条件;
查询语句 union 查询语句
union可以去重,union all 不可以
子查询就是嵌套查询
函数
sql
1、所有的分组函数都是对某一组的数据进行操作的
2、如果计算数据中有null,那么结果一定是null
3、分组函数不能直接使用在where子句当中
count(*)和count(name),他们有什么区别?
count(*):统计总记录条数
count(字段):统计不为null的数据总条数
表的操作
sql
create table stu(
age int 约束,
[constraint 约束名] 约束(name)
);
desc stu;
alter table stu rename stu1;
alter table stu add age int;
alter table stu drop age;
alter table stu modify age int;
数据类型
int
bigint
float
char
varchar
date
create table t_student(
no bigint,
name varchar(255),
sex char(1),
classno varchar(255),
birth char(10)
);
增删改数据和表结构
sql
insert into stu(字段名) values(数据)
insert into stu(字段名) 查询语句
update stu set age = 20 where name = 'java';
delete from stu where age > 20;
约束
为了保证表中数据的合法性、有效性、完整性。
not null
unique
primary key
foreign key
check
事务
原子性:事务是最小的工作单元,不可再分。
一致性:事务必须保证多条DML语句同时成功或者同时失败。
隔离性:事务A与事务B之间具有隔离。
持久性:持久性说的是最终数据必须持久化到硬盘文件中,事务才算成功的结束。
索引
sql
create table stu(
属性名 数据类型,
index | key 索引名(字段名)
);
create index 索引名 on stu(name);
alter table stu add index | key 索引名(字段名)
唯一索引在index前面加unique
全文索引在index前面加fulltext
drop index 索引名 on 表名
视图
视图的特点:
视图的列可以用来不同的表,是表的抽象和在逻辑意义上建立的新关系。
视图是由实表产生的虚表。
视图的建立和删除不影响基本表。
对视图内容的增删改直接影响基本表。
当视图来自多个基本表时,不允许添加和删除数据。
可以将试图看作为一个表来执行查询语句。
sql
create view 试图名 as 查询语句;
drop view 视图名;
create or replace view 视图名 as 查询语句;
alter view 视图名 as 查询语句;
insert into 视图名(属性名...) values(数据...);
update 视图名 set 属性名 = 数据 条件;
delete from 视图名 条件;
触发器
sql
create trigger 触发器名
before | after insert | update | delete
on 表名 for each row
增删改语句;
drop trigger 触发器名;
存储过程和函数
区别:
存储过程:可以由0个返回值,也可以有多个返回值。
函数:有且仅有一个返回值。
好处:
提高代码重用性
简化操作
减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
存储过程:
一组预先编译好的sql语句的集合,理解成批处理语句。
参数列表包含三部分:
举例,in name varchar(20)
in,可以作为输入
out,可以作为输出,返回值
inout,即可以输入,又可以输出
sql
delimiter $
create procedure 存储过程名
begin
一组sql语句
end $
call 存储过程名();
declare 变量名 数据类型
set @名字 = 数据;
drop procedure 存储过程名
show create procedure 存储过程名;
drop function 函数名;
create procedure pro_4(score int)
begin
case
when score >= 90 && score <= 100 then select 'A';
when score >= 80 then select 'B';
when score >= 60 then select 'C';
else select 'D';
end case;
end$
create function fun_4(score int) returns char
begin
if score >= 90 and score <= 100 then return 'A';
elseif score >= 80 then return 'B';
elseif score >= 60 then return 'C';
else return 'D';
end if;
end $
三范式
第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分。
第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。
第三范式:建立在第二范式的基础之上,所有非主键字段直接依赖主键,不能产生传递依赖。