分享

数据库命令

 金银宝100 2018-01-14
一、常用数据库语句:
1.查询系统中都存在哪些数据库:
  show databases;
2.创建数据库gaoxi:
  create database gaoxi default character set utf8;
3.选择要操作的数据库:
  use gaoxi;
4.查看使用的数据库中创建的所有数据表:
  show tables;
5.删除数据库:
  drop database gaoxi;
6.在数据库中创建一张表的基本语法:
  create table tablename(column_name_1  column_type_1 constraints,....,column_name_n  column_type_n constraints);
  其中:column_name是列的名字,column_type是列的数据类型;
7.查看表的定义:
  desc tablename;
8.查看创建表的SQL:
  show create table tablename \G;
9.删除表:
  drop table tablename;
10.修改表:
 (1)修改表类型:
   alter table tablename modify [column] column_definition [first | after col_name]
  譬如:alter table emp modify ename varchar(20);
 (2)增加表字段:
   alter table tablename add [column] column_definition [first |after col_name];
  譬如:alter table emp add column age int(3);
 (3)删除表字段:
   alter table tablename drop [column] col_name;
  譬如:alter table emp drop column age;
 (4)字段改名:
   alter table tablename change [column] old_col_name column _definition [first | after col_name];
  譬如:alter table emp change age age1 int(4);
 (5)修改字段排列顺序:
   字段增加和修改语法(add/change/modify)中都有一个可选项first|after column_name,可以用来修改字段在表中的位置,默认增加的新字段是加在表的最后,而修改默认位置不变。
   譬如:a.将新增的字段birth date加在ename之后:
     alter table emp add birth date after ename;
             b.修改字段age,将它放在最前面:
     alter table emp change age1 age int(3) first;
  (6)更改表名,语法如下:
        alter table tablename rename [to] new_tablename;
     譬如:将表emp改名为emp1
        alter table emp rename to emp1;
11.DML语句
 (1)同时更新多个表中的数据:
   update t1,t2...tn  set t1.field1=expr1,...tn.fieldn=exprn;
 (2)删除记录:
   a.delete from tablename [where condition];
   b.一次删除多个表中的数据:
      delete t1,t2...tn from t1,t2...tn [where condition];
   如果from后面的表名用别名,则delete后面也要相应的别名。
     delete a,b from emp a,dept b [where condition];
 (3)查询语句:
    a.查询不重复的记录
     譬如:select distinct deptno from emp;
    b.排序和限制
     取出按某个字段进行排序后的记录结果集,需用到数据库的排序操作,用order by来实现。
     1)desc按照字段的降序进行排序,asc按照字段的升序进行排序
    譬如:对于deptno相同的两条记录,按照工资由高到低排序:
       select *from emp order by depnto,sal desc; 
     2)对于排序后的记录只需要显示一部分,用到limit关键字
       select  .....[limit offset_start,row_count];  
     offset_start:记录的起始偏移量,默认是从0开始
      row_count:显示的行数
     譬如:显示emp表中按照sal排序后从第二条记录开始,显示3条记录:
       select *from emp order by sal limit 1,3;
   注意:limit和order by经常一起配合使用来进行记录的分页显示。
     c.聚合函数的使用
        select [field1,field2...fieldn] fun_name from tablename 
        [where wher_contition]
        [group by field1,field2...fieldn]
        [with rollup]
        [having where_contition]
      参数说明:
         fun_name:要做的聚合操作,常用的有sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)。
         group by:要进行分类聚合的字段,比如要按照部门分类统计员工数,部门就应该写在 group by后面。
         with rollup:可选语法,表明是否对分类聚合后的结果进行再汇总。
         having:表示对分类后的结果再进行条件的过滤。
   注意:
         having和where的区别:
           having是对聚合后的结果进行条件的过滤,where是在聚合前就对记录进行过滤,如果逻辑允许,尽可能用where先过滤记录,结果集会减小对聚合的
         效率会大大的提高,最后再根据逻辑看是否用having进行再过滤。
    譬如:
      1)要emp表中统计公司的总人数:select count(*) from emp;
      2) 统计各个部门的人数:select deptno,count(*) from emp group by depnto;
      3)既要统计各部门人数也要统计总人数:select deptno,count(1) from emp group by deptno with rollup;
      4)统计人数大于1人的部门:select deptno,count(1) from emp group by deptno having count(*)>1;
      5)统计公司所有员工的薪水总额、最高和最低薪水:select sum(sal),max(sal),min(sal) from emp;
 
   (4)表连接
     分为内连接和外连接,它们之间的最主要区别是内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。
   譬如:
      查询出所有雇员的名字和所在部门的名称:
        select e.ename,d.deptname from emp e,dept d where e.deptno=d.deptno;
    外连接分为左连接和右连接,具体定义:
        左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
     譬如:查询emp中所有用户名和所在部门的名称:
        (左连接) select e.ename,d.deptname from emp e left join dept d on e.deptno=d.deptno;
        (右连接) select e.ename,d.deptname from emp e right join dept d on e.deptno=d.deptno;
    (5)子查询
         用于子查询的关键字主要包括:in、not in、=、 !=、exists、not exists等
      譬如:
        a.查询emp表中所有部门在dept表中的所有记录
           select *from emp where deptno in(select distinct deptno from dept);
      子查询可以转化为表连接,例如:
           select emp.* from emp ,dept where emp.deptno=dept.deptno;
   注意:子查询和表连接之间转换主要应用在两个方面。
     a.MySQL4.1以前的版本不支持子查询,需要用表连接来实现子查询的功能
     b.表连接在很多情况下用于优化子查询。
  
   (6)记录联合
      将两个表中的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来,
  需要用union和union all关键字来实现这样的功能,具体语法如下:
      select *from t1
      union | union all
      select *from t2
      .....
      union | union all
      select *from tn;
   说明:
      union和union all的主要区别是union all是把结果集直接合并在一起,而
    union是将union all后的结果进行一次distinct,去除重复后的结果。

12.DCL语句
     主要是DBA用来管理系统中的对象权限时使用。
     取消用户root的insert权限:
       revoke insert on 库名.* from 'root' @ 'localhost';

注意:MySQL查看帮助
   使用'? contents' 命令来显示所有可供查询的分类;
          '? data types'命令来查看MySQL支持的数据类型;
  
二、数值类型:
  1.整数类型:tinyint/smallint/mediumint/int(Integer)/bigint(按取值范围)
      整数类型中属性:auto_increment:值一般从1开始
  2. 浮点数类型:float/double 
  3.定点数型:dec(M,D),decimal(M,D):有效取值范围由M和D决定
  4.位类型:bit(M):bit(1)最小值,bit(64)最大值
  5.日期时间类型:
     date:用来表示年月日
     datetime:用来表示年月日时分秒
     timestamp:需要经常插入或者更新日期为当前系统时间,返回值类型显示为"YYYY-MM-DD HH:MM:SS"格式的字符串
     time:用来表示时分秒
     year:只显示年份
  6.字符串类型:
      char(M):M为0-255之间的整数
      varchar(M):M为0-65535之间的整数
      tinyblob/blob/mediumblob/longblob/tinytext/text/mediumtext/longtext/varbinary(M)/binary(M)
  7.枚举类型:enum     
     它的值需要在创建表时通过枚举方式显示指定
   譬如:create table a(gender enum('M','F'));
      enum类型是忽略大小写的,对'M','f'在存储的时候将它转换成大写,
    对于插入值不在enum指定范围时,会插入枚举中的第一个值。enum类型
    只允许从值集合中选去单个值,而不能一次取多个值。
  8.set类型
     也是一个字符串对象,和enum的最主要区别在于set类型可以选取多个成员,而enum只能选一个。
  譬如:
     create table t(col set('a','b','c','d'));
     insert into t values ('a,b'),('a,b,d'),('a');
   注意:
     set类型可以从允许值集合中选择任意1个或多个元素进行组合,所以对于输入的值只要是在允许值的组合范围内,
   对于超出允许值范围的值将不允许注入到设置的set类型中,而对于包含重复成员的集合只取一次。


     

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多