首页 > 代码库 > MySql入门

MySql入门

一、数据库入门
                -------存放数据的仓库【和集合类似】,并有一定的规则结构
    一】SQL=Structure Query Language 【结构化的查询语言】
        SQL是客户端操作数据库的一种工具/命令,主要以存取为主
    二】各种常用数据库简介
        Oracle/Java
        SQLServler/Microsoft
        DB2/IBM
        Linux+Apache+MySQL+PHP(最适合的配置)
    三】SQL[通用/特定]与数据库的关系
        1)每种关系型数据库都支持的SQL命令,叫做通用SQL。
        2)每种关系型数据库都根据自身数据库的特点,量身定做的SQL,叫做特定SQL。
    四】登录与退出
        1)登录MySQL:>mysql -u root -p
                                    >******
        2)退出MySQL:>exit

二、数据库操作
    一】数据库服务器、数据库和表以及记录的关系
        见图。
    二】Java对象世界和SQL关系世界的关系
        类User  <===>      表USER
        对象user<===>   记录(行)
        属性    <===>   字段(列)
    三】操作数据库(SQL命令大小写无关。)
        1)创建数据库:
                create database [if not exists] 【数据库名】[character set 【字符集】[collate utf8_general_ci]];//[]中的内容为可选的
                
                可选参数:
                    if not exists :如果不存在则创建,如果存在就不创建此数据库。
                    character set 【字符集】:指定此数据库采用的字符集。
                    collate 【字符校验规则】:和字符集一一对应,show character set;命令可以查看。
                
            code:
                create database mydb1;//创建数据库mydb1
                create database mydb2 character set UTF8;//创建数据库mydb2并设置字符集为UTF8
                create database if not exists mydb3 characater set UTF8 collate utf8_general_ci;//创建一个使用utf8字符集,并带校对规则的mydb3数据库。
    
        2)显示数据库语句
                show databases;//查看当前数据库服务器中的所有数据库。
                code:
                    
        3)使用数据库
                use db_names;
        4)删除数据库
                drop database [if exists] db_name;
        5)查看前面创建的数据库的定义信息
                show create database db_name;
                
    四】修改、备份、恢复数据库
        1)修改数据库:
                    ---只能修改字符集和字符校验规则。
                
                alter database    db_name [character set 【字符集】 collate 【字符校验规则】]
                    alter database mydb3 character set gbk;//将mydb3库的字符集修改为gbk
            
     2)备份数据库:【mySQL特有命令】
             =(备份到的文件)
             *********(密码)
         
             注意:
                     1》该命令是mySQL特有命令
                     2》在>中执行,并非mysql>环境中使用。
                     3》结尾可以不用加分号表示结束
    3)恢复数据库【mySQL特有命令】
            source 【本分文件路径】;
            
            code:
                source d:\mydb2.sql;
            注意:
                    1》该命令是mySQL特有命令
                    2》在mysql>环境中使用
                    3》结尾需要加分号表示结束
    
    五】表
        1)创建表
        
            create table table_name
            (
                filed1 datatype,
                filed2 datatype,
                filed3 datatype
            )[character set 【字符集】 collate 【校对规则】];
            
            
            filed:指定列名
            datatype:指定列类型
            
            code:
                创建一张表,含有id/name/password/birthday字段
                create table user(
                    id int,
                    name varchar(20),
                    password varchar(6),
                    birthday date
                );
            
            
            注意:
                1》创建表前要使用use dbname语句指明使用的数据库。
    2)修改表的列
            1》追加列
                alter table 【表名】
                add     【列名】 datatype [default 默认值][,【列名】 datatype    [default 默认值]];
                
            2》修改列
                alter table 【表名】
                modify     【列名】 datatype [default 默认值] [,【列名】 datatype [default 默认值]];
                
            3》删除列
                alter table    【表名】
                drop      【列名】;
                
    3)修改表的名称
            rename table 【原表名】 to 【新表名】;
    4)修改表的字符集
            alter table 【表名】 character set 【字符集】;
    5)删除表
            drop table [if exists] table_name;
    6)修改列名(其功能还包括修改列数据)
            alter table user
            change column 【原列名】 【新列名】 datatype;
        code:
            修改列名name为username:
            alter table user
            change column name username varchar(20);
    7)其它:
        查看表的描述结构
            desc 【表名】;
      显示数据库中所有的表
            show tables;
        显示表的创建信息
            show create table 【表名】;
        


三、MySQL常用数据类型
    一】时间日期
        1)date
            格式为:‘2011-10-23‘
            
            code:
                create table user(
                    id int,
                    name varchar(20),
                    password varchar(6),
                    birthday date
                );
                insert into user(id,name,password,date)  values(1,‘jack‘,‘568231252‘,‘2011-10-23‘);
        2)datetime        
            格式为:‘2011-10-23 17:17:17‘
            code:
                create table user(
                    id int,
                    name varchar(20),
                    password varchar(6),
                    birthday datetime
                );
                inser into user(id,name,password,date) values(1,‘jack‘,‘568231252‘,‘2011-10-23 17:17:17‘);
                
        3)timestamp(登录时间)【翻译:时间戳】
            没有设置时间的时候数据库会默认自动加上当前的系统时间。
                create table user(
                    id int,
                    name varchar(20),
                    password varchar(6),
                    birthday timestamp
                );
            
            
            code:
                ·date类型:

                    create table date(
                        birthday date
                    );
                    
                    show tables;
                    
                    desc date;
                    
                    insert into date(birthday)  values(‘2011-3-21‘);
                    desc date;
                    select * from date;
                    
                    
                    ·datetime类型:
                    
                    create table datetime(
                        birthday datetime
                    );
                    show tables;
                    desc datetime;
                    select * from datetime;
                    
                    insert into datetime(birthday) values(‘1992-09-12 01:34:25‘);
                    desc datetime;
                    select * from datetime;
                    
                    
                    ·timestamp(时间戳)
                    
                    create table timestamp(
                        id int,
                        birthday timestamp
                    );
                    
                    show tables;
                    desc timestamp;
            
        二】字符类型
                char(size)      固定长度
                varchar(size)        可变长度(自动节省空间)
                注意:
                        size最大为65536.
                
        三】text文本数据类型和bolob二进制数据类型    (比varchar更长的类型)
            tinytext/text/mediumtext/longtext --> 255B/64K/16M/4G大小的文本数据。
            tinyblob/blob/mediumblob/longblob --> 255B/64K/16M/4G大小的图片/音乐等二进制数据
            
            code:
                create table user(
                    bz text,
                    photo blob,
                    mp3    blob
                );
                
                
        四】数值类型
            1)bit(M):位,M为1~64
            2)int类型 【有无符号(默认)和有符号之分】
                tinyint[(N)]    [unsigned] [zerofill]        1个字节
                smallint[(N)]    [unsigned] [zerofill]        2个字节
                mediumint[(N)]    [unsigned] [zerofill]    3个字节
                int[(N)]                [unsigned] [zerofill]    4个字节
                bigint[(N)]        [unsigned] [zerofill]        8个字节
                
                注意:
                    N相当于C语言中的字节对齐。eg:5 表示数据占5位,且右对齐;若实际数据超过5位也完全显示输出,不会截断。
                code:
                create table user(
                    id int(5)
                );
                inser into user(id) values(99999);//ok的
            3)float类型
                float[(m,d)][unsigned][zerofill]
                    m:代表显示的长度(不包括小数点,截取后的数据不允许超过长度)
                    d:指定小数的位数(截取的时候会四舍五入)
                    
                code:
                    create table user(
                        salary float(6,2)
                    );
                    insert into user(salary) values(1234.12);
                    insert into user(salary) values(1234.123);//1234.12
                    insert into user(salary) values(1234.125);//1234.13
                    insert into user(salary) values(123445.12);//errror
        
        
        
        注意:
                1》定界符使用‘‘或者"",但部分数据库不支持"",优先推荐‘‘作为定界符。
                2》对于日期类型,MySQL数据库有一定的判断功能,写入‘2011-10-32‘就会错误         
                3》MySQL分为两类:
                        MyISAM数据库引擎(非关系型数据库):不支持表与表之间的查询,但查询速度快。
                        InnoDB数据库引擎(关系型数据库):支持表与表、支持事务安全,但查询速度稍慢。
        


四、MySQL中中文的编码问题
    思路:通过设置数据库对于各部分的编码方式来进行,而windows
                平台下的的编码方式为gbk/gb2312,所有有关部分设置为gbk/gb2312即可。
                
    一】暂时修改
        1》show variables like ‘character%‘;//查看当前数据库对于各个部分的编码方式
        2》set character_set_results=gbk;//设置输出到客户端的编码方式为gbk.
        3》set character_set_client=gbk;// 设置客户端输入的编码方式为gbk.    
        4》set character_set_connection=gbk;//设置连接的编码为gbk
            注意:
                1》再次进入后,查看结果则会出现乱码,即上次的设置是暂时的
    二】长久修改
        修改配置文件:my.ini.
            修改客户端的缺省编码方式为下列值
                default-character-set=gbk或gb2312
            注意:此种方法需要重新启动MySQL服务。
五、数据库的CRUD语句
    一】Insert语句
        格式:
            INSERT INTO    【表名】 [(column [, column...])]
            VALUES        (value [, value...]);
            
        code:
                insert into user values(value1, value2...);//此种方式必须符合表的默认格式
                insert into user(id,username,salary,image) values(5,‘马利‘,10000.123,null); //此种方式必须符合前面括号内的列的格式
        注意:
            插入空值,不指定或者insert into table value(null)
            
    二】update语句
        UPDATE     tbl_name
        SET col_name1=expr1 [, col_name2=expr2 ...]
        [WHERE where_definition]
        
        code:
            update user
            set salary= 6000
            where username=‘马利‘;
            
            //将jack的薪水在原有基础上增加1K
            update user
            set salary=salary+1000
            where username=‘jack‘;
            
    三】delete from语句/truncate table
    
            delete from tab_name
            [WHERE where_definition]
            
            1>删除表中名称为‘jack‘的记录
                delete from user where username=‘jack‘;
            2>删除所有记录
                delete from user;
            3>使用truncate删除表中记录
                truncate table user;
                
        总结:删除表的记录的方法
            1》delete from
                按行删除表中的记录,但是会保留表结构和表本身。
                适合删除数据量不大的数据。
                code:
                delete from user
                where username=‘jack‘;
            2》truncate table
                复制原表结构-->一次性删除整个表-->自动按照原表结构再创建一个空表
                适合删除数据量较大的数据,不能按条件删除一行数据。    
                code:
                    truncate table user;
            3》drop table
                删除表本身
                code:
                    drop table user;
                    
            注意:删除记录的时候,一定要注意表之间的关联关系。
                    
    四】查询    
        1》
        SELECT [DISTINCT] *|{column1|expression, column2|expression,..}
        FROM    table
        where 【条件】;        
        
        参数:    
        column指定列名。
        *号代表查询所有列。
        From指定查询哪张表。
        expression:表达式
        DISTINCT可选,指显示结果时,是否剔除重复数据
        
        2》SELECT column as 【列名别名】 from 【表名】;
        code:
            select name as 姓名,math+10 as 数学 from student;

五、where过滤器
    出现在from后面,where是按行筛选。
    1》比较运算符
        between ...and...        显示某一区间的值
        in(set)                        在set集合中的值
        like ‘关键字pattern‘    模糊查询  【%:零个或多个任意字符,_:一个任意字符;】
        is null / is not null    是否为空
    2》逻辑运算符    
        and/&&        多个条件同时成立
        or/||            多个条件任一成立
        not/!            不成立
    详见ppt。
    
    
六、排序子句
        格式:
        SELECT column1, column2. column3..
        FROM    table
        order by column asc|desc;
        1》升序
        order by 【列名|表达式】[as 【别名】] asc;
            或者
            order by 【列名|表达式】[as 【别名】];
        2》降序
            order by 【列名|表达式】 [as 【别名】]desc;
        注:
            1》NULL值为最小。
            2》默认为升序。
            3》升序:asc.降序:desc.
            4》order    by语句必须放在最后。
            
            
七、函数
    统计某列中的某行数据,若为*,取最大值。
    一】合计函数——count()
        Select count(*)|count(列名) from tablename
        [WHERE where_definition]
        注意:
                1》Count(列名)返回某一列,行的总数
                2》不统计NULL
    二】合计函数——sum()
        Select sum(列名)
        from tablename
        [WHERE where_definition]
        注意:
            1》Count(列名)返回某一列中行的总值
            2》统计非数值类型,返回0,无意义。
            
        
    三】平均函数-avg()
        Select avg(列名){,avg(列名)…}
        from tablename
        [WHERE where_definition]
        注意:
            AVG函数返回满足where条件的一列的平均值
        code:
            select avg(chinese+math+length)
            from student;
            
    四】最大和最小函数-max()和min()
        1》最大值
            Select max(列名) 
            from tablename
            [WHERE where_definition]
        2》最小值
            Select min(列名) 
            from tablename
            [WHERE where_definition]
        注意:
            1》可以对字符类型进行取值。根据码表。
            2》可以对date类型进行取值。max:最大日期。min:最小日期。
            
    注意:在网站中,多条件查询中用到
        select *
        from student
        where name like ‘%%‘;
        
        
        
        注意:这些函数常常于group by子句进行联用,其值则是对分组后每行中合并的列进行求值而得。
        eg:
            
        
        
    五】group by 子句
        作用:对表中内容按照列的类别进行分组
        格式:
            SELECT column1, column2. column3..
            FROM    table;
            group by column
            
    六】having 子句
        作用:过滤.
        SELECT column1, column2. column3..
        FROM    table;
        group by column
        having ...
        
    注意:where和having的区别:
        1》where:主要用于行过滤器
        2》having主要用于类别过滤器,通过用于group by后,
                            having可以使用合计函数。

    补充:#是sql的注释语句。

MySql入门