mysql知识

1.  mysql定义

      mysql为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成
  1. 表头(header): 每一列的名称;
  2. 列(row): 具有相同数据类型的数据的集合;
  3. 行(col): 每一行用来描述某个人/物的具体信息;
  4. 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
  5. 键(key): 表中用来识别某个特定的人\物的方法, 键的值在当前列中具有唯一性。

2. mysql脚本组成

  1. 标示符
  2. 关键字
  3. 语句
  4. 函数

3. mysql数据类型

     1. 数字类型
       a. 整数: tinyint、smallint、mediumint、int、bigint
       b. 浮点数: float、double、real、decimal
  2. 日期和时间: date、time、datetime、timestamp、year
  3. 符串类型
       a. 字符串: char、varchar
       b. 文本: tinytext、text、mediumtext、longtext
          c. 二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob

4. mysql登陆

     当 MySQL 服务已经运行时, 我们可以通过MySQL自带的客户端工具登录到MySQL数据库中, 首先打开命令提示符, 输入以下格式的命名:
mysql -h 主机名 -u 用户名 -p
    -h : 该命令用于指定客户端所要登录的MySQL主机名, 登录当前机器该参数可以省略;
    -u : 所要登录的用户名;
    -p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。

5.  mysql常用命令

    a. 创建数据库: create database 数据库名[其他选项]   use 数据库名 制定当前数据库
  b. 创建表:  create table 表名(列声明) show tables 显示所有表 describe 表名 查看已创建表的详细信息
    c. 向表插入数据: insert into 表名 [(列名1, 列名2, ...)] values (值1, 值2, ...)
    d. 查询表中数据:  select 列名 from 表名
    e. 按特定条件查询: select 列名 from 表名 where 条件 
    f. 更新表中的数据: update 表名 set 列名 = 新值 where 更新条件
    g. 删除表中的数据: delete from 表名称 where 删除条件
    h. 对表修改: 
       1) 添加列 alter table 表名 add 列名 列数据类型
       2) 删除列 alter table 表名 drop 列名 
       3) 修改列 alter table 表名 change 列名 列新名 新数据类型
       4) 重命名表 alter table 表名 rename 新表名
    i. 删除数据库/表: drop table 表名 drop database 数据库名 

6. mysql 几种查询

     1.  连接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系数据库查询最主要的特征.
      select 表1.字段名1,表2.字段名2,...  from 表1,表2 where 连接条件
     2. FROM子句的连接语法格式为: FROM 表名 join_type 表名 [ON (连接条件)]连接操作中的ON (连接条件) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。
     3. 连接查询分类:
     1.自连接查询,对同一个表进行连接操作(可以理解为两个不同表的内连接,有时可与嵌套查询等价)
     2.内连接查询,<又分为:自然连接、等值连接、不等值连接三种>
     3.外连接查询,<又分为:左外连接、右外连接、全外连接三种>
        4.交叉连接查询,也作无条件查询。

     4. 内连接取两个表的交集,外连接分左和右,左连接取左边的全部,右连接取右边的全部。

     5. 连接查询选择方式的依据
   1. 查两表关联列相等的数据用内连接。
     2. Col_L是Col_R的子集时用右外连接。
        3. Col_R是Col_L的子集时用左外连接。
        4. Col_R和Col_L彼此有交集但彼此互不为子集时候用全外。
        5. 求差操作的时候用联合查询。

     6. 例子     

     1. 自连接查询:一个表自己与自己建立连接称为自连接或自身连接。
       select x.* from x, y where x.no = '101' and x.idx > y.idx order by x.pos desc
       2. 内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
           a. 等值连接:所谓等值连接,是指表之间通过“等于”关系连接起来,产生一个临时表,然后对该临时表进行处理后生成最终结果。其查询结果中列出被连接表中的所有列,包括其中的重复列。
           select a.*, p.id,p.name from authors as a inner join publishers as p on a.city = p.city
           select e.id, e.name from employee as e, deptb as d where d.idx = e.idx 
           select e.id, e.name from employee as e inner join deptb as d on d.idx = e.idx 
           b. 自然连接: 在等值连接中消除重复列就是自然连接
           select a.*, p.id, p.name from authors as a inner join publishers as p on a.city = p.city 
        3. 外连接
           a.左外连接: 左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值
           b. 右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
           select e.id, e.name, d.deptname from employee as e left outer join deptb as d on e.deptid = d.deptid
           select e.id, e.name, d.deptname from employee as e right outer join deptb as d on e.deptid = d.deptid

7. 数据库范式

    第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性
    第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部  分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系
    第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息

8. mysql  备份

      备份一个数据表的过程如下:
          1. 锁定数据表,避免在备份过程中,表被更新 LOCK TABLES READ tbl_name;
          2. 导出数据 SELECT * INTO OUTFILE  ‘tbl_name.bak’  FROM tbl_name;
          3. 解锁表 UNLOCK TABLES;
      恢复备份的数据的过程如下:

          1.为表增加一个写锁定: mysql>LOCK TABLES tbl_name WRITE;
          2. 恢复数据 LOAD DATA INFILE ‘tbl_name.bak’ ->REPLACE INTO TABLE tbl_name; 如果,你指定一个LOW_PRIORITY关键字,就不必如上要对表锁定,因为数据的导入将被推迟到没有客户读表为止:LOAD DATA  LOW_PRIORITY  INFILE ‘tbl_name’ ->REPLACE INTO TABLE tbl_name;
          3. 解锁表 UNLOCK TABLES;
  用mysqldump备份数据
    1. 数据库备份到bd_name.bak中: mysqldump db_name>db_name.bak  备份整个数据库 mydqldump --all-databases>db.bak
    2. mysqldump导出表的结构很有用,但是恢复大量数据时,众多SQL语句使恢复的效率降低。你可以通过使用--tab选项,分开数据和创建表的SQL语句.
    3. 用sql文件恢复 mysqldump db_name>db_name.sql

     用 mysqlimport恢复数据
    1. mysqlimport [options] db_name filename ... 对于在命令行上命名的每个文本文件,mysqlimport剥去文件名的扩展名并且使用它决定哪个表导入文件的内容

9 事务 视图

      事务是必须满足4个条件ACID
          原子性Autmic: 事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
          一致性Consistency: 事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!就拿网上购物来说吧,你只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!
          隔离性Isolation: 如果多个事务并发执行,应象各个事务独立执行一样!
          持久性Durability: 一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!

      MYSQL的事务处理主要有两种方法。
      1. 用begin,rollback,commit来实现
          begin 开始一个事务
          rollback 事务回滚
          commit  事务确认
      2. 直接用set来改变mysql的自动提交模式来实现事务的处理。
          MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
          set autocommit=0   禁止自动提交
          set autocommit=1   开启自动提交
但注意当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
个人推荐使用第一种方法!
     3. MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!

      视图定义: 相当于一个变量,代表一个查询语句
      视图的定义: create view v1 as select * from dept;
      视图的使用: select dept_no,dept_name from v1;

10 sql 语句分类
  1. DQL(数据查询语言),用来从数据库中获取数据和对数据进行排序。
  2. DML(数据库操纵语言),用来插入、删除和修改数据库中的数据。
  3. DDL(数据定义语言),包括定义数据库、基本表、视图和索引。
  4. DCL(数据控制语言),用来管理对数据库和数据库对象的权限。
      5. CCL(通用命令语言),用来在数据库中进行高效率的搜索。它可以用来生成联机库等需要在很短的时间内筛选大量记录的应用。

posted on 2014-04-17 20:36  kangbry  阅读(192)  评论(0编辑  收藏  举报

导航