MySQL 开发篇

这几天身体不适,更新较慢,此片名为开发篇,旨在开发中会用到的一些SQL语句做介绍。可以查看SQL深入浅出这本书,感觉讲的还可以,我做了十几页笔记,下面基本是我做的一些笔记,可能时间仓促,如有不足请指正:

1.MySQL数据类型

   整数,tinyint 1,smallint 2, mediumint 3,int 4, integer 4, bigint 8。数字表字节数

   浮点数  float 4,double 8

   定点数 decimal (M,D)  M为精度,D标度,小数点后面的位数 默认为(10,0)(5,2)表示范围是 999.99,整数部分加起来不大于M-D;

   日期  year  , date  , time  , datetime , timestamp ;后两个是日期和时间

   字符串 char     varchar ;     tinytext    text   mediumtext  longtext   ;  enum (多)  set(单) 散列值;

   二进制   binary    varbinary  ;  bit(M) m<= 64  ;   tinyblob     blob    mediumblob   longblob (图片) ;


2.建库

    create database xxx;

    show databases;

    drop database xxx;



3.建表

   之前先指明所用的数据库,use 数据库名;

    create table 表名 (属性名  数据类型【约束条件】,

                                      ……

                                    属性名  数据类型【约束条件】);

    drop table 表名;

   约束条件:primary key,foreign key ,nnot null, unique , auto_increment,default

   多主键:primary key(xxx,yyy);

   外键语法:constraint 外键名 foreign key (属性名1)  references  表名(属性名1);

   desc 表名;  查看表结构,也可验证是否存在表。


4.修改

   alter table [old_name]  rename  [new_name];

   增加字段  alter table 表名 add 属性名  属性类型 [first|after 属性名];

   删除字段  alter table 表名 drop 属性名;

   修改字段类型  alter table  表名  modify 属性名  属性值;

   修改字段名字与类型    alter table 表名  change 旧属性名 新属性名 新数据类型;

   修改字段顺序  alter table 表名 modify 属性名1 数据类型 first|after 属性名2;


5.插入

   insert into 表名 [可插入的属性名] values (属性值1,属性值2...);


6.更新

   update 表名 set field1=value1,field2=value2....


7.删除记录

   delete from 表名 [where ....]


8.查询

  不重复记录 distinct

     select distinct 属性名 from 表名;


  条件查询

     where 后加 =  >  <  >=   <=   !=


  排序,限制

      order by   desc 下降   asc 上升   [limit offset_start(默认为0),row_count]


   聚合

        sum ,  count  ,  max  ,  min

        group by  需要聚合的属性名

        with rollup  是否对分类的聚合结果再汇总

        having 分类后的结果进行再过滤

       select deptno,count(1) from emp group by deptno; 只统计部分的人数

       select deptno,count(1) from emp group by deptno with rollup; 统计部分还有总人数


   表连接语句

       内连接:两张表中相互匹配的记录

       外连接:两张表中不匹配的记录   这里又分  左连接  与 右连接

                   左连接:包含左边表中的所有记录,即使右边没有匹配的

                   右连接:与左连接相反,一般只固定一种

       内连:select ename,deptname from emp,dept where emp.deptno = dept.deptno

       左连:select ename,deptname from emp           left join        dept     on  emp.deptno = dept.deptno  下面的右连与此句效果相同

       右连:select ename,deptname from dept           right join      emp     on  dept.deptno = emp.deptno


    子查询

          子查询关键字(  in ,   not in ,  = ,  !=  ,  exist ,not exist  等)

           select  *  from emp   where  deptno  in (select deptno from  dept);

          如果子查询记录数唯一,用 =   代替 in

           select  *  from emp where deptno =(select deptno from  dept limit 1);


     记录联合  union  , union all

           select deptno from emp union select deptno from dept;

            union是将 union all 结果去除重复,相当于进行了一次distinct。

   

      创建数据库用户z1,并具有对myself数据库所有表的select /insert 权限   (下面语句是有问题的,还没来得及找到相关解答,我在root用户下执行这个命令的时候 默认赋予了全部权限)

       grant select,insert   on    myself.*  to  'z1'@'localhost' identify by '123'

       收回权限   revoke insert on myself.* from 'z1'@'localhost';

       查看用户权限   show grants for 'z1'@'locahost';

       一般创建的用户记录会存在mysql.user的表里,可以去查到相关记录,但是密码没法明文看到,这涉及到mysql自带的password函数加密。


      ?  contents 寻求帮助


下面还有一些索引,视图,存储过程与函数,光标,触发器,事务控制与锁定语句等相关数据库对象,后期更新。

    

你可能感兴趣的:(mysql)