您的位置:首页 > 数据库 > MySQL

mysql的使用和sql语言的学习

2015-07-31 19:33 429 查看
   MySql的安装和卸载:

    windows

字符集的说明:

    Mysql安装的时候是 :

       windows是GBK  gb2312;

       Linux是utf8;

环境变量:

软盘和软驱:

    ab两个盘符一直没用是为软盘和软驱的纪念;

安装的文件的目录:

   bin:binary里面绝大部分是命令,可执行的二进制文件

Mysql的安装结构:

  bin

  data: 包含数据库的数据:表,视图,索引。。。

  my.ini:配置文件,mysql启动的时候读取配置文件

登陆数据库:

   >mysql -u userName -p [-h ip]

   >password:pwd

   mysql>

   注意: -u user

      -p password   

      -h hostname Mysql服务器的ip地址

       第二种>mysql -uuserName -ppassword [-hip]

数据库列数据类型:

   整数类型:

       bit(M)

       tinyint 1B

       int(M) 4B  默认显示十一位整数

   浮点数类型:

         float(M,D)   4B  单精度  

         double(M,D)     

         以上两个是浮点型小数

         decimal(M,D)   

        M除小数点之外的位数  D小数点后的位数

          decimal(7,3)  1234.567   numberic(M,D)

         decimal(4),表示整数   不用decimal(4,0)

   日期/时间类型:

       date  4B   支持范围:1000-01-01到9999-12-31

       datetime 8B   时间和日期的组合

       timestamp 4B   时间戳

       year

   字符串类型

        char(M)  定长  如果存放的数据字节数<=M  此时在内存中所占的空间还是M

               特点:可能浪费存储空间,速度,比如表示性别,四字成语,手机号,身份证号

        varchar(M)变长  vary(variable) character 如果存放的数据字节数N<=M,此时真正存放的空间大小为N+1/2的长度,

               特点:节省空间,速度慢

           M表示字节的长度

SQL:Structured Query Language(结构化查询语言)

  DDL:Data Defined Language(数据定义语言)

  DML:Data Manipution Language(数据操纵语言)

       CRUD(Create,Retrire/Read,Update,Delete)

       Insert

       Delete

       Update

       Select

  DCL:Data Control Language(数据控制语言)

       Grant(授予)、Deny(拒绝)、Revoke(撤销)

  DDL

       创建、修改、删除数据库

       在一个数据库中可以有很多数据对象,其中最常用的是数据表

       一个具体的数据库中,包含N个数据表,一个表,由列组成,且

    每一列必须指定存放的数据类型。表创建完成后,按照一行想表中插入数据

       创建表:

       create table tab_name

       (列名 类型  约束,

        列名  类型 约束,...)character set utf8;

       desc tableName;查看表的结构

       show tables;查看数据库中的所有表

    修改表;如果表中有数据就会错误

           alter table tabName add 列名 type; 在数据表中添加一个列

           alter table tabName modify 列名        修改后的类型;修改表中的一个列的数据类型

           alter table tabName drop 列名;       删除一个列

           alter table tabname change 原列名 新列名 type;     对列名的重命名

           alter table tabname rename to newTabName;    数据表的重命名

      注意:在实际应用当中,一般表建立之后,不会修改表的结构

    删除表:

       drop table tabName;既删除了表结构而且删除了表中的数据

    其他的使用:视图,索引,存储过程

   DML:管理数据库中的数据信息,增删改查

  mysql中不区分大小写,说的是关键字不区分大小写,一般情况下,关键字全部大写,数据是区分大小写的

insert:insert into TabName(列名,列,...列名) values(值1,值2,...值n);

         值必须与列名相对应;如果没有列出全部的列,其他没有对应的值,则这些列以NULL插入

         如果表中的所有列都要插入数据,可以在前面不用列出所有的列名,后面的值默认与创建表是,列

         的顺序及类型

delete:

     delete from 表名;删除一个表中的所有数据

     delete from tabName where condition(条件);

            condition格式: 列名 运算符 值

          逻比较运算符  =、!=/<>、>、>=、<、<=

          and 前后两个条件必须成立才为真   or 前后两个条件有一个条件成立即可为真

          between ... and..

          IN:表示离散的值

          NULL:

               delete from student where tel is null; 不能用=

          NOT:表示取反,相当于否定 可以和其他的(IN between...and... NULL is(在前))一起使用

           注意:truncate table tabName;删除表中的数据,属于DDL语言

                 删除数据表中的数据:

                    delete from tabName;删除表中的数据,可恢复

                    truncate table tabName; 删除表中的数据,不可恢复,表结构存在,相当于删除表结构再创建表结构

                    drop table tabName;删除表,即既是删除表结构删除数据

update:

    update tabName set 列名=值,列名=值...;将某列的值修改成指定值

select:

   select * from tabName;查询一个表中的所有数据

   注意:在增删改查时,当使用字符串类型和日期类型的值时,要用''括起来;

      

DCL:数据库控制语言,主要是创建用户,管理用户权限

    --为数据库创建一个用户 且指定密码,用户只能在该IPAddress上登陆

   create user userName@IPAddress identified by 'password'[with grand option];

    为用户赋予响应的权限:

     常见的哪些权限:create alter drop insert update delete select

        确定该用户权限作用范围:某个数据库中的数据对象

        grant creat,alter... on databaseName.tabName to userName@IPAddress;

        将所有权限赋予某个用户

       grand all on databaseName.tabName to userName@IPAddress;

       *表示所有数据对象

    回收权限revoke      (invoke调用)

    revoke 权限... on databaseName.*|tabName from userName@IPAddress;   

    查看某用户的权限:

         show grants for userName@IPAddress;

    删除某个用户:

       drop user userName@IPAddress;                

    赋予一个用户创建另外一个用户的权限:

    grant create user on *.* to userName@'%' with grand option;

    修改数据库用户密码

    update user set password=password('root') where user='root';

    flush privileges;

  解决Mysql乱码问题:

  查看编码的命令:

    show variable like 'char%';

        mysql> show variables like 'char%';

    +--------------------------+----------------------------+

    | Variable_name            | Value                      |

    +--------------------------+----------------------------+

    | character_set_client     | utf8                       |

    | character_set_connection | utf8                       |

    | character_set_database   | latin1                     |

    | character_set_filesystem | binary                     |

    | character_set_results    | utf8                       |

    | character_set_server     | latin1                     |

    | character_set_system     | utf8                       |

    | character_sets_dir       | /usr/share/mysql/charsets/ |

    +--------------------------+----------------------------+

  如何不会有乱码?

   客户端,client, connection,results,服务器端编码一致

           (客户端编码和服务器端编码一致,设置其他三项的编码一致)

       set names 编码;(gbk,utf8)

       set names gbk相当于以下三句

       >set character_set_client=gbk;

       >set charavter_set_connection=gbk;

       >set character_set_results=gbk;

   character_set_client:与client保持一致;

   character_set_connection:与数据库保持一致

   character_set_result:与客户端保持一致(客户端编码和服务器编码不一致时

           >set character_set_client=客户端编码;

       >set charavter_set_connection=服务器端编码;

       >set character_set_results=客户端编码;

 单表查询(select)

 查询就是将表中的数据取出,并存放到一个临时表中,并显示

  查询表中的所有数据:

   select * from tabName;

   select 列名,列名... from tabName;

  过滤重复行

   select distinct 列名 from tabName;

  列运算操作:

   -- 对数值型的列进行加减乘除运算

       null   ifnull(列名,值)

   --对字符串的连接

         concat(列名,列名|字符串...)

   --别名

        直接在列名的后面写别名或者在列名 as 别名

  排序:

    查询语句order by 列 ASC|DESC   默认是DESC

    ASC:升序   DESC:降序排列

    按多列排序:用逗号隔开

  条件查询:

      where之后只能使用原表中存在的列进行过滤,如何对结果表过滤,此时使用having

  模糊查询:

     列名 like 条件

     % 表示不定数的任意字符 _表示任意一个字符

    注意:like 后面的条件是含有通配符的条件表达,如果没有通配符,则like相当于=

  聚合函数:

  分组:

   select 分组列,聚合函数 from 表

   group by 列名1,列名2 ...

      计算每个部门的人数

      select deptno count(empno) from emp group deptno;

     除了聚合函数,哪些列可以出现在select之后呢:

            分组列,与分组列具有相同结构的也可以

      计算每个部门人数,最高工资,最低工资,平均工资 和

       select deptno 部门, count(*) 人数,max(sal) 最高工资,min(sal) 最低工资,avg(sal) 平均工资,sum(sal) 工资和 from emp  group by deptno;

  having语句的使用:

    有的时候要对部分分组进行过滤,

    having语句能够使用的语法和where几乎是一样的,不过使where的时候要group by子句要

    放在其后,而使用having时,group by要位于having之前;其实就是在用聚合函数的时候

    把where换成having;

  限制结果集行数:

    Mysql提供limit关键子来限制返回的结果集,limit放在select语句的最后位置

      语法:“limit 首行行号,要返回的结果集的最大数目”

    sqlServer 2000提供top关键子来返回结果集中的前n条记录

      语法:select top 限制结果集数目 字段列表 其他语句

    sqlServer2005  提供窗口函数:row_number()函数可以计算每一行数据在结果集中的

           行号(从1开始计数);

      语法:row_number() over(排序规则)

   查询语句的结构:

       select 列...,聚合函数

       from 表1,表2,...,表的连接

       [where condition] 表示对表中每一行数据进行过滤

       [group by 列1...]  按照指定的列进行分组

       [having condition]对分组后的数据进行条件过滤

       [order by 列,别名]

       [limit start_index,offset]

   完整性约束:

       主键约束:用于唯一表示表中的一行数据的。不能重复和为null

                primary key

       自增长约束:标识某一列的值可以自动增长,一般为int类型的主键列

                auto_increment

       非空约束: 不为null,在插入数据的时候不能为空

              not null;

       唯一约束:表示该列所有的值不能重复,但只能有一个null

               unique

       check约束:限定范围

            age列使用check约束(18,24)。

       外键约束:某列的取值必须从另一个表中的此列中取得

            foreign key 外键字段 r7eferences 外键表名 (外键表的主键字段)

            constraint fk_tno foregin key (tno) reference teacher (tno);

             一个表中的外键一般与另一个表中的主键对应,常常列名是相同的

            主键是不为null且不重复的,外键可以为null也可以重复

       默认值:

          default 值

      

   数据处理函数:

        计算字符串的长度,length()这个函数接收一个字符串类型的字段值作为参数,返回

             该字符串的长度

        取得字符串的子串的函数:substring(参数1,参数2,参数3)

             第一个参数是要取的主字符串,第二个参数为字符串的起始位置(从1开始),第三个参数为子串的长度

        多个函数还可以嵌套使用,主流系统都提供了计算正弦值的函数sin和计算绝对值的函数abs,

               他们都接收一个数值类型的参数

  表连接:、

    sql使用join关键字来进行表连接,

    表连接有多种不同的类型:

           被主流数据库支持的有交叉连接(cross join)、内连接(inner join)、

                              外连接(outter join)、另外有的数据库还支持联合连接

                              (union join)

           内连接:组合两张表,并基于两张表中的关联关系来连接他们。使用内连接需要指定表中的

                   哪些字段组成关联关系,并且需要指定基于什么条件的进行连接

                  语法:inner join table_name ON condition

                        其中table_name为被关联的表名,condition是进行连接时的条件

           不等值连接:

多表查询:

       一般情况下,多表查询表与表之间会存在一定逻辑关系。最直接的就是主外键关系

   普通多表查询:

         select 列1... from 表1,表2...

         where condition

         ...

          在from之后可以有很多表,每个表之间用,隔开,from后面的表会做笛卡尔积

          表与表之间做笛卡尔积,然后就能查询出来了

   内连接:

           select 列

           from 表1 别名 inner join 表2 别名 on 表1.列=表2.列,...

           condition...

           from开始,表1与表2进行笛卡尔积,每匹配一行的数据,就会通过on后条件判断

              是否成立,就将该行匹配的信息存放到临时表,否则不存放

   外连接:

        左外连接:左表中所有的记录都会被放到结果集中,无论是否在右表是否存在匹配记录

            语法:select 列

                  from 表1 left outer join 表2 on 表1.列=表2.列

                       [left outer join 表3 on...]

        右外连接:不管是否成功匹配连接条件都会返回右表中的所有记录

            语法: select 列

                  from 表1 right outer join 表2 on 表1.列=表2.列

                       [left outer join 表3 on...]

        全外连接:(在mysql中没有全外连接,可以使用union实现

                     即是select...左连接 union select  ... 右连接...

            表1 full outer join 表2 on ...

   自连接:

        一张表与自己进行连接,

          select 列..

           from 表1 别名,表1 别名2

          where...

          ...

        select e1.empno,e1.ename,e1.mgr e2.empno,e2.ename

        from emp e1,emp e2

        where e1.empno = e2.mgr;

         ex:查找每个员工的直接上级领导的姓名:

          select ifnull(e1.ename,'boss') 领导,e2.ename

          from emp e1 right outer join emp e2 on e1.empno=e2.mgr;

   子连接:

       在查询中还可以有查询。外查询叫主查询,内部的叫子查询

        子查询先运行,子查询的结果作为主查询的值使用

      --子查询返回单个值   =

      --子查询返回多行一列  in

      --子查询返回一行多列  (,)in(,)

      --子查询返回多行多列   将条件一个一个拆开,然后将子查询得到的表在进行连接

                            连接之后可按下一步的条件进行查询,以此类推下去即可得到

                            符合条件的结果。在条件拆分的时候就是要月简单越好,并且

                            条件之间有相应的关系,最好是包含的关系,这样查询出来的

                            结果肯定是没有错的,并且在逻辑上也是很通的。也就各种子查询

                            并列或者是一个是另一个的子查询。

MYSQL数据库的备份与还原:

   mysql数据的备份:

       不登陆mysql

        >mysqldump -uuseName -ppassword databaseName >./hao.sql   

        到处数据库中的表结构及表中的数据    ,不包含该数据库    

   mysql数据库的还原:

           还原此种方式备份的数据时,必须在该数据库服务器中创建一个数据库

           并指定

       第一种,不登陆mysql

         >mysql -uuserName -ppassword databaseName < ./hao.sql;

       第二种:登陆mysql :

         mysql>use databaseName;

         mysql>source ./hao.sql

 

 

    

       

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: