zoukankan      html  css  js  c++  java
  • mysql数据库知识点总结

    一.数据库的基本操作

    --------------------------------------------------------------数据库的安装以后更新----------------------------------------------------------------------------------

    在Linux系统下:

    1.启动数据库服务:sudo service mysql start

    2.停止数据库服务:sudo service mysql stop

    3.重启数据库服务:sudo service mysql restart

    4.进入MySQL数据库:mysql -u用户名 -p密码

    5.创建一个数据库:create database 数据库名 charset='utf8';  注意:一定要写上数据库编码方式。否则会出现一系列的麻烦。

    6.查看创建数据库的语句:show create database 数据库名;

    7.查看当前所有数据库:show databases;  注意:这里没有小括号

    8.进入一个数据库:use 数据库名;

    9.查看当前正在用的数据库:select database();  注意:这里有小括号

    10.查看当前时间:select now();

    11.删除数据库:drop database 数据库名;

    二.数据的完整性

    数据类型:

    1.整数:int、bit

    2.小数:decimal  说明:decimal(5,2)表示该小数一共有五位数,其中小数占两位。

    3.字符串:varchar、char  说明:varchar(3)输入'ab',实际存储为'ab',输入'abcd',实际存储为'abc'。char(3)输入'ab',实际存储为'ab ',输入'abcd',实际存储为'abc'

    4.时间:date(2017-12-12)、time(12:30:54)、datetime(2017-12-12  12:30:54)

    5.枚举:enum

    数据的约束:

    1.主键:primary key  说明:primary key 相当于 not null 和 unique

    2.外键:foreign key

    3.非空:not null

    4. 唯一性:unique

    5.默认值:default

    6.取正数:unsigned

    7.主键自增:auto_increment

    三.表结构的基本操作

    1.创建一个student学生表:

    create table student(
        id int unsigned primary key auto_increment,  unsigned只能放在数据类型(int)的后面,放在约束后面直接报错,不要问我为什么,记住就行了。
        name varchar(10) not null,
        age int unsigned not null,
        height decimal(5,2) default 0,     写了默认值就不需要再写not null。
        gender enum("男","女") default "男",  这里默认值只能写enum中的汉字,不能写索引。
        birth date,
        is_delete bit default 0  bit只有两个取值0和1。这里不要再写逗号
    );  最后必须分号结束

    2.查看表格的创建语句:show create table student;

    3.查看表结构:desc student;

    4.查看所有的表格:show tables;

    5.删除表格:drop table student;

    6.添加一个addr字段,varchar(20),非空:alter table student add addr varchar(20) not null ;

    7.将addr改为address:alter table student change addr address varchar(20) not null;

    8.将address的varchar(20)改为varchar(50):alter table student modify address varchar(50) not null;

    9.删除address字段:alter table student drop address;

    四.数据的CRUD(create增加、retrieve检索、update更新、delete删除 )

    -------------------------------------------------------------------------待更新-----------------------------------------------------------------------------------

    五.SQL语句的强化

    准备数据:

    -- 创建 "京东" 数据库
    create database jing_dong charset=utf8;
    
    -- 使用 "京东" 数据库
    use jing_dong;
    
    -- 创建一个商品goods数据表
    create table goods(
        id int unsigned primary key auto_increment not null,
        name varchar(150) not null,
        cate_name varchar(40) not null,
        brand_name varchar(40) not null,
        price decimal(10,3) not null default 0,
        is_show bit not null default 1,
        is_saleoff bit not null default 0
    );
    -- 向goods表中插入数据
    
    insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default); 
    insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default);
    insert into goods values(0,'g150th 15.6英寸游戏本','游戏本','雷神','8499',default,default); 
    insert into goods values(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',default,default); 
    insert into goods values(0,'x240 超极本','超级本','联想','4880',default,default); 
    insert into goods values(0,'u330p 13.3英寸超极本','超级本','联想','4299',default,default); 
    insert into goods values(0,'svp13226scb 触控超极本','超级本','索尼','7999',default,default); 
    insert into goods values(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',default,default);
    insert into goods values(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default); 
    insert into goods values(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',default,default); 
    insert into goods values(0,'ideacentre c340 20英寸一体电脑 ','台式机','联想','3499',default,default); 
    insert into goods values(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',default,default); 
    insert into goods values(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default); 
    insert into goods values(0,'at7-7414lp 台式电脑 linux )','台式机','宏碁','3699',default,default); 
    insert into goods values(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',default,default); 
    insert into goods values(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',default,default); 
    insert into goods values(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',default,default); 
    insert into goods values(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',default,default); 
    insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default); 
    insert into goods values(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',default,default); 
    insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);
    +----+---------------------------------------+---------------------+------------+-----------+---------+------------+
    | id | name                                  | cate_name           | brand_name | price     | is_show | is_saleoff |
    +----+---------------------------------------+---------------------+------------+-----------+---------+------------+
    |  1 | r510vc 15.6英寸笔记本                 | 笔记本              | 华硕       |  3399.000 |        |            |
    |  2 | y400n 14.0英寸笔记本电脑              | 笔记本              | 联想       |  4999.000 |        |            |
    |  3 | g150th 15.6英寸游戏本                 | 游戏本              | 雷神       |  8499.000 |        |            |
    |  4 | x550cc 15.6英寸笔记本                 | 笔记本              | 华硕       |  2799.000 |        |            |
    |  5 | x240 超极本                           | 超级本              | 联想       |  4880.000 |        |            |
    |  6 | u330p 13.3英寸超极本                  | 超级本              | 联想       |  4299.000 |        |            |
    |  7 | svp13226scb 触控超极本                | 超级本              | 索尼       |  7999.000 |        |            |
    |  8 | ipad mini 7.9英寸平板电脑             | 平板电脑            | 苹果       |  1998.000 |        |            |
    |  9 | ipad air 9.7英寸平板电脑              | 平板电脑            | 苹果       |  3388.000 |        |            |
    | 10 | ipad mini 配备 retina 显示屏          | 平板电脑            | 苹果       |  2788.000 |        |            |
    | 11 | ideacentre c340 20英寸一体电脑        | 台式机              | 联想       |  3499.000 |        |            |
    | 12 | vostro 3800-r1206 台式电脑            | 台式机              | 戴尔       |  2899.000 |        |            |
    | 13 | imac me086ch/a 21.5英寸一体电脑       | 台式机              | 苹果       |  9188.000 |        |            |
    | 14 | at7-7414lp 台式电脑 linux )          | 台式机              | 宏碁       |  3699.000 |        |            |
    | 15 | z220sff f4f06pa工作站                 | 服务器/工作站       | 惠普       |  4288.000 |        |            |
    | 16 | poweredge ii服务器                    | 服务器/工作站       | 戴尔       |  5388.000 |        |            |
    | 17 | mac pro专业级台式电脑                 | 服务器/工作站       | 苹果       | 28888.000 |        |            |
    | 18 | hmz-t3w 头戴显示设备                  | 笔记本配件          | 索尼       |  6999.000 |        |            |
    | 19 | 商务双肩背包                          | 笔记本配件          | 索尼       |    99.000 |        |            |
    | 20 | x3250 m4机架式服务器                  | 服务器/工作站       | ibm        |  6888.000 |        |            |
    | 21 | 商务双肩背包                          | 笔记本配件          | 索尼       |    99.000 |        |            |
    +----+---------------------------------------+---------------------+------------+-----------+---------+------------+

    我们发现该数据库设计的有一些问题,是什么呢?

    电脑的每种类型(cate_name)对应好多种款式的电脑,每种品牌(brand_name)也对应好多种款式,显然不符合数据库设计的三范式。

    下面将goods表再拆分出两个表,分别是goods_cates商品类型表和goods_brands品牌表。

    ------------------------------------------------数据库的三范式以后更新----------------------------------------------------------------------------

    商品类型表的创建:

    1.创建goods_cates表:

    -- 创建商品分类表
    create table if not exists goods_cates(
        id int unsigned primary key auto_increment,
        name varchar(40) not null
    );

     2.将goods表中的cate_name同步到goods_cates表中的name:

    insert goods_cates(name) select cate_name from goods group by cate_name;(第一种插入方式)

    解释:先将goods表中的cate_name查询出来分好组,然后插入到goods_cates表中字段为name下。

    注意:必须指定good_cates中的字段,否则程序不知道把查询出来的cate_name插入到什么字段中。

    3.将goods_cates中的id同步到goods中:

    update goods join goods_cates on goods.cate_name = goods_cates.name set goods.cate_name = goods_cates.id;

    解释:可以将goods join goods_cates on goods.cate_name = goods_cates.name 这段代码看作一个整体,就是说先将goods表和goods_cates通过内连接建立一个虚表,然后更改goods.cate_name为goods_cates.id。

    商品品牌表的创建:

    1.创建goods_brands表同时插入数据:

    -- 在创建数据表的时候一起插入数据
    -- 注意: 需要对brand_name 用as起别名,否则name字段就没有值
    create table goods_brands (
        id int unsigned primary key auto_increment,
        name varchar(40) not null) select brand_name as name from goods group by brand_name;(第二种插入方式)

     2.同步goods中的数据(原理同上):

    update goods join goods_brands on goods.brand_name = goods_brands.name set goods.brand_name = goods_brands.id;

    最后的最后修改表结构,将cate_name改为cate_id,brand_name改为brand_id,这是一波新操作,瞧好:

    alter table goods change cate_name cate_id int unsigned not null,change brand_name brand_id int unsigned not null;

    最后goods表结果:

    ----+---------------------------------------+---------+----------+-----------+---------+------------+
    | id | name                                  | cate_id | brand_id | price     | is_show | is_saleoff |
    +----+---------------------------------------+---------+----------+-----------+---------+------------+
    |  1 | r510vc 15.6英寸笔记本                 |       5 |        2 |  3399.000 |        |            |
    |  2 | y400n 14.0英寸笔记本电脑              |       5 |        7 |  4999.000 |        |            |
    |  3 | g150th 15.6英寸游戏本                 |       4 |        9 |  8499.000 |        |            |
    |  4 | x550cc 15.6英寸笔记本                 |       5 |        2 |  2799.000 |        |            |
    |  5 | x240 超极本                           |       7 |        7 |  4880.000 |        |            |
    |  6 | u330p 13.3英寸超极本                  |       7 |        7 |  4299.000 |        |            |
    |  7 | svp13226scb 触控超极本                |       7 |        6 |  7999.000 |        |            |
    |  8 | ipad mini 7.9英寸平板电脑             |       2 |        8 |  1998.000 |        |            |
    |  9 | ipad air 9.7英寸平板电脑              |       2 |        8 |  3388.000 |        |            |
    | 10 | ipad mini 配备 retina 显示屏          |       2 |        8 |  2788.000 |        |            |
    | 11 | ideacentre c340 20英寸一体电脑        |       1 |        7 |  3499.000 |        |            |
    | 12 | vostro 3800-r1206 台式电脑            |       1 |        5 |  2899.000 |        |            |
    | 13 | imac me086ch/a 21.5英寸一体电脑       |       1 |        8 |  9188.000 |        |            |
    | 14 | at7-7414lp 台式电脑 linux )          |       1 |        3 |  3699.000 |        |            |
    | 15 | z220sff f4f06pa工作站                 |       3 |        4 |  4288.000 |        |            |
    | 16 | poweredge ii服务器                    |       3 |        5 |  5388.000 |        |            |
    | 17 | mac pro专业级台式电脑                 |       3 |        8 | 28888.000 |        |            |
    | 18 | hmz-t3w 头戴显示设备                  |       6 |        6 |  6999.000 |        |            |
    | 19 | 商务双肩背包                          |       6 |        6 |    99.000 |        |            |
    | 20 | x3250 m4机架式服务器                  |       3 |        1 |  6888.000 |        |            |
    | 21 | 商务双肩背包                          |       6 |        6 |    99.000 |        |            |
    +----+---------------------------------------+---------+----------+-----------+---------+------------+

    六.MySQL高级

     -----------------------------------------------------------------------待更新-------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    【网摘】Data Warehousing and BI Introduction
    【网摘】OLAP and Business Intelligence (ROLAP vs. MOLAP vs. HOLAP)
    [Oracle Issues]Wrong Password for User for Host Credentials in EM
    [Oracle Utility] Adrian Billington’s data_dump
    [Oracle Data Cartridge Interface] UserDefined Aggregation Functions
    【网摘】MVP (Passive View and Supervising Controller)
    SQL Techniques – Columns to Rows, Rows to Columns
    [Oracle Mgmt] Query Archivelog Mode, Change Archivelog Dest, etc.
    [Oracle SQL]Greatest and Least
    [Oracle 9i] Case Expression and Case Statement in 9i
  • 原文地址:https://www.cnblogs.com/RomanticLife/p/8138285.html
Copyright © 2011-2022 走看看