MySQL基础
1、安装
1)设置编码
2)设置密码
2、配置文件:my.ini、my.cnf
1)设置端口号
port=3306
2)设置编码
default-character-set=utf8
character-set-server=utf8
3)存储引擎
default-storage-engine=INNODB
4)最大连接数
max_connections=100
注意:重启mysql服务
3、登陆mysql数据库
mysql -h 主机地址 -u 用户名 -p密码
mysql -u 用户名 -p密码
mysql -u 用户名 -p
问题:"mysql"不是系统内部或外部命令....
解决:将mysql的bin目录配置到系统的path环境变量中
变量名:Path
变量值:adsfasdfasd;D:\mysql\bin
4、设置客户端窗口的编码
set names gbk;
5、查看mysql编码
show variables like 'character%';
6、查看现存的所有库
show databases;
7、进入库(使用库)
use 库名;
8、查看现存的所有表
show tables;
9、查看表结构
desc 表名;
10、建库
create database 库名;
create database 库名 character set=utf8;
11、删除库
drop database 库名;
12、建表
create table 表名
(
字段名 数据类型 约束,
字段名 数据类型 约束,
字段名 数据类型 约束
);
13、数据类型
int float char varchar text timestamp enum
14、约束
primary key
foreign key
not null
null
unique
default
auto_increment
15、修改表结构
1)修改表名
alter table 表名 rename to 新表名;
2)添加字段
alter table 表名 add column 字段名 数据类型 约束;
alter table 表名 add 字段名 数据类型 约束;
3)删除字段
alter table 表名 drop column 字段名;
alter table 表名 drop 字段名;
4)修改字段
alter table 表名 change 原字段名 新字段名 数据类型 约束;
16、删除表
drop table 表名;
17、添加记录
insert into 表名(字段...)values(值...);
18、修改记录
update 表名 set 字段=值,字段=值...;
update 表名 set 字段=值,字段=值... where 条件;
19、删除记录
delete from 表名;
delete from 表名 where 条件;
20、清空表
delete from 表名; 不恢复id 慢 可恢复 支持事务
truncate table 表名; 恢复id 快 不恢复 不支持事务
21、普通查询
select * from 表名;
select 字段,字段... from 表名;
22、条件查询
select * from 表名 where 条件;
23、排序
select * from 表名 order by 字段;#升序
select * from 表名 order by 字段 desc;#降序
select * from 表名 where 条件 order by 字段;
24、分组
select * from 表名 group by 字段;
25、聚合查询
select count(*) from 表名 where 条件;
select sum(字段) from 表名 where 条件;
select avg(字段) from 表名 where 条件;
select max(字段) from 表名 where 条件;
select min(字段) from 表名 where 条件;
26、分页查询
select * from 表名 limit 起始值,条数;
select * from 表名 where 条件 order by 字段 limit 起始值,条数;
27、模糊查询
select * from 表名 where 字段 like '%_内容';
通配符
%:任意长度的任意字符
_:任意一个字符
1)查询所有姓张的学生
select * from 学生表 where 姓名 like '张%';
2)查询所有姓张的学生,但名字必须是两个字
select * from 学生表 where 姓名 like '张_';
3)查询所有学生,但姓名中必须有"小"字
select * from 学生表 where 姓名 like '%小%';
多表查询
子查询(嵌套查询)
1)子查询出现where中,充当条件
select * from 表名 where 字段 in (select语句);
2)子查询出现在*中,充当字段
select 字段,字段,(select语句) from 表名;
例子:子查询出现在where中,充当条件
1、查询"国际新闻"下的所有新闻
select * from newsArticles
where typeId in (select typeId from newsTypes where typeName='国际新闻');
2、删除typeId=3的所有分类
delete from reviews where articleId in (select articleId from newsArticles where typeId=3);
delete from newsArticles where typeId=3;
delete from newsTypes where typeId=3;
例子:子查询出现在*位置,充当字段
歌手表:userId、userName、age....
演唱会表:id、userId、name、时间、地点...
查询结果:userId、userName、age...演唱会的次数
select
userId,
userName,
(select count(*) from 演唱会表 where 演.userId=歌.userId)
from 歌手表;
---------------
select
typeId,
typeName,
(select count(*) from newsArticles a where a.typeId=b.typeId) as newsCount
from newsTypes b;
内连接:将多张表的结果集,合为一个结果集(合并字段)
select * from 表1 inner join 表2 on 关联的字段相等;
select * from 表1,表2,表3... where 关联的字段相等;
外连接:将多张表的结果集,合为一个结果集(合并字段)
1、左外连接:以左表为主、右表为副
select * from 表1 left outer join 表2 on 关联的字段相等;
2、右外连接:以右表为主、左表为副
select * from 表1 right outer join 表2 on 关联的字段相等;
多表查询
1、子查询:显示的只是一张表中的数据(被动)
2、内连接:合并字段
3、外连接:不用
-----------------------------------------------------------
MySQL高级
1、视图
2、触发器
3、存储过程
4、T-SQL编程
5、索引
6、存储引擎
7、事务
8、备份与还原
-----------------------------------------------------------
视图View:简化查询语句
创建视图
create view 视图名
as
select语句;
create view myview
as
select articleId,typeName,title,content from newsArticles a,newsTypes b where a.typeId=b.typeId;
修改视图
alter view 视图名
as
select语句;
查看视图
1、查看当前库中现存的表
show tables;
2、information_schema库->views表
select table_schema,table_name from information_schema.views;
使用视图:把视图当表用
select * from 视图名 where 条件 order by 字段 limit 起始值,条数;
select * from myview;
select articleId,typeName,title from myview;
建议:只对视图执行查询操作
删除视图
1、删除视图所在的库
drop database 库名;
2、删除视图
drop view 视图名;
视图知识点
1、作用
2、创建、修改、查看、使用、删除
视图注意:
1、视图中只能存放select查询语句
2、建议只对视图执行查询操作
视图的使用场合
一个复杂的查询语句经常使用
-----------------------------------------------------------
触发器Trigger:数据库中的事件
作用:当用户对表进行增、删、改操作的同时,是否要执行其他操作
触发器的执行时间
before:当用户对表进行增、删、改之前,先调用触发器,后执行增、删、改操作
after:当用户对表进行增、删、改之前,先执行增、删、改操作,后调用触发器
触发器的类型
insert:当对表进行insert操作时,系统将自动调用触发器
update:当对表进行update操作时,系统将自动调用触发器
delete:当对表进行delete操作时,系统将自动调用触发器
修改mysql语句的定界符
delimiter 符号
创建触发器
delimiter //
drop trigger if exists 触发器名//
create trigger 触发器名
before|after insert|update|delete
on 表名
for each row
begin
sql语句;
sql语句;
sql语句;
end//
delimiter ;
删除触发器
1、删除触发器所在的库
2、删除触发器所施加的表
3、删除触发器
drop trigger 触发器名;
查看触发器:information_schema库->triggers表
select * from information_schema.triggers;
select trigger_schema,trigger_name from information_schema.triggers;
例子:修改bbsInfo表中的记录,触发器自动向userInfo添加一条记录
delimiter //
drop trigger if exists updateBbs//
create trigger updateBbs
after update
on bbsInfo
for each row
begin
insert into userInfo(userName,password,age)values('tom','111',30);
end//
delimiter ;
update bbsInfo set clickTimes=100 where bbsId=3;
例子:统计表功能
create table bumen
(
bmId int auto_increment primary key,
bmName varchar(20) not null
);
create table employee
(
empId int auto_increment primary key,
userName varchar(20) not null,
tel varchar(20) not null
);
create table tongji
(
bmCount int default 0,#记录部门总数
empCount int default 0#记录员工总数
);
insert into tongji values(0,0);
部门表添加记录的触发器
delimiter //
drop trigger if exists addBm//
create trigger addBm
after insert
on bumen
for each row
begin
update tongji set bmCount=bmCount+1;
end//
delimiter ;
部门表删除记录的触发器
delimiter //
drop trigger if exists delBm//
create trigger delBm
after delete
on bumen
for each row
begin
update tongji set bmCount=bmCount-1;
end//
delimiter ;
insert into bumen(bmName)values('开发部');
insert into bumen(bmName)values('测试部');
insert into bumen(bmName)values('市场部');
delete from bumen where bmId=3;
触发器知识点
1、作用
2、创建、查看、删除
触发器注意
1、一个触发器最多只能有一个类型
2、一个触发器只能监听一张表的操作
3、触发器由系统自动来调用
4、触发器没有参数、没有返回值
----------------------------------------------------------
存储过程Procedure:自定义函数
特点:
1、一次编写,多次调用
2、有参数
3、有返回值
创建存储过程
delimiter //
drop procedure if exists 存储过程名//
create procedure 存储过程名()
begin
sql语句;
sql语句;
sql语句;
end//
调用存储过程
call 存储过程名(值,值...);
删除存储过程
1、删除存储过程所在的库
2、删除存储过程
drop procedure 存储过程名;
查看存储过程:mysql库->proc表
select * from mysql.proc;
select db,name from mysql.proc;
例子一:查询bbsInfo表的记录
delimiter //
drop procedure if exists getBbsInfo//
create procedure getBbsInfo()
begin
select * from bbsInfo;
end//
delimiter ;
call getBbsInfo();
例子二:查询bbsInfo表的记录,但传bbsId参数
delimiter //
drop procedure if exists hello//
create procedure hello(id int)
begin
select * from bbsInfo where bbsId=id;
end//
delimiter ;
call hello(7);
例子:删除指定的新闻分类 typeId=3
delimiter //
drop procedure if exists delType//
create procedure delType(tid int)
begin
delete from reviews where articleId in (select articleId from newsArticles where typeId=tid);
delete from newsArticles where typeId=tid;
delete from newsTypes where typeId=tid;
end//
delimiter ;
call delType(4);
存储过程知识点
1、介绍、作用
2、创建、调用、删除、查看
3、参数
存储过程注意
1、一次编写,多次调用
2、有参数、有返回值
3、必须通过用户显式的来调用
存储过程的使用场合
实现网站上的一个功能,必须要执行多个sql语句
存储过程与触发器的区别?
1、存储过程是由用户来调用,触发器是由系统自动调用
2、存储过程有参数有返回值,触发器没有参数也没有返回值
------------------------------------------------------------
总结:
1、多表查询语句
2、视图View
3、触发器Trigger
4、存储过程Procedure