目录
对数据库的操作
1.查看已经创建的数据库:show databases;
2.模糊查寻数据库:show databases like ‘information\_%’;
3.清除数据库:drop database if exists mydatabase;
4.创建数据库:create database mydatabases charset utf8;
5.查看数据库的字符集:
show variables like ‘character_set_database’
6.修改当前数据库的字符集:alter database mydata charset gbk;
7.进入一个指定的数据库:use mydatabase;
8.查看当前数据库中所包含的表:show tables;
对数据表的操作
1.创建表:create table [if not exists] 表名(
字段名字 数据类型,
字段名字 数据类型 -- 最后一行不需要逗号
)charset utf8 collate utf8_general_ci;
2.查看表结构:show create table student;
3.查看表中的字段信息:desc student;
4.修改表名:rename table 老表名 to 新表名
5.修改表选项:alter table 表名 表选项 = 值;--字符集和校对集
6.删除表:drop table student,teacher,class; --同时删除多个
7.插入字段:alter table student
add id int
first; -- first or after
8.修改字段:alter table student
modify number Char(10)
after id; -- 可以修改位置或者字段类型
9.重命名字段:alter table student
change gender sex varchar(10)
after id;
10.删除字段:alter table student drop name;
对表中数据的操作
1.插入数据:Insert into 表名(字段) values(属性表) , ( ), ( );
2.更新数据:Update 表名 set 字段 = 值 [where 条件];
3.查询数据:Select */字段列表 from 表名 where 条件;
4.删除数据:Delete from 表名 where 条件;
高级查询操作
1.group by: select sex, count(*), max(height), min(height),
avg(score), sum(score) from student group by
sex [asc|desc] having count(*) > 2;
-- count会统计每组相应的字段数量,值null的除外
-- asc|desc可以用于对分组后的最终所有结果进行排序
2.order by: select * from student order by 字段名 [asc, desc];
3.limit: select * from student limit n;
-- 限制为n条记录
select * from student limit 0, n;
-- 从第一条记录开始,显示n条
4. where, group by, having, order by, limit -- 五子句的先后顺序
# where与having的区别:WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数,因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。
5. 内连接:select s.* , c.name from student as s inner join class as c on s.id = c.id;
-- 左表中的每一条记录与右表中的每一条记录比较,相同才会保留结果
6. 外连接:select s.* , c.name from student as s left/right join class as c on s.id = c.id;
-- left, 以左表为主,取出左表中的所有记录,将右表与之匹配,若成功则保留,不成功,右表字段置空
7. 自然连接,是指自动匹配同名字段,最终合并同名字段(去掉新合成的表中的重复字段)
视图操作
1.创建视图:create view 视图名字 as select sql语句;
-- 语句可以为普通查询,连接查询,联合查询,子查询
2.查看视图:与查看表的sql语句一摸一样
3.修改视图:alter view 视图名字 as select sql语句;
4.删除视图:drop view 视图;
5.插入,更新,删除的sql语句与表一致, 不过多表视图不能删除和插入数据
6.视图算法:create algorithm = [undefined/ temptable/ merge]
view 视图名字 as select 语句;
事务操作
1.回滚点操作:
start transaction; -- 开启事务
update my_count set money = money +10000 where id = 1;
savepoint sp1; -- 设置回滚点
update my_count set money = money -10000 where id = 3;
rollback to sp1; -- 回滚到回滚点sp1
update my_count set money = money -10000 where id = 2;
commit; -- 提交结果
触发器
1.创建触发器:
delimiter $$ -- 自定义结束符号
create trigger mytrigger after insert on orders for each row
-- 触发器名字,触发时间,事件类型
Begin
update goods set num = num - new.num where id = new.id;
End -- new代表插入到orders中的记录本身
$$
delimiter ;
-- 当orders中插入新数据时,更新表goods中的num
2.查看当前数据库的触发器:show triggers [like ‘my%’];
3.查看触发器的创建:show create trigger 触发器名字;
4.查看系统中所有的触发器:
select * from information_schema.triggers\G
5.删除触发器:drop trigger 触发器名字;
函数
1.if语句:
dilimiter #
create trigger mytrigger after insert on orders for each row
begin
select num from goods where id = new.id into @x;
-- 这里只能用into赋值
if @a >=new.num then
update goods set num = num - new.num where id = new.id;
else
insert into xxx values(xxx); -- 当不满足条件时阻止更新
end if
end
#
delimiter ;
2.while循环:
mywhile:while @i < int_1 do
set @res = @res +@i;
set @i = @i + 1;
leave/iterate 循环名字;
end while ;
-- while循环一般用于函数之中
3.系统函数:select char_length(@a); -- a的字符长度
select length(@a); -- a的字节长度
-- 任何函数都有返回值,函数的调用直接用select
4.自定义函数:
delimiter #
create function display1(int_1 int) returns int
begin
set @i = 1;
set @res = 0;
while @i <= int_1 do
set @res = @res +@i;
set @i = @i + 1;
end while;
return @res;
end
#
delimiter ;
5.查看所有函数:show function status [like ‘pattern’];
-- 查询当前数据库中的函数
6.查看指定函数的结构:show create function 函数名;
7.删除函数:drop function 函数名;-- 不用带括号
存储过程
1.创建存储过程:
create procedure 过程名字[参数列表]
-- 参数列表:in a1 int, out a2 int, inout a3 int
begin
-- 过程体
end
2.查看所有存储过程:show procedure status [like ‘pro%’];
3.查看指定存储过程结构:show create prcedure 过程名;
4.调用过程:call myprocedure(id int);
-- 过程没有返回值,所以不能使用select
5.删除过程:drop procedure 过程名;
问题
1. 函数与存储过程的区别是什么?