Chinaunix首页 | 论坛 | 博客
  • 博客访问: 405186
  • 博文数量: 112
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 800
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-29 13:41
文章分类

全部博文(112)

文章存档

2020年(1)

2018年(10)

2017年(27)

2016年(18)

2015年(31)

2014年(25)

分类: Mysql/postgreSQL

2014-10-28 18:45:00

     linux篇:
一、 启动和关闭mysql服务
  方法1、通过命令行方式启动和关闭
           启动:/usr/bin/mysqld_safe &
                   [1] 30986         
           关闭:mysqladmin -uroot shutdown
                    STOPPING server from pid file /var/lib/mysql/localhost.localdomain.pid
                     070820 04:36:30 mysqld ended
                     [1]+ Done ./mysqld_safe
   方法2、通过服务的方式启动和关闭(适用于RPM包安装方式)
            启动:service mysql start
                   Starting MySQL[ OK ]
            重启:service mysql restart
                    Shutting down MySQL..[ OK ]
                      Starting MySQL[ O K ]
           关闭:service mysql stop
                    Shutting down MySQL..STOPPING server from pid file /var/lib/mysql/360-GAME.pid
141028 17:04:21  mysqld ended                                                           [  确定  ]
[1]+  Done                    /usr/bin/mysqld_safe

二、SQL(Structured Query Language 结构化查询语言,它是一种对关系数据库中的数据进行定义和操作的语言方法)分类
SQL 语句可以划分为以下6个类别。
DQL(Data Query Language 数据查询语言:用以从表中获得数据,确定数据怎样在应用程序给出。常用保留字有SELECT、WHERE、ORDER BY、GROUP BY、HAVING;
 select user,host,password from mysql.user order by user asc;
 DDL(Data Definition Languages)语言:数据定义语言,这些语句定义了不同的数据段、
数据库、表、列、索引等数据库对象的定义。常用的语句保留字主要包括create、drop、alter
等。
 DML(Data Manipulation Language)语言:数据操作语言,用于添加、删除、更新和查
询数据库记录,并检查数据完整性,常用的语句保留字主要包括insert、delete、udpate 和
select 等。
TPL(事物处理语言):它的语句能确保被DML语句影响的表的所有行及时得以更新。关键字主要包括BEGIN、TRANSACTION、COMMIT、ROLLBACK。
 DCL(Data Control Language)语言:数据控制语言,用于控制不同数据段直接的许可和
访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的
语句关键字包括grant、revoke 等。
CCL(指针控制语言):常用保留字DECLARE CURSOR、FETCH INTO、UPDATE WHERE CURRENT用于对一个或多个表单独行操作。

SQL语句最常见的三类:
1、DDL语句
    创建数据库:create database dbname; #默认latin1字符集;
                      create database dbname1 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;  #创建gbk字符集的数据库;
                      create database dbname2 CHARACTER SET utf8 COLLATE utf8_general_ci;  #创建utp8字符集的数据库;
                       show create database dbname\G;   #查看建库语句;
    查看数据库:show databases;
    选择数据库:use dbname;
    查看表:show tables;
    删除数据库:drop database dbname;
    创建表:create table tabname(column_name_1 column_type_1 constraints,......column_name_n column_type_n constraints);
               例:create table emp(ename varchar(10),hiredate date,sal decimal(10,2),deptno int(2));    
    查看表定义:desc tabname;
    查看更全面的表定义信息:show create table tabname \G;
    删除表:drop table tabname;
    修改表:alter table tablename modify [column] column_definition [first | after col_name];
               例:alter table emp modify ename varchar(20);
    
添加表字段:alter table tablename add [column] column_definition [first | after col_name];
             
 例:alter table emp add column age int(3);或 alter table emp add age int(3);
    删除表字段:alter table tabname drop [column] col_name;
               例:alter table emp drop column age;或alter table emp drop age;
   
字段改名:alter table tabname change [column] old_col_name column_definition [first|after col_name];
               例:alter table emp change age age1 int(4);
   
添加新字段并排序:alter table emp add birth date after ename;  #将字段birth排在字段ename后面;
    修改字段的顺序:alter table emp modify age int(3) first;  #将字段age排在字段首位;           

     修改表名:alter table tabname rename[to]new_tabname;
                例:alter table emp rename emp1;
2、DML语句
     2.1、插入记录:insert into tablename (field1,......fieldn) values(values1,......valuesn);
                       例:insert into emp (ename,hiredate,sal,deptno) values('zzx1','2000-01-01','2000',1);
                           或 insert into emp values('lisa','2003-02-01','3000',2); #也可以不用指定字段名称,但是values 后面的顺序应该和字段的排列顺序一致;
             
查看记录:select * from tabname;
             插入多个记录:insert into tabname (field1,......fieldn) values(record1_value1,......record1_valuesn),(recordn_valuen,......recordn_valuesn);
                        例:insert into dept values(5,'dept5'),(6,'dept6');

     
2.2、更新记录:update tabname set field1=value1,......fieldn=valuen[where condition];
                        例:update emp set sal=4000 where ename='lisa';
               
更新多个表中数据:update t1,......tn set t1.field1=expr1,tn.fieldn=exprn [where condition];
                        例:update emp a,dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno; #表a字段sal等于字段a数据乘以表b字段deptno,表b字段deptname                               等于表a字段name,如果表a字段deptno等于表b字段deptno的话;
      
2.3、删除记录:delete from tabname [where condition];
                        例:delete from emp where ename='dony';

               
删除多个记录:delete t1,......tn from t1,......tn [where condition];
                        例:delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3; #删除表emp和dept中字段deptno相同并且deptno=3的记录;
       
2.4、查询记录:select * from tabname [where condition];
                        例:select * from tabname;

                               select ename,hiredate,sal,deptno from emp; #查询指定字段的记录;
               
2.4.1、查询不重复的记录:select distinct 字段 from emp;
                        例:select distinct deptno from emp; #显示去掉重复记录;
                        例:select distinct age from pro_file;  #显示去掉重复记录的字段age;

                        例:select distinct deptno from pro_file where age='29'; #显示匹配字段age等于29条件的deptno字段去重;
                 
2.4.2、条件查询:(where 后面的条件是一个字段‘=’比较,除了‘=’之外,还可以使用>,<,>=,<=,!=)
                         例:select * from emp where deptno=1; #显示匹配字段deptno等于1的条件的所有记录;
                                select * from emp where deptno=1 and sal<3000; #显示匹配字段deptno等于1并且字段sal小于3000的所有记
                  2.4.3、排序和限制:select * from tabname [where condition] [order by field1 [desc|asc],......fieldn[desc|asc]];
                                              #desc和asc是排序顺序关键字,desc表示按照字段进行降序排序,asc表示升序(默认),order by后面可跟多个排序字                                                     段,并且每个字段可以有不同的排序顺序;

                          例:select * from emp order by sal; #显示字段sal升序排序;
                                select * from emp order by deptno,sal desc; #字段deptno升序排序,如果deptno相等字段sal降序排序;
                                               
 select * from emp order by sal [limit offset_start,row_count];
                         例:select * from emp order by sal limit 3; #显示表emp中按照sal排序后的前3条记录;
                                 select * from emp order by sal limit 1,3; #显示表emp中按照sal排序后从第二条记录开始,显示3条记录;
                  2.4.4、聚合:select [field1,......fieldn] fun_name from tabname [where where_contition] [group by field1,......fieldn [with rollup]] [having                                          where_contition];
                                      #fun_name 表示要做的聚合操作(聚合函数),常用的sum(求和)、count(*)(记录数)、max(最大值)、min(最小值);
                                     #group by 关键字表示要进行分类聚合的字段,如按照部门分类统计员工数量;
                                      #with rollup  可选语法,表名是否对分类聚合后的结果进行再汇总;
                                     #having  关键字表示对分类后的结果再进行条件的过滤。
                              例:select count(1) from emp; #统计公司的总人数;
                                    select deptno,count(1) from emp group by deptno; #统计各个部门的人数;
                                     select deptno,count(1) from emp group by deptno with rollup; #统计各部门人数,又要统计总人数;
                                      select deptno,count(1) from emp group by deptno having count(1)>1; #统计部门人数大于1人的;
                                       select sum(sal),max(sal),min(sal) from emp;  #统计公司所有员工薪水总额、最高和最低;
               
2.4.5、表连接(分为内链接和外连接):当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。
                                            #左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
                                           #右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录
                              例:select ename,deptname from emp,dept where emp.deptno=dept.deptno;# 查看表emp和dept中deptno相等的ename字段和                                            deptname字段内容(仅包含合法记录);
                                     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; #包含不合法记录;
              2.4.6、子查询:关键字包括in、not in、=、!=、exists、not exists 等;
                               例:select * from emp where deptno in(select deptno from dept); #先查询表dept中的deptno字段,如果与表emp中的deptno字段相同则显示;
                                      select * from emp where deptno = (select deptno from dept limit 1); 或
                                       select * from emp where deptno in(select deptno from dept);#如果子查询记录数唯一,还可以用=代替in
                                       select emp.* from emp ,dept where emp.deptno=dept.deptno;#子查询可以转化为表连接
               2.4.7、记录联合:union和union all区别是union all把结果集直接合并在一起,union是将union all后的结果进行一次distinct,去除重复记录后的结果; 
                                例:select deptno from emp union all select deptno from dept; #将emp和dept表中的部门编号的集合显示出来;
                                       select age,deptno from pro_file union all select age,deptno from xianmin;
                                        select deptno from emp union select deptno from dept; #将emp和dept表中部门编号去重复记录后显示;
3、DCL语句:DCL 语句主要是DBA 用来管理系统中的对象权限时所使用(grant、revoke);
                     例1:创建一个数据库用户dbuser,具有对minmin数据库中所有表的select/insert权限;
                            grant select,insert on minmin.* to 'dbuser'@'localhost' identified by '123456';#设置用户dbuser在数据库minmin下所有表都具有select,insert权限,并且登录密码为123456;
                              新用户登录:mysql -usxm -p123456;
                             alter table pro_file drop cc; #删除表pro_file中cc字段贴士没有alter权限;
                            ERROR 1142 (42000): ALTER command denied to user 'sxm'@'localhost' for table 'pro_file';
                            insert into xianmin values('Jack','29','1995-10-10','7','7700'); #向表xianmin中插入记录;
                     例2:收回数据库用户sxm的insert权限,只能对数据进行select操作;
                              mysql -uroot  #用root登录;
                               revoke insert on minmin.* from 'sxm'@'localhost'; #收回用户sxm对数据库minmin下所有表的insert权限;
                               重新登录:mysql -usxm -p123456;
                               insert into xianmin values('Wolf','39','1976-9-9','8','9900');
                               ERROR 1142 (42000): INSERT command denied to user 'sxm'@'localhost' for table 'xianmin' #提示没有insert权限;
4、帮助的使用:
     
4.1、按照层次看帮助:?或help ,”? contents“命令来显示所有可供查询的分类;
                                                    ”? data types“查看mysql中都支持哪些数据类型;
                                                     "? int" 查看int类型的具体介绍;
      4.2、快速查阅帮助:快速查阅某项语法时,可使用关键字进行快速查询;
                                   例:? show;   #知道show命令都能看些什么东西;
                                         ? create table; #参看create table的语法;
      4.3、常用网络资源                                                                          
                                 mysql官网:http://dev.mysql.com/downloads/    #可下载各个版本的mysql以及相关客户端开发工具等;    
                                  mysql数据库及工具的在线手册:http://dev.mysql.com/doc/
                                  mysql已发布bug列表,或者向mysql提交bug:
                                  mysql发布的最新消息:。



                                          
          
 


















              
     
阅读(1119) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~