1.0 数据库介绍
1.数据库(database)简称DB,实际上就是一个文件集合,是一个存储数据的仓库,本质就是一个文件系统,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查等操作。
2.数据库存储数据特点
• 持久化存储
• 读写速度极高
• 保证数据的有效性
• 对程序支持非常好,容易扩展
3.数据库的分类
• 关系型数据库:可以保存现实生活中的各种关系数据,数据库中存储数据以表为单位;主流关系型数据库:MySQL,Oracle,SQLServer等
• 非关系型数据库:通常用来解决某些特定的需求,比如高并发访问。主流非关系型数据库:Redis,Mongodb,memacache等
2.0 MYSQL安装
2.1 使用的工具
- MySQL直接安装
- PhPStudy安装,PhPStudy非常适合用来搭建网站,是一个集成开发环境。
- 图形界面管理工具:
SQLyog介绍 :SQLyog 是一个快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理数据库,由业界著名的Webyog公司出品。也是一个开源软件。
3.0 语法基础
SQL介绍
SQL是结构化查询语言,是一种用来操作RDBMS(关系型数据库管理系统)的数据库语言,当前关系型数据库都支持使用SQL语言进行操作,也就是说可以通过SQL操作oracle,sql server,mysql等关系型数据库。
SQL语句主要分为
• DDL语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。
• DML语句:数据操纵语句,用于添加、删除、更新、和查询数据库记录,并检查数据完整性
• DCL语句:数据控制语句,用于控制不同数据段直接许可和访问级别的语句。
数据完整性
在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束。
常用数据类型
• 数值类型
• 日期时间类型
• 字符串类型
数值类型
整数类型 | 无符号类型 | 有符号类型 |
---|---|---|
tinyint(size) | -128~127 | 0·255 |
smallint(size) | -32768~32767 | 0·65535 |
mediumint(size) | -8388608~8388607 | 0·16777215 |
int(size) | -2147483648~2147483647 | 0·4294967295 |
bigint(size) | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
小数类型 | 描述 |
---|---|
FLOAT(size,d) | 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
DOUBLE(size,d) | 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
DECIMAL(size,d) | 作为字符串存储的 DOUBLE 类型,允许固定的小数点。(定点数类型)。 |
字符串类型
字符串类型 | 字节大小 | 示例 |
---|---|---|
char(size) | 0·255 | char(3)输入’ab’,实际存储为’ab ‘,输入’abcd’,实际存储为’abc’ |
varchar(size) | 0·65535 | varchar(3)输入’ab’,实际存储为’ab’,输入’abcd’,实际存储为’abc’ |
枚举类型
枚举类型英文为ENUM,对1·255个成员的枚举需要1个字节存储;对于255~65535个成员,需要2个字节存储。最多允许65535个成员。创建方式:enum(“M”,“F”).
日期类型
数据类型 | 描述 |
---|---|
date() | 日期。格式:YYYY-MM-DD ,注释:支持的范围是从 ‘1000-01-01’ 到 ‘9999-12-31’ |
datetime() | 日期。格式:日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS,注释:支持的范围是从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ |
time() | 时间。格式:HH:MM:SS 注释:支持的范围是从 ‘-838:59:59’ 到 ‘838:59:59’ |
year() | 2 位或 4 位格式的年,4 位格式:1901 到 2155。2 位格式:70 到 69,表示从 1970 到 2069 |
timestamp() | 时间戳。格式:YYYY-MM-DD HH:MM:SS.注释:支持的范围是从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC |
注意
• decimal表示定点小数,如decimal(5,2)表示共存5位数,小数占2位。不写则默认为decimal(10,0)
• char表示固定长度的字符串,如char(3),如果填充’ab’时会补一个空格为’ab ’
• varchar表示可变长度的字符串,如varchar(3),填充’ab’时就会存储’ab’
• 对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径
• 枚举类型不区分大小写
约束
• 主键primary key:物理上存储的顺序
• 非空not null:此字段不允许填写空值
• 惟一unique:此字段的值不允许重复(身份证号,银行卡号等)
• 默认default:当不填写此值时会使用默认值,如果填写时以填写为准
• 外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常
4.0 SQL语法使用
4.1操作数据库(DDL)
连接数据库
mysql -u用户名 -p
enter password:密码
查看已经创建的数据库
SHOW DATABASES;
注意
• mysql不严格区分大小写
• 分号作为结束符,必须写
查看数据库版本
查看数据库版本
select version();
创建数据库
create database数据库名
;
create database 数据库名
charset=utf8;
注意:charset 指定编码为utf8
查看创建数据库的命令
show create database 数据库名;
查看当前使用的数据库
select database();
使用数据库
use 数据库名;
删除数据库
drop database 数据库名;
4.2 操作数据表
查看当前数据库中所有表
show tables;
创建表
create table 表名(字段,类型,约束);
查看表的创建语句
show create table 表名;
查看表的描述信息
desc 表名;
添加表字段
alter table 表名 add 字段,类型;
修改表字段
alter table 表名 modify 字段,类型; 不重命名
alter table 表名 change 老字段 新字段 类型及约束; 将字段重命名
删除表字段
alter table 表名 drop 字段;
4.3操作数据
新增数据
整行插入:
insert into 数据表名 values(值1,值2,值3…);
指定列中插入数据:
INSERT INTO 表名 (字段1, 字段2,…) VALUES (值1,值2,…);
指定列中插入多条数据
insert into 表名(字段1,字段2…)values(值1,值2…),(值1,值2…);
修改数据
updata 表名 set 字段1=新值 ,字段2=新值 [WHERE 条件];
删除数据
DELETE FROM 数据表名 [WHERE 条件]; 这是物理删除,不推荐使用。
查询数据
查询整个表数据
select * from 表名;
查询指定字段数据
select 字段1,字段2,from 数据表名;
查询指定字段数据,并给字段起别名
select 字段1 as 别名,字段2 as 别名 from 数据表名;
查询指定字段并去重
select distinct 字段1 from 数据表名;
where子句
where子句通常结合增删改查使用,用于做筛选的条件。
比如,查询当id=1的数据
select * from 表 where id = 1;
不仅如此,经常结合运算符使用。
模糊查询
like关键字用来进行模糊查询,并且结合%或者_使用。
% 表示任意多个任意字符
_ 表示一个任意字符
范围查询
in 表示在一个非连续的范围内
SELECT * FROM students WHERE age IN(18,20);找出表中年龄在18-20的人。
between…and…表示在连续的范围内
SELECT * FROM students WHERE id BETWEEN 2 AND 4;找出表中 id号 2-4的数据。
空判断
is null 判断空
select * from teacher where gender is null;
is not null 判断非空
select * from teacher where gender is not null;
常用聚合函数
- count() 总数
select count(*) from teacher; - max() 最大值
select max(tid) from teacher; - min() 最小值
select min(tid) from teacher; - sum 求和
select sum(age) from teacher where gender=1; - avg 平均值
select avg(age) from teacher where gender=2; 默认保存4位小数
select round(avg(age),2) from teacher where gender=2;
使用round()方法可以设置保留几位小数。