mysql基础知识笔记

1.数据库相关
创建数据库

create database 数据库名称;

查询数据库

show databases;

使用数据库

use 数据库名称

删除数据库

drop database 数据库名称

2.表相关
创建表

create table 表名(

字段名1 数据类型,

字段2 数据类型);

数据类型:int,bigint,char,varchar,data等

查询表

show tables;

改表结构
增加字段

alter table 表名 add 字段名 数据类型;

删除字段

alter table 表名 drop 字段名;

改字段

alter table 表名 change 旧字段名 新字段名 数据类型;

查询表结构

desc 表名;

删除表

drop table 表名;

3.数据相关
插入数据

inster into 表名(字段名1,字段名2)value(数据1,数据2),(第二条数据);

删除数据

delete from 表名 where 条件;

truncate test;快速删除表中数据

修改数据

update 表名 set 字段名 = 新数据 where 条件;

查询数据
普通查询

select 查询的字段 from 表名 where 条件;

包含和不包含

in 和 not in

select * from student where class in (1833,1835);  ==》查询班级为1833或1835的信息
select * from student where class not in (1833,1835);   ==》查询班级不是1833或1835的信息

在.....之间  

between的值包含自身
select * from student where age between 24 and 31;   ==》查询年龄在24-31之间的信息

分组查询

select 查询的字段 from 表名 where 条件 group by 分组的字段;

注意点:group by
1.分组函数 group by  只能和聚合函数一起使用,还有分组的字段
2.where后面可以接group by 但是group by后面不能接where
3.group by 前面加where是为了先过滤在分组,where条件中不能包含聚合函数 统计,求和.....
4.where后面接group by  是为了先过滤在分组,having是跟group by连在一起用的,放在group by的后面,此时having的作用是先分组在过滤

常用的聚合函数:
count(*) 统计
sum(math)  求和
avg(math)   求平均
max(math)   求最大值
min(math)  求最小值
distinct(math)   去重

模糊匹配

like ‘%_’

%查询零个或多个

_查询零个或一个

select * from student where name like "%ao%";-===》查询姓名中带有ao的信息
 select * from student where name like "xiaoli_";  ===》查询xiaoli_后面有一个字符的人名

 排序

order by

默认为升序,即和order by 用于排序的字段 asc;同一效果

order by xxx desc;为降序

子查询

子查询就是查询的嵌套,在一个查询中使用另一个查询作为条件

如emp为员工表,dept为部门表

-- 求财务部门最低工资的员工姓名;
SELECT name from emp where incoming = (SELECT max(emp.incoming) from emp join dept on emp.dept2 = dept.dept1 where dept_name = '财务');

连接
内连接

innoer join,join 两者有同样的效果

只统计表与表之间相同的部分,不统计不同部分

如一个表有5条数据,另一个相关的表有4条数据,只统计有关联的4条数据

1)普通内连接:

格式:select  * from   表1  inner  join  表2  on    表1.关联字段1=表2.关联字段2 ;

案例:select  * from   dept  inner  join  emp  on  dept.dept1=emp.dept2 ;

2)隐藏内连接

格式:select  * from   表1  , 表2   where  表1.关联字段1=表2.关联字段2 ;

案例:select   *  from  dept  ,emp  where  dept.dept1=emp.dept2

左连接

显示左表独有数据,不显示右表独有数据

格式:select  * from   表1  left   join  表2  on    表1.关联字段1=表2.关联字段2 ;

案例:select  *  from   dept  left join emp   on   dept.dept1=emp.dept2;

右连接

显示右表独有数据,不显示左表独有数据

格式:select  * from   表1   right   join  表2  on    表1.关联字段1=表2.关联字段2 ;

案例:select  *  from   dept    right    join emp   on   dept.dept1=emp.dept2;

全连接

union

合并两个或多个 SELECT 语句的结果,

select * from dept inner join emp on dept.dept1=emp.dept2
UNION
select * from dept left join emp on dept.dept1=emp.dept2 where name is null
UNION
select * from dept right join emp on dept.dept1=emp.dept2 where dept1 is null;

视图

视图就是一种虚拟表,它并不实际存储在物理数据库中,而是在我们用的时候临时生成

视图的优点

1、提高查询效率

数据库中的数据查询非常复杂,可以简化sql语句

2、安全

有些保密字段,可以通过创建视图限制用户对某些字段进行操作

3、简单

不需要关心后面对应的表结构

视图的缺点

1、性能差

把视图查询结果转换成对表的查询

2、修改限制

修改视图数据,必须把它转化为对基础表的修改

操作视图
创建一个视图

create view 视图名称 as(查询语句);

删除一个视图

drop view 视图名称

查询创建视图的语句

show create view 视图名;

查询视图内容

select * from 视图名

视图的特点

1、视图是由基础表产生的虚拟表

2、视图的创建不影响基础表

3、 删除视图不影响基础表

4、视图删除数据,基础表也同时删除数据(合表的表无法删除,单表可以删除)

5、基础表删除数据,视图也同时删除

6、视图不能修改表字段,不能对表字段删除
 

索引

索引是一种数据结构,一个索引在存储的表中的数据结构;索引是在表的字段上创建的;索引存储了一列值

索引作用

(1)保证数据记录的唯一性

(2)实现表与表之间的参照性

(3)减少排序和分组的时间(例如在使用order by ,group  by  查询语句中进行数据检索)
(4)可以使用索引快速访问数据库中指定信息

索引的缺点

(1)索引要占物理内存

(2)索引对表进行增删改查,索引要动态维护,降低数据的维护速度

索引的分类

(1)普通索引

index    简称        mul     最基本的索引,没有任何限制

(2)主键索引

primary key   简称 pri   是一种唯一索引,不能为空

(3)唯一索引

unique    简称  uni     是一种唯一索引,可为空,一个表中可以有多个唯一索引

外键

让一张表记录的数据不要太过于冗余,在数据库中对表的关系进行解耦,尽量让数据的单一化

外键作用

保持数据的一致性和完整性

mysql 的存储引擎

(1)MyISAM   默认引擎

(2)innodb    (外键需要用到innodb存储格式)

格式:

show   table  status  from   库名   where  name=表名

语句:

show   table  status  from  dcs where  name="student"

新建外键

建表时添加外键

父表

create table 表名(id int(5) primary key,name varchar(10))engine = innodb;

子表

create  table  s(sid int(10) PRIMARY key,sname varchar(20),CONSTRAINT 外键名  FOREIGN key(子表字段)  REFERENCES f(父表字段))ENGINE=INNODB ;

个人理解:两表都有主键,才能添加外键

或者通过修改表结构的方法添加外键

alter  table z add CONSTRAINT  wjm1  FOREIGN  key (zid) REFERENCES f(id) ;

删除外键

格式:

alter  table  表名 drop  FOREIGN  key  外键名;

语句:

alter  table  s drop  FOREIGN  key  wj;

外键特点

父表不存在的数据,子表无法插入,父表存在的数据,子表才能插入对应的数据

存在外键,无法直接删除父表的数据,要先删除子表的数据,才能删除父表

约束

即对表中某些字段添加的数据进行一定的约束

如非空 not null

主键 primary key

唯一 unique

默认值 default

自增 auto_increment

外键 foreign key

存储过程

存储过程是实现某个特点功能的sql语句的集合,编译后的存储过程会保存在数据中,通过存储过程的名称反复的调用执行。

存储过程的优点

(1)存储过程创建后,就可以反复的调用和使用,不需要重新写复杂的语句

(2)创建,修改存储过程不会对数据有任何的影响

(3)存储过程可以通过输入参数返回输出值

(4)通过存储过程中加入控制语句,可以加强sql语句的功能性和灵活性

(5)对于单个l语句增删改查,可以直接封装一个集合中,存储过程一旦创建就可以直接调用,且可可以重复调用

(6)单个sql语句每一次执行都需要对数据进行编译,而存储过程被创建只需要编译一次,后续即可调用

(7)创建的存储过程,可以重复进行调用,可以减少数据库开发人员的工作量

(8)防止sql 注入

存储过程操作 

格式:

delimiter //  #分隔符     符号 //
create PROCEDURE  存储名(  参数名:in   out   inout)
BEGIN   开始 
sql语句     执行语句
END   结束 

//   分隔符号

call 存储名(参数)  调用一个存储过程

案例:

撰写一个存储过程,求1+2+3+…x的值

delimiter//
drop PROCEDURE if EXISTS st9;
CREATE PROCEDURE st9(in a int)
begin 
DECLARE i,b int DEFAULT 0;
set a=a+1;
while(i<a) DO
set b=b+i;
set i=i+1;
end WHILE;
SELECT b;
end
//
call st9(10);

查看单个存储过程的详情

格式

show create procedure   存储过程;

案例:

show create procedure hz001;

查看所有已经建好的存储过程详情

格式:show    procedure   status 

查询指定数据库里创建的存储过程

格式:

show procedure status where db="数据库名"


案例:show procedure status where db="hz017"

带有in参数的存储

in表示输入数据

格式:

delimiter //
create PROCEDURE   存储名(in x int ) #in参数,是括号
BEGIN
sql语句
END

//

call 存储过程(入参)

带out  的参数(输出参数)

delimiter //
create PROCEDURE   存储名(out x int ) #in参数,是括号
BEGIN
sql语句
END

//

call 存储过程(@出参)

select @出参

用户变量

定义语法L

set     @ 变量名 

赋值的方法:

(1)方式一

set   @ 变量名:=值 或 set  @变量名=值;

select  @变量名:=值;

(2)方式二

通过查询结果为变量赋值:

select   字段   into     变量名     from  表名   where    条件

(3)

declare      声明变量

例如:

declare     i   int     default   0  ;

循环语句

三种:

(1)while  ......do  ......end  where

while 循环语句:

格式:

wile    条件  do

   sql语句

end   while  

 (2) loop     ......end  loop  

(3)  repeat.......until   ,,,,,end  repeat

判断语句
if  的单分支

if     条件  then

执行sql1

else 

执行sql2 

end  if  ;

if  多分支

在if  判断语句汇总,有几个判断分支if,就有几个结束语  end   if  ;

if  条件  1   then

  执行sql1

else  if    条件2  then

  执行sql2

else  if   条件3  then

 执行sql3

end  if ;

end  if ;

end  if;

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值