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 表
注意:
- 列名数与values后面的值的个数相等
- 列的顺序与插入的值得顺序一致
- 列名的类型与插入的值要一致
- 插入值得时候不能超过最大长度
- 值如果是字符串或者日期需要加引号(一般是单引号)
更新记录
update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 条件;
注意:
- 列名的类型与修改的值要一致
- 修改值得时候不能超过最大长度
- 值如果是字符串或者日期需要加引号
删除记录
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
);
简单查询
简单查询关键字:select
、from
查询所有的商品:
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 BY
、HAVING
如根据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
集合的并集(包含重复记录)