数据库Database
一、创建数据库
1、认识数据库
1.概念:长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据仓库。
2.作用:保存、管理数据。
3.关系型数据库(SQL):
MySQL、Oracle、SQL Server、SQLite、DB2
4.非关系型数据库(NOSQL):
Redis、MongoDB
2、MySQL数据库
1.概念:是现流行的开源、免费的关系型数据库。
2.特点:
1、免费、开源数据库。
2、小巧、功能齐全。
3、使用便捷。
4、可运行于Windows或Linux操作系统。
5、可适用于中小型甚至大型网站应用。
3、数据库管理软件
可手动操作、管理MySQL数据库的软件工具;特点:易用,简洁,图形化,常用的有以下两个:
1、SQLyog;
2、Navicat;
4、命令行操作数据库
1、连接数据库
MySQL -h 服务器主机地址 -u 用户名 -p
输入密码
2、创建数据库
CREATE DATABASE 数据库名
3、删除数据库
DROP DATABASE 数据库名
4、查看数据库
SHOW DATABASES
5、使用数据库
USE 数据库名
6、创建数据表
CREATE TABLE [ IF NOT EXISTS ] `表名` (
`字段名1` 列类型 [ 属性 ] [ 索引 ] [注释] ,
`字段名2` 列类型 [ 属性 ] [ 索引 ] [注释] ,
… …
`字段名n` 列类型 [ 属性 ] [ 索引 ] [注释]
) [ 表类型 ] [ 表字符集 ] [注释] ;
1、字段名与表名上的反引号 (可选、区别于单引号):用于区别MySQL保留字与普通字符而引入的。
2、列类型:规定数据库中该列存放的数据类型,分为:数值类型,字符串类型,日期和时间型数值类型,NULL值
数值类型
字符串类型
日期和时间型数值类型
表类型:MySQL的数据表的类型:
MyISAM、InnoDB 、HEAP、BOB、CSV等;
最常见的MyISAM与InnoDB类型
7、删除数据表
DROP TABLE [ IF EXISTS ] 表名
IF EXISTS 为可选,判断是否存在该数据表。
如删除不存在的数据表会抛出错误。
二、管理数据库
1、数据管理
1、数据库意义:数据存储,数据管理。
2、管理数据库数据方法:通过SQLyog等管理工具管理数据库数据,通过DML语句管理数据库数据
(INSERT ( 添加数据语句 )
UPDATE ( 更新数据语句 )
DELETE ( 删除数据语句 ))。
2、添加数据
INSERT INTO 表名 [ ( 字段1, 字段2, 字段3, … ) ]
VALUES ( '值1', '值2', '值3', …)
1、字段或值之间用英文逗号隔开。
2、“字段1, 字段2…”该部分可省略,但添加的值务必与表结构数据列顺序相对应,且数量一致。
3、可同时插入多条数据,values 后用英文逗号隔开。
3、更新数据
UPDATE 表名 SET column_name = value
[ , column_name2 = value2, …. ]
[ WHERE condition ];
1、column_name 为要更改的数据列。
2、value 为修改后的数据,可以为变量、具体值、表达式或者嵌套的SELECT结果。
3、condition为筛选条件,如不指定则修改该表的所有列数据。
where运算符
4、删除数据
DELETE FROM 表名 [ WHERE condition ];
1、condition为筛选条件,如不指定则删除该表的所有列数据。
TRUNCATE [TABLE] table_name;
1、TRUNCATE命令用于完全清空表数据,但表结构、索引、约束等不变。
区别于DELETE命令
相同
1、都能删除数据、不删除表结构,但TRUNCATE 速度更快。
不同
1、使用TRUNCATE TABLE重新设置AUTO_INCREMENT计数器。
2、使用TRUNCATE TABLE不会对事务有影响。
三、查询数据库
SELECT [ALL | DISTINCT]
{ * | table.* | [ table.field1 [ as alias1] [, table.field2 [as alias2]][, …]] }
FROM table_name [ as table_ alias ]
[ left|out|inner join table_name2 ] #联合查询
[ WHERE … ] #指定结果需满足的条件
[ GROUP BY …] #指定结果按照哪几个字段来分组
[ HAVING …] #过滤分组的记录必须满足的次要条件
[ ORDER BY… ] #指定查询记录按一个或者多个条件排序
[ LIMIT { [ offset,] row_count | row_count OFFSET offset }] ;
#指定查询的记录从哪条至哪条
1、单表查询
1、select * from 表名 ; 查询整张表。
2、select 列名,列名,列名 from 表名 ; 查询某些列。
3、select 列名,列名,列名 from 表名1,表名2 ;查询多个表多个列。(如果两张表里面有列名一样,那么需要在前面列
名前加<表名.>,就是<表名.列名>)。
2、多表联查
1、内连接 ( inner join)
SELECT 字段1,字段2,… FROM table_1
INNER JOIN table_2
ON table_1.字段x = table_2.字段y;
1、INNER JOIN 与 JOIN 是相同的;
2 、如table_1中的行在table_2中没有匹配,则不返回;
2、左外连接(LEFT JOIN)
SELECT 字段1,字段2,… FROM table_1
LEFT [ OUTER ] JOIN table_2
ON table_1.字段x = table_2.字段y;
从左表(table_1)中返回所有的记录,即便在右(table_2)中没有匹配的行。
3、右外连接(RIGHT JOIN)
SELECT 字段1,字段2,… FROM table_1
RIGHT [ OUTER ] JOIN table_2
ON table_1.字段x = table_2.字段y;
从右表(table_2)中返回所有的记录,即便在左(table_1)中没有匹配的行。
4、JOIN对比
3、查询条件
1、AS子句作用:可给数据列取一个新别名,可给表取一个新别名,可把经计算或总结的结果用另外一个新名称来代替。
AS用法:
SELECT 列名 AS “学号” FROM 表名;
SELECT 表名.列名 FROM 表名 AS a;
SELECT 列名+1 AS Tel FROM 表名;
2、DISTINCT关键字作用:去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条。
SELECT DISTINCT 字段名1, 字段名2... FROM 表名
3、where条件语句:用于检索数据表中符合条件的记录,搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假,搜索条件的组成:
1、逻辑操作符。
2、比较操作符。
数值数据类型的记录之间才能进行算术运算
相同数据类型的数据之间才能进行比较
4、BETWEEN AND范围查询
SELECT 字段列1,字段2 ,…FROM 表名
WHERE 字段x BETWEEN 值1 AND 值2
等同于 >= 和 <= 联合使用
5、LIKE模糊查询
在WHERE子句中,使用LIKE关键字进行模糊查询:
1、与“%”一起使用,表示匹配0或任意多个字符。
2、与“_”一起使用,表示匹配单个字符。
6、IN进行范围查询
SELECT 字段列1,字段2 ,…FROM 表名
WHERE 字段x IN ( 值1,值2,值3…)
查询的字段x的值,至少与括号中的一个值相同,多个值之间用英文逗号隔开。
7、ORDER BY排序
对SELECT语句查询得到的结果,按某些字段进行排序,与DESC(降序)或ASC(升序)搭配使用,默认为ASC(升序)。
Order by 字段1 ; 按字段1升序(默认asc升序)
Order by 字段1 desc ; 按字段1降序
Order by 字段1 desc , 字段2 asc ;
按字段1降序,如果字段1中有重复值,在按字段2进行升序或降序排列。
8、LIMIT
LIMIT [m,]n 或 LIMIT n OFFSET m
限制SELECT返回结果的行数
m 制定第一个返回记录行的偏移量
n 制定返回记录行的最大数目
m不指定则偏移量为0,从第一条开始返回前n条记录,LIMIT 常用于分页显示。
例如
SELECT * FROM `result` LIMIT 5 #返回前5条记录
SELECT * FROM `result` LIMIT 5,10 #返回6-15条记录
9、GROUP BY分组
1、对所有的数据进行分组统计;
2、分组的依据字段可以有多个,并依次分组;
3、与HAVING结合使用,进行分组后的数据筛选。
10、上下连接
用union ; union all
Union:连接并去重
Union all:连接全部,将多张列数相同的表连接起来。
(SELECT sc.cid,sc.score
FROM sc
WHERE sc.cid=01
ORDER BY sc.score DESC LIMIT 1000)
UNION ALL
(SELECT sc.cid,sc.score
FROM sc
WHERE sc.cid=02
ORDER BY sc.score DESC LIMIT 1000)
如果需要整体排序,只需要在最后进行排序就行,
如果每张表需要单独排序再连接,则需要在排序关键词后加LIMIT,limit 其后的数字要大于多张表放一起后的行数。
四、设计数据库
设计数据库的步骤
• 收集信息
• 标识实体 (Entity)
• 标识每个实体的属性(Attribute)
• 标识实体之间的关系(Relationship)
• 转化E-R图为数据库模型图
• 使用三大范式规范数据库表的设计
1、第一范式的目标是确保每列的原子性:
• 如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)。
2、 第二范式 (2nd NF)
• 第二范式要求每个表只描述一件事情。
3、第三范式 (3nd NF)
• 如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF) :与主键列有直接关系而没有间接关系。