zoukankan      html  css  js  c++  java
  • MySQL基础

    一、MySQL说明

    1、数据库概述

    数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以通过SQL对数据库中的数据进行增加、修改、删除及查询操作。

    数据库中的记录是有行有列的数据库称为关系型数据库,与之相反的就是NoSQL(Not Only SQL)数据库了。

    数据库管理系统(DataBase Management System,DBMS):指一种[操作和管理数据库]的大型软件,用于建
    立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据(记录)。

    常见的数据库管理系统有:MySQL、Oracle、SQLServer等

    2、MySQL简介

    MySQL 是当前最流行的关系型数据库管理系统,在WEB应用方面 MySQL1是最好的RDBMS应用软件之一。

    MySQL发展历程:

    • 1996年,MySQL 1.0发布

    • 1996年10月,MySQL 3.11.1发布(MySQL没有2.x版本),最开始只提供Solaris下的二进制版本。一个月后,Linux版本出现。

    • 1999~2000年,MySQL AB公司在瑞典成立。期间开发出了Berkeley DB引擎, 由于BDB支持事务处理,MySQL开始支持事务处理。

    • 2000年,MySQL不仅公布自己的源代码,并采用GPL(GNU General Public License)许可协议,正式进入
      开源世界。同年4月,MySQL对旧的存储引擎ISAM进行了整理,将其命名为MyISAM。

    • 2001年,MySQL集成存储引擎InnoDB,这个引擎不仅能支持事务处理,并且支持行级锁。后来该引擎被证明是最为成功的MySQL事务存储引擎,MySQL与InnoDB的正式结合版本是4.0。

    • 2008年1月,MySQL AB公司被Sun公司收购,MySQL数据库进入Sun时代。

    • 2009年4月,Oracle公司收购Sun公司,自此MySQL数据库进入Oracle时代,而其存储引擎InnoDB在2005年就被Oracle公司收购。

    • 2010年12月,MySQL 5.5发布,其主要新特性包括半同步的复制及对SIGNAL/RESIGNAL的异常处理功能的支持,最重要的是InnoDB存储引擎成为MySQL的默认存储引擎

    3、SQL简介

    【SQL是Structured Query Language的缩写】,是一种访问关系型数据库的标准语言,它的前身是著名的关系数据库原型系统System R所采用的SEQUEL语言。一般认为SQL92是是SQL的国际标准。MySQL等数据库都是在SQL92或者SQL99这些国际SQL标准基础之上扩展出自己的SQL语句,如MySQL中的limit关键字。

    SQL分为如下几类:

    • 数据定义语言,简称【DDL】(Data Definition Language),用来定义数据库对象:数据库,表,列等。
      关键字:create,alter,drop等

    • 数据操作语言,简称【DML】(Data Manipulation Language),用来对数据库中表的记录进行更新。关键
      字:insert,delete,update等

    • 数据控制语言,简称【DCL】(Data Control Language),用来定义数据库的访问权限和安全级别,及创建
      用户;关键字:grant等

    • 数据查询语言,简称【DQL】(Data Query Language),用来查询数据库中表的记录。关键字:select,
      from,where等

    二、SQL语句

    1、DDL语句

    1.1、数据库操作

    创建数据库
    create database 数据库名;
    create database 数据库名 character set 字符集;
    
    查看数据库

    查看数据库服务器中的所有的数据库:

    show databases;
    

    查看某个数据库的定义的信息:

    show create database 数据库名;
    
    删除数据库
    drop database 数据库名称;
    
    其他操作

    切换数据库:

    use 数据库名;
    

    查看正在使用的数据库:

    select database();
    

    1.2、表操作

    字段类型

    在进行表操作过程中涉及到表中的字段,下表列出了MySQL中的字段类型:

    分类 类型名称 说明
    整数 tinyInt 很小的整数
    整数 smallint 小的整数
    整数 mediumint 中等大小的整数
    整数 int(integer) 普通大小的整数
    小数 float 单精度浮点数
    小数 double 双精度浮点数
    小数 decimal(m,d) 压缩严格的定点数
    日期 year 1901~2155
    日期 time -838:59:59~838:59:59
    日期 date 1000-01-01~9999-12-03
    日期 datetime YYYY-MM-DD HH:MM:SS
    日期 timestamp eg:UTC-2038-01-19 03:14:07UTC
    文本、二进制 char(m) m为0~255之间整数
    文本、二进制 varchar(m) m为0~65535之间整数
    文本、二进制 tinyblob 长度0~255字节
    文本、二进制 blob 长度0~65535字节
    文本、二进制 mediumblob 长度0~167772150字节
    文本、二进制 longblob 长度0~4294967295字节
    文本、二进制 tinytext 长度0~255字节
    创建表
    create table 表名(
    	字段名 类型(长度) 约束,
    	字段名 类型(长度) 约束
    );
    

    此处涉及到单表约束,包括

    • 主键约束:primary key
    • 唯一约束:unique
    • 非空约束:not null

    其中,主键约束 = 唯一约束 + 非空约束

    查看表

    查看数据库中的所有表:

    show tables;
    

    查看表结构:

    desc 表名;
    
    删除表
    drop table 表名;
    
    修改表
    # 修改表添加列
    alter table 表名 add 列名 类型(长度) 约束;
    # 修改表修改列的类型长度及约束
    alter table 表名 modify 列名 类型(长度) 约束;
    # 修改表修改列名
    alter table 表名 change 旧列名 新列名 类型(长度) 约束;
    # 修改表删除列
    alter table 表名 drop 列名;
    # 修改表名
    rename table 表名 to 新表名;
    # 修改表的字符集
    alter table 表名 character set 字符集;
    

    2、DML语句

    插入记录

    # 向表中插入某些列
    insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..);
    # 向表中插入所有列
    insert into 表 values (值1,值2,值3..);
    # 向表中插入查出数据
    insert into 表 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表
    insert into 表 values select * from 表
    

    注意:

    1. 列名数与values后面的值的个数相等
    2. 列的顺序与插入的值得顺序一致
    3. 列名的类型与插入的值要一致
    4. 插入值得时候不能超过最大长度
    5. 值如果是字符串或者日期需要加引号(一般是单引号)

    更新记录

    update 表名 set 字段名=值,字段名=值;
    update 表名 set 字段名=值,字段名=值 where 条件;
    

    注意:

    1. 列名的类型与修改的值要一致
    2. 修改值得时候不能超过最大长度
    3. 值如果是字符串或者日期需要加引号

    删除记录

    delete from 表名 [where 条件];
    

    区分【delete from 表名】与【truncate table 表名】:

    • delete :一条一条删除,不清空auto_increment记录数。
    • truncate :直接将表删除,重新建表,auto_increment将置为零,从新开始。

    3、DQL语句

    现有一数据表product,其创建语句如下:

    CREATE TABLE product (
    	pid INT PRIMARY KEY AUTO_INCREMENT, #自增加AUTO_INCREMENT
    	pname VARCHAR(20),#商品名称
    	price DOUBLE, #商品价格
    	pdate DATE, # 日期
    	sid VARCHAR(20) #分类ID
    );
    

    简单查询

    简单查询关键字:selectfrom

    查询所有的商品:

    select * from product;
    

    查询商品名和商品价格:

    select pname,price from product;
    

    别名查询,使用的as关键字,as可以省略的

    表别名:

    select * 1 from product as p;
    

    列别名:

    select pname as pn from product;
    

    去掉重复值:

    select distinct price from product;
    

    查询结果是表达式(运算查询):

    将所有商品的价格+10元进行显示

    select pname,price+10 from product;
    

    条件查询

    条件查询关键字:where

    where之后条件语句的写法如下句所示:

    运算符 类型 说明
    比较运算符 <、>、<=、>=、=、<> d大于、小于、大于(小于)等于、不等于
    比较运算符 between ... and ... 在某一区间,in(1,100)
    比较运算符 like '_an%' 模糊查询,like语句中,%代表零或多个任一字符,_代表一个字符
    比较运算符 is null 判断是否为空
    逻辑运算符 and 多条件同时成立
    逻辑运算符 or 多条件任一成立
    逻辑运算符 not 不成立

    如查询价格大于60的产品:

    select * from product where price > 60;
    

    查询id在区间中:

    select * from product where pid in (2,5,8);
    

    排序

    排序关键字:order by,其中desc是降序,asc是升序。

    查询所有的商品,按价格降序:

    select * from product 1 order by price desc;
    

    聚合函数

    聚合函数又称组函数,通常只对单列操作

    常用的聚合函数:

    sum():求某一列的和
    avg():求某一列的平均值
    max():求某一列的最大值
    min():求某一列的最小值
    count():求某一列的元素个数
    

    如查询所有商品的价格的总和:

    select sum(price) from product;
    

    分组

    分组关键字:GROUP BYHAVING

    如根据cid分组,分组统计每组商品的平均价格,并且平均价格> 60

    select cid,avg(price) from product group by cid having avg(price)>60;
    

    注意:

    • select语句中的列(非聚合函数列),必须出现在group by子句中
    • group by子句中的列,不一定要出现在select语句中
    • 聚合函数只能出现select语句中或者having语句中,一定不能出现在where语句中。

    其他

    union集合的并集(不包含重复记录),unionall集合的并集(包含重复记录)

  • 相关阅读:
    一目了然卷积神经网络
    浅析 MVC Pattern
    程序员读书清单
    “数据中台”的再思考
    火锅、报表与数据库的故事
    从NoSQL到NewSQL,谈交易型分布式数据库建设要点
    从架构特点到功能缺陷,重新认识分析型分布式数据库
    YCSB测试HBase远程完全分布式集群
    NoSQL性能测试工具YCSB-Running a Workload
    再谈数据库事务隔离性
  • 原文地址:https://www.cnblogs.com/liuyi6/p/10440169.html
Copyright © 2011-2022 走看看