zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    没有谁是不可取代的
    javascript mvc
    12种JavaScript MVC框架之比较
    windows 下编译libcurl
    PJSIP开发指南-第二章
    URL的字符编码
    unimrcp plugin 分析
    替换unimrcp的VAD模块
    WebRTC的VAD 过程解读
    unimrcp-voice-activity语音检测
  • 原文地址:https://www.cnblogs.com/zs-notes/p/8716109.html
Copyright © 2011-2022 走看看