mysql语法总结

目录

对数据库的操作

对数据表的操作

对表中数据的操作

高级查询操作

视图操作

事务操作

触发器

函数

存储过程

问题


对数据库的操作

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. 函数与存储过程的区别是什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值