Fork me on GitHub

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集合的并集(包含重复记录)

posted @ 2019-02-26 21:05  紫焱luis  阅读(157)  评论(0编辑  收藏  举报