数据库基本概述
无论是传统的软件,还是互联网网站,或者是移动端的应用,都需要
处理数据。数据库技术主要研究如何有效地管理和存取大量数据资源。
数据与数据库
1.数据 数据是人们为反映客观世界而记录下来的可以鉴别的物理符号。
2. 数据处理 数据是重要的资源,人,人们对收集到的大量数据进行加工、
整理、转换,可以从中获取有价值的信息。数据处理就是指将数据转换成
信息的过程,是对数据进行收集、储存、加工、传播一系列的总和。
3.数据管理 数据处理的中心问题是数据管理。数据管理是对数据进行分类、
组织、编码、储存、检索与维护的操作。
4.数据库数据 数据库是储存在一起的互有联系的数据集合。*数据库中的数
据是集成的、可共享的、最小冗余的、能为多种应用服务的。
5.数据库技术 数据库技术研究如何科学的组织和储存数据,如何高效的获取
和处理数据。数据库技术的特点是面向整体组织数据的逻辑结构,具有较高
的数据独立性,具有统一的数据控制功能(完整性控制、安全性控制、并发
控制)。
数据库设计规范化 相对较重点
第一范式(1NF):要求每一个数据项都不能在拆分成两个或两个以上的数
据项,即数据库表中的字段都是单一属性的,不可再分。单一属性由基本类
型组成。
第二范式(2NF):如果一个表已经满足第一范式,而且该数据表中的任何
一个非主键字段的数值都依赖于该数据表的主键字段,那么该数据表满足第
二范式。
第三范式(3NF):如果一个表已经满足第二范式,而且该数据表中的任何
两个非主键字段的数值之间不存在函数依赖关系,那么该数据表满足第三范
式。
表的概述
MySQL中的表是用来储存数据的一种方式。
任何一张表都有行和列:
行(row):被称为数据/记录。
列(column):被称为字段。
命令不区分大小写。
MYSQL语句中的分类
数据查询语言(DQL):凡是带有select关键字的都是查询语句。关键字:select。
数据操作语言(DML):凡是对表中数据进行增删改的都是数据操作语句。关键字:insert(增加数据),delete(删除数据),update(更改数据)。
数据定义语言(DDL):凡是带有create、dorp、alter的都是数据定义语言。
数据定义语言操作的是表的结构,并不是表中的数据。
关键字:create:新建。等同于增加。
dorp:删除。
alter:修改。
此处增删改与数据操作语言不同,主要是对表结构进行操作。
基础数据库语句
数据库语句
1.create database 数据库名(创建数据库)
create database AA;//创建名为AA的数据库
2.use 数据库名(指定使用某一个数据库)
use book_info;//使用名为book_info的数据库
3.drop database if exists 数据库名(删除指定数据库,if exists子句可以避免删
除不存在的数据库时,显示MySQL错误信息)
drop database if exists book_info;//删除一个名为book_info的数据库
4.show databases(显示服务器中已建立的数据库)
show databases;
数据表语句
1.create table 表名(创建数据表)
create table use;//创建名为use的数据表
2.rename table 旧表名 to 新表名(修改表名)
rename table use to user;//将use表的表名改为user
3.create table 新表名
like 参照表名
as (select语句)
(复制表的结构和数据并且新建数据表,select语句用于复制需要的语句)
create table user
like use
as(select * from use);
//创建新的名为user的表,并复制use表的结构与数据到user表中
4.drop table 表名 (删除指定表名)
drop table use;//删除名为use的表名
5.show tables (显示已经建立的数据库文件)
show tables;
事物控制语言(TCL):commit:事物提交。
Rollback:事物回滚。
数据控制语言(DCL):grant:授权。
Remove:撤销权限。
常用语句:
Select database();查询使用的是哪个数据库。
select database();
Select version();查询使用的MYSQL数据库的版本。
select version();
完整性约束
主键约束:使用primary key关键字来定义主键
create table book
(
图书编号 varchar(50) null,
书名 varcchar(50) not null primary key,
出版日期 date
);//将书名定义为主键
代替键约束:使用unique关键字来定义代替键
create table book
(
图书编号 varchar(50) null,
书名 varcchar(50) not null ,
出版日期 date,
primary key(图书编号),
unique(书名)
);//将书名定义为代替键
外键约束:使用foreign key关键字来定义外键
create table book
(
图书编号 varchar(50) null,
书名 varcchar(50) not null ,
出版日期 date,
primary key(图书编号),
foreign key(书名)
references bookid(图书编号)
on delete restrict
on update restrict
);//将书名定义为外键
数据操作
插入数据:insert into 表名 values (表达式)或者set 列名=(表达式)
单表数据修改:update 表名 set 列名=表达式 where 条件
多表数据修改:update 表名列表 set 表名.列名=表达式 where 条件
数据删除:delete from 表名 where 条件
使用truncate table 语句删除表数据:truncate table 表名(此语句会删除表内所有
数据,且无法恢复)
简单查询
查询一个字段:select 字段名 from 表名;
查询多个字段:select 字段名,字段名 from 表名;
查询所有字段:select * from 表名;(效率低下,可读性低)。
给查询的列起别名:使用as关键字来起别名:select 列名 as 别名 from 表名;
As可以省略,用空格取代;起别名是别名中带有空格可用单引号括起来:select 列名 ‘sell die’ from 表名;
注意:此方法别名仅在查询中显示,并不能修改表中名字;
特别注意数据库中的字符串都是用单引号括起来的,此为标准。
条件查询
格式为:select ...from ... where+条件。
都有哪些条件:
= 等于;< 小于(<=小于等于);> 大于(>=大于等于);
Between... and.... 两个值之间,等同于>= and <=
Is null 为 null(is not null 不为空)
And 并且
Or 或者
In 包含,相当于多个or(not in 表示不在此范围中)
Not not可以取非,主要用在is 或 in 中
Like like 为模糊查询,支持%或者下划线匹配 %匹配任意个字符 一个下划线只匹配一个字符
\具有转移功能;
排序 (默认是升序)
指定升序:
Select ... from ... order by ... asc;
指定降序:
Select ... from ... order by ... desc;
两个或者多个字段排序:Select a,b from ... order by a asc,b asc;
先运行a asc 只有a排序中有相等时才会用到b asc 排序。
不建议但了解:根据字段位置排序:Select a,b from ... order by 2;
此处是按b 来排序,因为b是第二列;此代码可读性很差,实用性很差;
综合案例
(此处图片出自B站,侵权即删)
执行顺序:1.from 2.where 3.select 4.order by
数据处理函数又称为单行处理函数
单行处理函数的特点是一个输入对应一个输出。
与其相对应的是多行处理函数。(多个输入对应一个输出)
单行处理函数常见的有哪些?
Lower 转换小写
写法 select lower(...)from ...;
Upper 转换大写
写法 select uuper(...) from ...;
Substr 取子串(substr(被截取的字符串,起始下标,截取的长度))
Select substr(...,1,1) from ...;
Ifnull用法(null,0)解释:当数据为null的时候,当作0来使用。
Case用法:
(此处图片出自B站,侵权即删)
分组函数:
注意事项1:分组函数计算时会自动忽略nul,不需要提前处理。注意计数时也会自动忽略,需要处理(ifnull)。
注意事项2:分租函数中的count(具体字段):表示统计该字段下所有不为null的元素的总数;count(*)表示统计表中的总行数。(只要有一行数据则count++),因为每一行数据中不可能都为null,一行数据中有一列部位null,则这行数据就是有效的。
注意事项3:分组函数不能直接使用在where子句中。(如:select ename,sal from emp where sal>min(sal)。
分组查询:
查询方法:selec ... from ... where ... group by ... older by...
Group by 意为分组 如果不使用此函数则默认整张表为一组。
Older by 意为排序 可使用关键字ASC(升序) DESC(降序)。
Having Having子句的用法与where子句有些相似 语法格式为Having+条件。(select...from...group by...Having 条件)
limit limit子句为select语句的最后一个子句 示例:
排列出前三行的信息(select ... from... order by...limit 3;)
排列出第三行到第8行的信息(select ... from ... order by ... limit 3,8;)
视图
视图是从一个或者多个表(或者视图)导出的表。对视图中的收据进行操作时,系统根据视图的定义去操作视图所对应的基本表。视图被定义过后,便可以像表一样被增删查改。
视图的优点有:
1.为用户集中数据,简化用户的数据查询和处理
2.屏蔽数据库的复杂性
3.简化用户权限的管理
4.便于数据共享
5.可以重新组织语言,以便于输出到其他应用程序中
创建视图
语法格式为:
create or replace view 视图名
as select语句
with check option;
查询视图
语法格式为:
select 想要查询的条件 from 想要查询的视图;
操作视图的方法基本与操作表的方法一致,在此便不过多赘述。
索引
主要索引:
1.普通索引(index)
2.唯一性索引(unique)
3.主键(primary key)
4.全文索引(fulltext)
创建索引
create index 表名 on 表名(列名(长度 asc/desc)
删除索引
drop index 索引名 on 表名
使用alter table 语句来删除索引
alter table 表名
drop primary key
drop index 索引名
分支语句
if-then-else语句:
if (条件1) then 语句序列1
else if 条件2 then 语句序列2
else 语句序列
end if
case 语句:
case 表达式
when 条件1 then 语句序列1
when 条件2 then 语句序列2
.....
end case
循环语句
while语句:
while 条件 do
程序段
end while
repeat语句:
repeat
程序段
until 条件
end repreat
创建存储过程
create proccedure 存储过程名(参数)存储过程体
显示存储过程
查看数据库中有哪些存储过程:show procedure status;
查看某个存储过程的具体信息:show create procedure 储存过程名;
调用存储过程
语句为:call 存储过程名(参数)
删除存储过程
drop procedure if exists 存储过程名
创建存储函数
create function 存储过程名(参数)
returns 类型
deterministic
函数体
调用存储函数
select 存储函数名(参数)
删除存储函数
drop function if exists 存储函数名
以上便是全部我在MySQ方面的所有见解,其中许多是翻阅书籍并结合
自身想法所得出的结论。如有不对之处,请大家指出。