MYSQL数据库小基础

收藏
0 1844
SuperXu
SuperXu 2017-06-20 10:14:12
付费话题:0 积分


一、数据库
  1.什么是数据库:按照特定形态储存数据的仓库,电子文档形式
  2.数据库分类
    (1)关系型数据库:二维表(MySQL,SQLserver,Orcale,DB2)
    (2)非关系型数据库:Nosql,MonggoDB等
  3.MySQL
    (1)安装
    (2)打开命令行的窗口
    (3)登录和退出
      a.登录
                       例如:mysql -u用户名 -p密码 [-P端口号][-h服务器名称][-D选择的数据库名称]
                       说明:
           a.-u用户名
           b.-p密码
           c.[-P端口号]不是默认端口不能省略
           d.[-h服务器名称/ip地址]  如果是本地服务器可以省略
           e.[-D选择的数据库名称]
      b.退出
       (a)\q
       (b)quit
       (c)exit
    (4)mysql注释
      a.--注释内容
      b.#注释内容
    (5)mysql 配置文件
      windows:my.ini
       a.port=3306 端口
       b.basedir="E:/PHP/mysql/"  mysql的安装位置
       c.datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"  mysql数据库文件存放位置
       d.character-set-server=utf8   mysql字符集(编码)  
       e.default-storage-engine=INNODB   mysql的引擎
         mysql的引擎  :INNODB(事物),MylSam
    (6)开启mysql(net start mysql)  和关闭mysql(net stop mysql)
    
    
    
    
   

一、SQL语句:结构化查询语句
  1.DDL数据创建语言:创建数据库,创建数据表
          创建(CREATE) 修改(ALTER) 删除(DROP)  
  2.DML数据操作语言
          对数据中的表的操作  增(INSERT)  删(DELETE)  改(UPDATA)  
  3.DQL数据的查询语言
          查询(SELECT)
  4.DCL数据的控制语言:给用户分配权限(GRANT),撤销权限(REVOKE)
二、SQL命令规范
  1.系统命令大写,名称小写 
  2.支持折行,但不能在名称或者函数名称,引号中折行。     
  3.结束定界符以分号结束或者\g
          例如:delimiter ~
  4.名称不能是关键字和保留字,如果是必须用反引号括起来  例如:`username`
三、创建数据库
  1.查看数据库
   SHOW DATABASES;  
  2.创建数据库
   CREATE DATABASE [IF NOT EXISTS]数据库名称[[DEFAULT]CHARACTER SET [=] 字符集]; 
  3.删除数据库
   DROP DATABASE [IF EXISTS] 数据库名称 ;
  4.查看创建数据库命令
   SHOW CREATE DATABASE psd1610;  
  5.修改数据库编码
   ALTER DATABASE 数据库名称   [DEFAULT]CHARACTER SET [=] 字符集;
  6.打开数据库
   USE数据库名;
  7.查看当前数据库
   SELECT DATABASE();
四、创建表结构
  1.查看表结构
  SHOW TABLES;
  2.创建表结构
  CREATE TABLE [IF NOT EXUSTS] 表名(
  字段名(列名) 数据类型[字段属性|约束条件],
  字段名(列名) 数据类型[字段属性|约束条件],
  字段名(列名) 数据类型[字段属性|约束条件],
  ...
  )[ENGINE=innoDB DEFAULT CHARSET=utf8];    
  3.查看表结构
   DESC表名;|DESCRIBE 表名;
   SHOW  COLUMNS FORM 表名; 
  4.查看数据库创建表结构的命令
   SHOW CREATE TABLE 表名;  
   说明:
        表是数据库的最小单位 ,表(Table)有 行(记录Record)和列(字段Field)
        至少有一个字段可以有0个字段,数据库和表的关系好比excel中工作簿和表的关系 
五、表中数据的添加和查询
  1.添加(Insert)
   insert 表名(字段名,字段名...)
   value[](值,值...),(值,值...)...;
  2.查询(Select)
   (1)select*from 表名;   
   (2)select 字段名称 ... from 表名;
六、mysql的数据类型
  1.整型
   (1)TINYINT([D]) UNSIGNED|ZEROFILL
            说明:
                大小:1字节(Byte = 8bit = 2^8)
                范围:
                     有符号位  -128~127
                      无符号位  0~255
   (2)SMALLINT([D]) UNSIGNED|ZEROFILL
            说明:
                大小:2字节(2^16)
                范围:
                     有符号位  -32768~32767
                      无符号位  0~65535
   (3)MEDIUMINT([D]) UNSIGNED|ZEROFILL:
            说明:
                大小:3字节(2^24)
                范围:
                     有符号位  -8388608~8388607
                      无符号位  0~16777215
   (4)INT([D]) UNSIGNED|ZEROFILL:
            说明:
                大小:4字节(2^32)
                范围:
                     有符号位  -2147483648~2147483647
                      无符号位  0~4294967295
   (5)BIGINT([D]) UNSIGNED|ZEROFILL:
            说明:
                大小:8字节(2^64)
                范围:
       说明:
            字段属性
      UNSIGNED:无符号位,正数
      ZEROFILL:当实际长度小于制定的长度时用0填补,有ZEROFILL字段属性一定会自动添加UNSIGNED  
  2.浮点型
   (1)FLOAT([M,D]) [UNSIGNED|ZEROFILL] 
         单精度浮点(1位符号,8位指数,23位)
                大小:4字节
                范围:-3.4e38~3.4e38
                精度:7位
   (2)DOUBLE([M,D]) [UNSIGNED|ZEROFILL]
                双精度浮点(1位符号,11位指数,52位)
                大小:8字节
                范围:-1.79e308~1.79e308
                精度:15位
   (3)DECIMAL([M,D]) [UNSIGNED|ZEROFILL]
                定长浮点(1位符号,11位指数,52位)
            说明:          
      a.FLOAT,DOUBLE存近似值
      b.DECIMAL存精确值          
      C.M整数位和小数位总和
        D小数位
  3.字符类型
   (1)CHAR([M]):定长字符,例如:char(30)存'hello'内存中实际储存为'hello      '不足的用空格补
                                          范围:至多255字节(1个字母占一个字节)
   (2)VARCHAR([M]):变长字符,例如:varchar(30)存'hello'内存中实际储存为'hello'
                                                  范围:至多65535个字节(1个字母占一个字节)
      VARCHAR实际的存储长度受下面的影响
        a.至多65535个字节
        b.字符集影响
          gbk:至少两个字节
          utf8:至少三个字节,最多21844个字节
        c.所有字段总长度不能超过65535字节(21844个字节)
   (3)TEXT:至多65535字节
   (4)MEDIUMTEXT:至多16777215字节
   (5)LONGTEXT:至多42亿字节        
            说明:
      a.CHAR效率高不省空间,VARCHAR省空间但效率低     
                     例如:密码字段 用 CHAR(32) 
      b.TEXT效率最低,比如新闻内容字段大段文本用TEXT
  4.布尔类型
    (1)TINYINT(1)
    (2)BOOLEAN  
  5.时间日期类型
    (1)DATE:4个字节
    (2)YEAR:1个字节
    (3)TIME:3个字节
    (4)DATETIME:8个字节
    (5)TIMESTAMP:4个字节 时间戳     
  6.枚举类型
   ENUM:至多65535字节
           例如:sex enum('0','1','2')     
七、约束条件
  (1)NOT NULL:不能为空  必填
  (2)DEFAULT:默认值
  (3)[PRIMARY]KEY:主键,一个表中必须有一个主键,是主键的字段一定是NOT NULL和UNIQUE(唯一性).
  (4)UNIQUE[KEY]:唯一性,不重复(例如:用户名,邮箱),可以有多个唯一性的字段,但只有一个主键字段
  (5)AUTO_INCREMENT:自动增长,记录编号自动加1,只有主键字段才能添加自动增长       
八、修改字段
  1.添加字段
    ALTER TABLE 表名
    ADD 字段名称 数据类型[字段属性|约束属性]
    [FIRST][AFTER 字段名], 
    ADD 字段名称 数据类型[字段属性|约束属性]
    [FIRST][AFTER 字段名], 
    ...;      
  2.删除字段
    ALTER TABLE 表名
    DROP 字段名称,   
    DROP 字段名称,  
    DROP 字段名称,  
    ...;
  3.修改字段  
    ALTER TABLE 表名
    MODIFY 字段名称 数据类型[字段属性|约束属性]
    [FIRST][AFTER 字段名],    
  4.修改字段名称
    ALTER TABLE 表名    
    CHANGE 旧字段名称   新字段名称 数据类型[字段属性|约束属性]
    [FIRST][AFTER 字段名]   
九、帮助
  (1)\h 命令 
  (2)\help 命令 
  (3)? 命令
十、表中的数据进行操作
  1.增(Insert)
    (1)不写字段的添加(从第一个到最后一个都要赋值)
    insert 表名
    value(值,值...),...;
    (2)写字段的添加
    insert 表名(字段名1,字段名2,...)
    value(值,值...),...;
    (3)insert...set(只能添加一条记录)
    insert 表名 set 字段名=值,字段名=值,字段名=值,...;
  2.删(Delete)
    (1)delete from 表的名称[where 条件]
    (2)truncate 表名;清空表数据
               说明:
       a.如果没有where 条件 ,将清空表数据
       b.delete 删除记录 不能重置自动增长auto_increment
       c.truncate 删除表记录 能重置自动增长auto_increment
  3.改(Update)   
    update 表名 set  字段名=值,字段名=值,字段名=值,...[where 条件];
              说明:
       a.如果没有where 条件 update,那所有记录更新对应的字段值  
  
  
  

一、查询 (Select)
 1.查询所有字段
   select*from 表名;  
        说明:效率低
 2.查询某个字段
   select 字段名,字段名... from 表名;
 3.给字段取别名
   select 字段名 [as] 别名,字段名... from 表名;  
 4.给表起别名
   select 字段名,字段名... from 表名[as] 别名;
 5.表名[别名].字段名 --字段来自哪个表
   select .表名[别名].字段名 ,字段名... from 表名[as] 别名;
 6. 数据库.表名  --表名来自于哪个数据库 
   select 字段名 [as] 别名,字段名... from 数据库.表名;  
 7.完整格式
   select 字段名|表达式,字段名|表达式... from 表名
   [where 条件]
   [group by 字段]
   [having 字段]
   [order by 字段]
   [limit [$offset,]$length];
 8.where 条件:条件过滤
          条件:
  (1)比较  > >= < <= != = <> <=>判断null值
  (2)is [not] null  判断null值  
  (3)[not] between...and... 
  (4)[not] in(值,值,值...)(某几个不连续的值)
  (5)逻辑运算符  !非, and && 与   , or ||或
 9.[not] like '字符串' 模糊查询;
         关键字 
     _:任意一个字符
     %:任意字符串(0,1,多个)
 10.group by 字段:对字段分组
     原理:对字段相同的值分组,显示分组相同的值的一个结果(小编号),
               一般字段是分组的那个字段和聚合函数作为字段
     说明:
     count(*),count(字段):获得每组的个数 
      count(*)包含null值,count(字段)不包含null值
     avg(字段):获得每组的平均值
     max(字段):获得每组的最大值
     min(字段):获得每组中的最小值
     sum(字段):获得每组的和
 11.having 字段:二次过滤条件
        说明:
     a.where 对字段的过滤;
     b.having 对结果的过滤,一般结合分组的使用
 12.order by 字段:对字段排序
        说明:
     order by 字段  asc升序    desc降序
 13.limit[$offset,]$length:获得前n条记录
        说明:
     a.$offset:偏移量,起始编号,从0开始
     b.$length:获得记录条数(条数)
     c.实现web程序的分页
                  计算偏移量:($curpage(当前页)-1)*记录长度
       $offset=($curpage(当前页)-1)*$length
二、多表联合查询  
  1.格式
    select 字段名,字段名
    from 表1
           连接类型 表2
    on 两个表的逻辑关系
           连接类型 表3
    on 两个表的逻辑关系
    ...;
  2.连接类型
           内连接:inner join 两个表中符合条件的信息查询到
           外连接:
              左外连接:left[outer]join 显示左表的所有信息,和右表中符合条件的信息,当左表的信息右表没有用null显示
     右外连接:right[outer]join显示右表的所有信息,和左表中符合条件的信息,当右表的信息左表没有用null显示
三、子查询(嵌套查询)
  1.子查询:SQL中嵌套select语句
  2.子查询特点
    (1)子查询是select语句
    (2)子查询用小括号括起来
  3.子查询的使用
    (1)where 后
       a.in
       b.比较运算符中  
                      说明:只能比较一个结果,不是一个结果会报错 可以用all 和some/any解决
           >=all  大于最大值
           <=all  小于最小值
           >=some/any  大于最小值
           <=some/any  小于最大值
           =some  等同于in
    (2)from后
       from 可以跟表名 也可以跟子查询产生一个新表起别名
  
  
  

一、约束条件
  1.约束条件的种类
    (1)NOT NULL:不为空
    (2)DEFAULT:默认
    (3)[PRIMARY] KEY:主键
    (4)UNIQUE:唯一性
    (5)FOREIGN KEY:外键
  2.约束条件分类
    (1)列约束:写在一个字段的后面
              说明:NOT NULL DEFAULT 必须是列约束
    (2)表约束:可以对一个字段以上的约束条件
    a.列约束
     CREATE TABLE test(
        id int UNSIGNED PRIMARY KEY,
        name varchar(50) NOT NULL UNIQUE,
        email varchar(150) NOT NULL UNIQUE
     );
    b.表约束
     CREATE TABLE test(
        id int UNSIGNED,
        name varchar(50) NOT NULL,
        email varchar(150) NOT NULL,
        PRIMARY KEY(id),
        UNIQUE(name,email)
     );
   3.FOREIGN KEY:外键
     (1)FOREIGN KEY:对字段的完整性和一致性约束
     (2)格式
       CREATE TABLE test(
       ...
        aid int UNSIGN NOT NULL,
        tid int UNSIGN NOT NULL,
        FOREIGN KEY (外键列 aid)
        REFERENCES 参考表(父表)cms_admin(id),
        FOREIGN KEY (外键列 tid)
        REFERENCES 参考表(父表)cms_type(id),
        ...
        [update restrict|cascade|set null|no action]
        [delete restrict|cascade|set null|no action]
       );
  说明:
   a.FOREIGN KEY:外键表约束
   b.必须先有参考表(父表)后有外键表(子表)
           必须先有参考表(父表)记录后有外键表(子表)记录
           必须先删除外键表(子表)后删除参考表(父表)
           必须先删除外键表(子表)记录后删除参考表(父表)记录
   c.外键列和参考表对应的字段的类型一致
            例如:如果是整型 UNSIGNED也要一致
                      如果是字符类型编码必须一致,长度可以不同
   d.MySQL默认引擎必须是InnoDB
   e.如果没有指定外键列的约束名称将自动产生一个索引外键约束名称
  (3)完整格式
       CREATE TABLE test(
        ...
        [update restrict|cascade|set null|no action]
        [delete restrict|cascade|set null|no action]
       ); 
  说明:
   a.restrict默认值|no action:父表不能更新或者删除子表中有对应信息的记录
   b.cascade:级联  父表更新或者删除,子表也更新或删除对应的记录
   c.set null: 父表更新或者删除,子表对应的记录设置null值,对应的字段不能not null类型    
  4.逻辑外键
             原理:父表和子表是一个表,可以实现无限极菜单分类
  
二、可视化工具操作mysql
  1.C/S:client/server
      Navicat等
  2.B/S:browser/server
      phpmyadmin (php语言开发)
         安装:php.ini 配置文件
    (1)extension_dir='E:\PHP\php5.4\ext' 扩展文件的目录位置   
    (2)
       extension=php_mbstring.dll  
       extension=php_mysql.dll
       extension=php_mysqli.dll
        去掉前面的分号 重启apache
三、备份和恢复
   备份:登录MySQL时写的备份
   mysqldump -uroot -p 数据名[表名]>文件位置(例如:d:/my.sql)  
    恢复:命令提示符下写
   USE 数据库名;
   source 文件位置(例如:d:/my.sql) 
四、用php操作mysql数据库
  1.mysql函数库
  2.mysqli函数库
  3.pdo函数库
五、mysql函数库     
  1.安装
    (1)测试 phpinfo();  
    (2)安装musql函数库
      a.extension_dir='E:\PHP\php5.4\ext' 扩展文件的目录位置
      b.extension=php_mysql.dll  去掉前面的分号,重启apache
  2.
    (1)resource mysql_connect($hostname,$user,$pwd) 
               描述:连接mysql数据库,
               说明:
       a.成功返回资源类型,失败报错
       b.$hostname:服务器名称|ip
       c.$user:mysql用户名
       d.$psd:mysql密码
    (2)bool mysql_select_db($datebase[,$link_resource]) 
               描述:打开数据库,成功返回true 失败返回false
    (3)mixed mysql_query($sql);
               描述:执行sql语句
               说明:
       a.当sql语句是select,show,desc返回结果集是资源类型(允许是空资源)
       b.当SQL语句是update,insert,delete返回布尔值结果         
    (4)将结果集资源类型转为数组
       a.mysql_fetch_row(resource $res):抽取一行结果集资源类型转为索引数组
       b.mysql_fetch_assoc(resource $res):抽取一行结果集资源类型转为关联数组
       c.mysql_fetch_array(resource $res[,int $type]):
                       抽取一行结果集资源类型转为关联数组或索引数组  
                          说明:
            $type 值
             (a)MYSQL_BOTH 值3 关联数组和索引数组  默认值
             (b)MYSQL_NUMBER 值1 索引数组
             (c)MYSQL_ASSOC 值2 关联数组
    (5)释放结果集
       mysql_free_result(resource $res) 成功返回true  失败返回false
    (6)关闭mysql
       mysql_close([resource $link_resource]) 
    (7)int mysql_affected_rows([$link_resource]);  
               描述:增删改影响的行数         
               返回成功  大于1的值,没有影响的行数返回0,失败返回-1          
      

一、mysql函数
  1.int mysql_insert_id([$link_resource]);      
       说明:
          返回最后添加的记录的编号,获取的auto_increment的自动增长的编号  
  2.int mysql_num_rows(resourse $res);    
       说明:
          获取结果集的总行数
二、分页
  1.mysql用limit实现
   (1)limit[$offset,]$length 获取前n条记录
   (2)计算偏移量   
                  偏移量 = (当前页-1)*每页的条数
       $offset = ($curpage-1)*$pagesize
  2.PHP分页步骤
   (1)$pagesize 设置每页的条数
   (2)$totle获得结果集的总条数 mysql_num_rows($res);
   (3)$totalpage 计算总页数 
      $totalpage = ceil($total/$pagesize);
   (4)$curpage 定义当前页
   (5)实现上一页和下一页或数字链接
     (a)实现超链接
     (b)通过URL实现$corpage+1 $curpage-1
     (c)用$_GET['page'] 接收$curpage的变化,实现动态的当前页









=============================================================================      
一、 乱码问题
  1.html 标记
   <meta charset="utf-8"/>
  2.php 代码
    header('Content-Type:text/html;charset=utf-8');  
  3.数据库乱码
          创建数据库时--utf8  
  4.zend  工作区编码  --workspace-->utf8 
      
      
      
      
  
  
  
  
  
  
      

评论话题
提交