1.mysql导论

  虽然之前用过mysql一年多,但大多只是会用,深入了解的不多。所以想利用平时时间 系统的总结总结。

一.什么是数据库:(数据库软件)
    1).什么是数据库(软件):数据库(DB:DataBase)是一个软件,专门用于存储大量数据的。对于大量数据可以进行非常安全、快捷的管理。(内部有算法)
    2).什么是数据库管理系统:数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。
二.常见的数据库软件:
    1).MySQL : 中型数据库软件。早期都是免费的。后期被Oracle收购,从6.x版本开始收费。
    2).Oracle : Oracle公司出品,全球最大的、最出名的数据库软件。收费的。 //上亿条数据谁就比不了Oracle了
    3).SQLServer : 微软公司的。中型数据库软件。收费的。
    4).DB2:IBM公司的数据库产品,收费的。常应用在银行系统中.
    5).SQLite: 嵌入式的小型数据库,应用在手机端
 
    跟Java相关的数据库:MySQL,Oracle   。
三.数据库软件的内部结构:
    数据库软件:
        |--逻辑数据库(对应一个项目)
            |--表
                |--列(字段)
                |--行(数据)
            |--表
            ...
        |--逻辑数据库(对应一个项目)
        .....
四.数据库软件和Java的对应关系:
    java                            数据库 (软件)
   --------------------------------------------
    项目                           逻辑数据库
    类(JavaBean)             表
    类中的属性                 表中的字段
    类中属性的数据类型   表中字段的数据类型
    对象(Student对象)      表中一行记录
 
    (JavaBean:Java咖啡豆的由来,这是一种规范,是一个标准类,其实比POJO更广)
五.SQL语言的分类:
    1).什么是SQL : 结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
            普通话:各数据库厂商都遵循的ISO标准。
            方言:数据库特有的关键字。
    2).SQL语言的分类:
        1).DDL:数据定义语言。用来定义数据库对象:逻辑数据库,表,列等。关键字:create(创建),alter(修改),drop(删除)等
        2).DCL:数据控制语言。用来定义数据库的访问权限和安全级别,及创建用户。
        3).DML:数据操作语言。用来对数据库中表的记录进行更新。关键字:insert(添加),delete(删除),update(修改)等
        4).DQL:数据查询语言。用来查询数据库中表的记录。关键字:select,from,where等
六.数据库操作相关的语句:DDL
    1).创建数据库:
        A).create database 数据库名;
            例如:创建数据库:test_db
            create database test_db;
        B).create database 数据库名 character set 字符集;     (也可手动创建,还可以指定字符集)
    2).查看数据库MySQL服务器中的所有的数据库:
        show databases;
    3).删除数据库:
        drop database 数据库名;
    4).查看正在使用的数据库:
        select database();
    5).切换数据库:
        use 数据库名;(还有一种方式:就是手动切换)
  SQLYog的使用:
        SQLyog是一个易于使用的、快速而简洁的图形化管理MySQL数据库的工具,它能够在任何地点有效地管理你的数据库,而且它本身数完全免费的!
    1).在Query选项卡中编写SQL语句:
        1).注释:
            A).#注释: 单行注释
            B).-- 注释:单行注释(注意:两个--后有一个空格)
            C)./* 注释 */ : 多行注释
        2).在一个Query界面中可以编写多条SQL语句,选中某一条,可以单条运行。
        3).这个一个界面中的数据,可以保存起来。ctrl + s ,会存储为:xxx.sql的纯文本文件,使用记事本就可以打开。
 
 
七.表操作相关的SQL语句:
    1.创建表:
        create table 表名(
            字段名 数据类型(长度) [约束],          //int类型默认长度为 11;
            字段名 数据类型(长度) [约束],
            .....
            字段名 数据类型(长度) [约束]               //注意:最后一条没有 逗号!
        )
       例如:创建一个学员信息表:
        create table student(
            stuNo   int ,                   //int类型默认长度为11 ;
            name    varchar(100),
            age    int,
            sex    char(5)
        )
       组成:
       1).字段名:由程序员自行定义,一般跟我们"类"中的属性名相同。
       2).数据类型:是MySQL中的数据类型,有很多,下面详细说。
       3).长度:
             1).对于"字符串类型":表示"字符"数。
             2).对于"数值"类型:表示"数字的宽度"。
       4).约束
    2.关于MySQL中的数据类型:
    Java数据类型        MySQL数据库的数据类型
     -----------------------------------------------------
    整数:
    int                       int
    long                    int
 
    浮点:
    float                   float
    double               double
    decimal(M,N):M:表示一共有M位。N:小数部分是N位
 
    日期:
    String--(所以要这样表示'2018-04-04') --需要加引号
    Date                  date(日期)        YYYY-MM-DD
                             datetime(日期和时间)     YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59
 
    字符:
    char        char(1):长度是1的char
 
    布尔:
    boolean        int(0/1)
 
    字符串:
    String        char/varchar
    注意:Java中的char表示1个字符。MySQL中的char表示一个"字符串"
 
    注意:char和varchar的区别:
    1).char在MySQL中表示:定长的字符串。例如:设定字段类型为char(5)--->存储"abc"时--->硬盘上 --> "abc  "
                                                                       存储"a"时  --->硬盘上 --> "a    "(后面用4个空格补充)
    2).varchar在MySQL中表示:不定长的字符串。例如:设置字段类型为varchar(5) -->存储"abc"-->硬盘上 --"abc"
                                                                               存储"a"  -->硬盘上 -->"a"
    怎么选择:char的查询速度要快于varchar
    1).使用char : 对于字段的所有的值的长度如果全部相同,或者平均长度接近,变化不大时。
            例如:性别、手机号、身份证号、银行卡号、QQ....
    2).使用varchar : 对于字段的值的长度如果变化很大。
            例如:地址、简介、备注......
 
    大文本:
    String        XXXText
 
    文本二进制:
    byte[]        binary
 
 
    二进制文件(视频,图片)
    byte[]        XXXBlob
 
    3. 关于数据类型长度:
    char/varchar (5) : 字符的数量。表示最多5个字符,多余的会被截断;
    int(11) : 字符的宽度:int在MYSQL中其实占用的是4个字节。所以这里的字符宽度表示在zerofill状态下,可见的总的数据位数,如果
              不足这个位数,前面填充0.
          例如:建表:
            CREATE TABLE test2(
                id INT(4) ZEROFILL
            )
          向字段写入数据:
            1
            12345
          然后保存,然后刷新,会看到如下结果:
            0001
            12345
    decimal(10,2):表示此数字总位数为10位,小数部分2位。
 4.表操作相关语句_其它:
    1).查看数据库中的所有表:
        show tables;
    2).查看表结构:
        desc 表名;
    3).删除表:.
        drop table 表名;
    4).修改表:
        1).alter table 表名 add 列名 类型(长度) [约束];   
        作用:修改表添加列.
        例如:
        #1,为分类表添加一个新的字段为分类描述 varchar(20)
        ALTER TABLE category ADD `desc` VARCHAR(20);
        注意:desc这是个关键字,所以加符号,但这个不是单引号
        2).alter table 表名 modify 列名 类型(长度) 约束;
        作用:修改表修改列的类型长度及约束.
        例如:
        #2, 为分类表的描述字段进行修改,类型varchar(50) 添加约束 not null
        ALTER TABLE category MODIFY `desc` VARCHAR(50) NOT NULL;
 
        3).alter table 表名 change 旧列名 新列名 类型(长度) 约束;
        作用:修改表修改列名.
        例如:
        #3, 为分类表的分类名称字段进行更换更换为 snamesname varchar(30)
        ALTER TABLE category CHANGE `desc`description VARCHAR(30);
 
        4).alter table 表名 drop 列名;   
        作用:修改表删除列.
        例如:
        #4, 删除分类表中snamename这列
        ALTER TABLE category DROP description;
 
        5).rename table 表名 to 新表名;
        作用:修改表名
        例如:
        #5, 为分类表category改名成 category2
        RENAME TABLE category TO category2;
 
        6).alter table 表名 character set 字符集;
        作用:修改表的字符集
        例如:
        #6, 为分类表 category 的编码表进行修改,修改成 gbk
        ALTER TABLE category CHARACTER SET gbk;
 
 
八.记录操作相关的SQL语句----增、删、改、查
    1).添加:insert into
        1).有两个格式:
            A).insert into 表名 values(值1,值2,....,值n):
                例如:添加学员信息:
                    create table student(
                        stuNo int ,
                        name    varchar(100),
                        age    int,
                        sex    char(5)
                    )
                insert into student values(1,'张三',20,'男');      //记得加 ;  也可以同时增加多行数据(但需要同时选定多行)
                     注意:
                 1).值列表中的顺序,数量必须跟表中字段的顺序和数量相同。
                    如果年龄和性别不填:
                    insert into student values(1,'张三',null,null);
            -----------------------------------------------------------------------
            B).insert into 表名(字段1,字段2,....,字段n) values(值1,值2,....,值n)
                例如:添加学员信息,但年龄和性别不填:
                 insert into student(stuNo,name) values(3,'李四');
                 注意:
                 1).字段列表:可以是表中的所有字段,也可以是部分字段;可以不跟定义顺序相同。
                 2).值列表:数量和顺序必须和前面字段列表的数量和顺序相同。没有出现的字段,本次添加
                            操作自动添加为NULL.
 
        2).两种的区别:
            A).第一种适合:向一个表的所有字段,或者大部分字段添加数据时。
            B).第二种适合:向一个表的少部分字段添加数据时。
            总之:要SQL语句要易读,后期要易于维护(更改SQL语句)
 
    2).修改:update 表名 set 字段1 = 值,字段2 = 值, .... , 字段n = 值 where 条件;          //where条件就是筛选
        例如:修改"张三"的年龄为25
            update student set age = 25 where name = '张三';
        修改多个列:修改张三的年龄为20岁,性别:女
            update student set age = 20, sex = '女' where name = '张三';
    3).删除:delete from 表名 where 条件;
        例如:删除"张三"
            delete from student where name = '张三';
       关于清空表:
        1).delete from 表名:逐条删除,效率比较低。对于"自动增长"列,不改变基数。
        2).truncate 表名:先摧毁表,然后再根据原结构重新创建表。效率比较高。对于"自动增长"列,会重建基数。
    4).查询:select 字段列表   from 表名  where 条件
        1).简单查询
            1).查询所有商品:
                select * from product;          //注意 : *左右有空格; * 代表 所有列
            2).查询部分字段:
                select pname,price from product;                    //查询,部分列 (用部分字段代替*)
            3).使用别名:
                SELECT pname as '商品名称' ,price as '价格'  FROM product;     //注意: as 可以省略
            4).去掉重复值:
                SELECT DISTINCT price FROM product         // distinct
            5).对结果字段进行运算:
                select pname,price + 100 from product   //查一个字段,让它的价格+100,(原数据不变)
        2).条件运算符:
            1)"<":小于 :主要用于:数值类型、日期类型
                例如:查询商品价格小于2000元的商品
                    select * from product where price < 2000;
                      查询生产日期小于2018-04-04
                    select * from product where proDate < '2018-04-04';
            2)">":大于:主要用于:数值类型、日期类型
                例如:查询商品价格大于2000元的商品
                    select * from product where price > 2000;
                      查询生产日期大于2018-04-04
                    select * from product where proDate > '2018-04-04';
            3)">=":大于等于:主要用于:数值类型、日期类型
                例如:查询商品价格大于等于2000元的商品
                    select * from product where price >= 2000;
                      查询生产日期大于等于2018-04-04
                    select * from product where proDate >= '2018-04-04';
            4)"<=":小于等于:主要用于:数值类型、日期类型
                例如:查询商品价格小于等于2000元的商品
                    select * from product where price <= 2000;
                      查询生产日期小于等于2018-04-04
                        select * from product where proDate <= '2018-04-04';
            5)"=":等于:主要用于:数值类型、日期类型、字符串
                例如:查询商品价格等于2000元的商品
                    select * from product where price = 2000;
                      查询生产日期等于2018-04-04的商品
                    select * from product where proDate = '2018-04-04';
                      查询所有的服装类商品
                    select * from product where category_id = '服装';
            6)"!="或者"<>":    不等于:主要用于:数值类型、日期类型、字符串
                例如:查询商品价格不等于2000元的商品
                    select * from product where price != 2000;
                      查询生产日期不等于2018-04-04的商品
                    select * from product where proDate <> '2018-04-04';
                      查询所有的非服装类商品
                    select * from product where category_id <> '服装';
              
        3).逻辑运算符:
            1).and : 与,语义:并且,相当于Java的&&
                例如:查询所有商品价格在2000(包含)到3000(包含)元之内的商品信息
                    select * from product where price >= 2000 and price <= 3000;
                      查询2017年2月份生产的所有商品:
                    select * from product where proDate >= '2017-02-01' and proDate <= '2017-02-28';
                      查询所有价格高于2000元的服装类商品
                        select * from product where price > 2000 and category_id = '服装';
            2).or  : 或,语义:或者,相当于Java的||
                例如:查询商品价格不在2000元到3000元之间的商品:
                    select * from product where price < 2000 or price > 3000;
 
            3).not : 非,语义:不是..,相当于Java的!
                例如:查询商品价格不等于2000元的商品
                    select * from product where price != 2000;
                    或者
                    select * from product where not price = 2000;
        4).范围查询:between ...(包含) and ....(包含) ---可以用于:数值类型、日期类型
            例如:查询所有2017年2月份生产的商品
                select * from product where proDate between '2017-02-01' and '2017-02-28';
                   查询所有价格在3000到10000元的商品
                    select * from product where price between 3000 and 10000;
            注意:必须between是小值
                      and    是大值
 
        5).多个值的or判断:in(值列表):---可以用于:数值类型、日期类型、字符串类型
            例如:查询ID为1,2,3,5,8的商品
                select * from product where pid = 1 or pid = 2 or pid = 3 or pid = 5 or pid = 8;
                或者
                select * from product where pid in(1,2,3,5,8);
        6).模糊查询:like  通配符:1).%:统配任意长度的任何字符;2)._:通配1个长度的任意字符;//一个下划线
            例如:查询商品名称中带有"花"字的商品
                select * from product where pname like '%花%';
                  查询商品名称中以"花"开头的商品:
                select * from product where pname like '花%';
                  查询商品名称是4个字,并且以"花"开头:
                select * from product where pname like '花___';
        7).查询空:
            例如:添加时:
                insert into product values(13,'山东大枣',50,null,null);     //null代表空的一种状态
                  查询:
                    select * from product where category_id is null;   //不能用 = null
            例如:添加:
                insert into product values(13,'山东大枣',50,'','');【以后不建议使用】
                  查询:
                select * from product where category_id = '';
 
 

 

作者: 仰望星空

出处: http://www.cnblogs.com/zs-notes/p/8716109.html

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在页面明显位置给出原文链接。

 

posted @ 2018-04-04 11:00  仰望星空的脚踏实地  阅读(257)  评论(0编辑  收藏  举报