mysql学习小结

一,基于数据库的PHP项目
    目前的动态网站都是基于数据库的,将网站内容使用数据库管理系统去管理用户,栏目,图片,文章,评论都存储在数据库中
    比如
        XSCMS库
            users
            clumn
            pic
            articles
            commention
二,为什么使用MySQL?
    Oracle,DB2,SQL Server,……
    MySQL-----开源
        表结构
    中小型项目

三,MySQL架构
    C/S结构
    3306  MySQL的默认端口
    MySQL DBMS
        客户端
        服务器端----数据库----数据表----(记录,字段)
四,PHP程序员主要学习哪些操作
    ·为你的项目设计表
    ·如何使用SQL语句增删改查
    程序中用不到的都可以使用工具完成
五,MySQL的安装和启动
    和PHP整合
    Linux下的启动
        service mysqld stop
        service mysqld start
        service mysqld restart
六,MySQL的目录结构
    配置文件----my.ini
    文件夹bin----命令
    文件夹data-----存储数据库
        在data文件夹下创建一个文件夹就是创建一个数据库
七,了解数据库的MySQL语句操作
    DDL
        定义和管理数据对象(库,表,视图,索引)
        CREATE DROP ALTER
        创建库
            create database if not exists test
        删除库 
            drop database if exists test
        创建表
            create table databaseName.tableName
        删除表
            drop table databaseName.tableName

    DML
        对数据操纵,和表中的数据记录有关
        INSERT UPDATE DELETE
        insert into users(colName,...) values(colValue,...);
        插入表数据
            insert into tableName([字段列表]) values(值列表1),(值列表2),(值列表3); 
                特点:
                      如果在表名后没有给出字段列表,则值列表要列出所有字段的值,必须按默认的顺序
                      所有需要写字段名的地方,都不要加单引号或双引号,但所有的值都要使用单引号或双引号(建议,MySQL可以自动转换)
                      再插入数据时,最好给出字段列表,则值要和字段列表对象即可,可以不按表中的字段的顺序
        修改表数据   
            update 表名 set 字段=‘值’[,字段2=‘值‘,...][条件] 条件是确定要更改的记录,可以通过条件指定一条,也可以指定多条
            update cats set id=id-1 where id >= 8;
            delete from 表名 [条件]
            注意:没有条件,会更改/删除整个表         
                  delete from tableName;//删除表
                  truncate tableName;//删除表,效率更高
                  只要你想更新,删除,查找,只要写对条件就能准确找到要管理的一条或多条语句
    DQL
        SELECT
        查询
            select [all|distinct]{*|table.*|[table.]field1[as alias1][ 其他字段]} 
            from    表名
            [where ]    
            [group by]
            [order by]
            [having]
            [limit count]
            使用select语句,目的就是可以按照你的想法将数据查出来,将结果返回给你 
            1,字段要列出要查询的字段
            2,可以为每一个字段用as起一个别名,(关键字冲突,多表查询时)
            3,DISTINCT针对整个查询列表取消相同的记录
            4,在SQL语句中,使用表达式的列(算数运算符号,逻辑运算符号,条件)
            5,where 可以在select,update,delete中
                逻辑运算符(多个条件组合)
                    &&  ||  ! 
                    AND OR not
                比较运算符
                    =(<=>)   和程序中不一样 ,<=> 可以比较空值,而=不可以比较空值,如name=null,这个将查不出来,而name<=>null 则可以查出来
                     !=(<>) 
                    < 
                    > 
                    >= 
                    <=
                    is NULL
                    is not null
                    SQL中所用: between…and 连续的取值区间     
                            not between and
                            like    模糊查询 _和%两个通配符   _ 任意一个字符  % 0个或多个字符
                            not like
                            in  单个检索    select * from products where id in(5,10,20,25,30);
                            regexp   rlike   模糊查询  正则表达式
            6,多表查询(连接查询)
            7,嵌套查询
                select … where(select ……)
            8,order by 字段[desc|sac] 排序
                    desc 倒序
                    多个字段查询必排序
            9,limit num
                限制查询数量
                limit num1,num2//从num1取,取num2个
            10,group by ziduanNanme  
                count()   sum()    avg()  max()  min()
            11,Having 给出分组的条件
                每一个组的条件,having avg(price) > 50;
                having 要在group by 后使用 
    DCL
        数据控制,管理权限和数据更改
        GRANT,REVOKE,COMMIT,ROLLBACK

    use tes1;//转到一个数据库中
    desc tableName; //查看表结构
    MySQL示弱类型,创建时使用字符串操纵,进入数据库时会自动转换成相对应的类型
    \s 看数据库状态
    show databases 看所有库
    show tables 看所有表
    show variables 配置文件的变量
    desc tableName 看表结构
    帮助的使用
        ?contents   
    1,执行SQL语句,连接数据库服务器
        mysql -h localhost -u root -ppassword //-p是不可少的,不是密码的部分
        show variables;查询所有的变量
        show variables like ‘part‘;
        show databases;//查看库
        create database test; 创建库
        drop database test;//删除库
    2 创建数据库

    3 选择默认数据库   
        use databaseName
创建数据表
    1,什么是数据表
        记录+字段
    2,创建数据表的SQL
        DDL语句
            CAREATE TABLE [IF NOT EXISTS]tableName(
                字段名1 列类型[属性][索引]
                字段名2 列类型[属性][索引]
                ...
                字段名n 列类型[属性][索引]
            )[表类型][表字符集];
            中括号中的都是可选类型

    3,数据值和类型
        ·数值型
            整型  
                1字节 TINYINT
                2字节 SMALLINT
                3字节 MEDIUMINT
                4字节 INT
                8字节 BIGINT
            浮点型
                4字节 float(M,D)   M 总共占据的位数 D 保留的小数位位数
                8字节 double(M,D)
                M+2字节   定点数decimal(M,D) 
        ·字符串
            声音,图像,图片等二进制数据
            char(M)     255字符       固定长度
            vchar(M)    255字符       可变长度
            char固定长度,处理速度块,缺点会浪费空间,char在连接时会去掉末尾的空格
            vchar  值变化大
            text    文本数据(文章)   2e16-1字节
                MEDIUMTEXT      2E24-1
                LONGTEXT
            注意:varchar的文本不支持换行,而text类型支持换行
            blob    保存二进制,照片,压缩数据
                MEDIUMBLOB
                LONGBLOB
            enum    枚举类型   1-2字节 ----65535个成员 
                  一次只能用enum中的一个值
                例:存储enum(‘男’,‘女’)
            set 集合类型   1,2,3,4,8字节-----64个成员
                    一次可以使用集合中的多个值
        ·日期型
            DATE
                YYYY-MM-DD
            TIME
                hh:mm:ss
            DATETIME
                YYYY-MM-DD hh:mm:ss
            TIMESTAMP
                YYYYMMDDhhmmss
            YEAR
                YYYY
            时间的存储形式如上所示
            存储的时间一定要注意格式
            创建表时最好不要使用这些中的时间格式(PHP时间戳 1970-1-1 0:0:0)
            用整数保存时间 (PHP中的time())
        ·NULLphpMyAdmin
    4,数据字段属性
        ·unsigned   设置无符号的类型,可以使空间增加一倍
                只能用在数值型字段
        ·zerofill   只能用在数值型字段,在数值数据前加入前导,该字段会自动加上无符号
        ·AUTO_INCREMENT
                只能是整数,数据每增加一条就值自动增加1 
                字段值不允许重复
                此字段留空,null,0,都会使此字段自动增加1
                如果自己手动增长,要>=最大值
        ·NULL 和 NOT NULL
            默认是空,时间戳除外
            将来将这个表转为PHP程序的数据时,整数列有NULL  能转为0吗?字符串中有NULL 能转成0吗--------------------不一定
            建议:在创建表时每一个字段都不要插入null
        ·default
            缺省值
         例:创建一个用户表
            create table users(
                id int unsigned not nullauto_increment primary key,
                name varchar(30) not null default ‘‘,
                height double(10,2) not null default 0.00,
                age int not null default 0,
                sex char(4) not null default ‘男‘
            );      
    5,创建索引
        通常是为了查询,确保数据的唯一性
        1,主键索引
            主要是确定一条特定记录的位置,
            最好为每一张表定义一个主键
            一个表只能只能指定一个主键
            主键的值不能为空    
            可以有多个候选索引
            primary key 指定主键
        2,唯一索引
            都可以防止创建重复的值
            每一个表都可以有多个唯一索引
            unique
            作用,为了防止数据的重复1111111111111111111
        3,常规索引
            最重要的技术
            提升数据库的性能
            索引优化要优先考虑常规索引
            1111111111111111111
            22222222222
            3333333333333
            ............
            999999999999999999
            共几百万条数据
            缺点:占用磁盘空间
            可以提高查找速度,但会减慢数据列上的插入,删除,修改
            不要试图为每一列创建索引
            技巧: Alter table tableName add columnName 类型 属性
                分表,创建索引的为一个表,不创建索引的为一个表
                需要条件搜索的,需要条件分组的,需要条件排序的,这样的列可以使用常规索引,但不要太多,要适可而止
            可以单独使用,也可以在创建表时创建,索引是一个独立的对象
            create index indexname on tableName(字段);
            drop index  indexname on tableName
            index key 是同义词
            单列多列都可以

        4,全文索引
            fulltext类型索引,MyISAM表类型上使用,只有在varchar char text文本字符串上使用,也可以在多个数据列上使用
            把某个数据表中的某个数据列中出现的所有单词生成一个清单
    6,表类型及存储位置
        MySQL与大多数数据库不同,MySQL有一个存储引擎的概念  
        MySQL可以针对不同的数据引擎需求可以选择最优的存储引擎
        引擎 数据表类型(查询 show engines)
        我们只学12个中的MyISAM和InnoDB两个
        create table () type InnoDB;
        create table () engine InnoDB;
            MyISAM是默认的
        根据不同的需求选择不同的存储引擎
        注意:在一个MySQL库中可以(创建表时)指定不同的表类型
        MyISAM      
            成熟稳定,易于管理,
            OPTIMIZE TABLE 表名
            强调快速读取操作
            有一些功能不支持
        InnoDB 
            恢复回滚
            支持外键
            空间占用量比MyISAM大得多
            支持MyISAM不支持的功能
            不支持全文索引
        功能        MyISAM        InnoDB
        事务处理          不支持            支持
        数据行锁定     不支持        支持
        外键约束      不支持        支持
        表空间       相对小       相对大,最大2倍
        全文索引      支持             不支持    
    7,默认字符集
        对于汉字:
            GBK 2个字节
            UTF-8 3个字节
        MySQL服务器,数据库,数据表,字段都可以指定字符集,相对于其他的数据库显得灵活
        show character set//查看数据库支持的字符集
        数据库中的UTF-8是没有中间的-的,即数据库的UTF-8是utf8
        MySQL的字符集包括
            字符集,是用来定义MySQL存储的方式
            校对规则:对规则定义了比较字符串的方式
            1个字符集可以对应多个校对规则
    8,修改表
        没有改不了的地方
        Alter table tableName add columnName 类型 属性//添加字段到表末尾
        Alter table tableName add columnName 类型 属性 after 已存在的列名//加大已存在列之后
        Alter table tableName add columnName 类型 属性 first//加到第一列
        alter table tableName modify sex char(3);//修改列的属性  modify 修改类型
        alter table tableName change oldname newname varchar(30);//可以改变字段名,modify不能更改字段名
        alter table tableName rename as newtableName;//更改表名
        alter table tableName drop columnName
        drop table  

函数
    字符串函数
        1 concat(s1,...,sn);
            连接
        2 insert(des,start,len,insert);
            将des的start位置开始,len个字符串长度替换为insert
        3 lower(str) upper(str)
            将字符串转换为小写或大写
        4 Left(str,x) right(str,x)
            返回字符串的左边或右边的x个字符,若x为空,则什么也不返回

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。