数据库(基础篇)

打印 上一主题 下一主题

主题 882|帖子 882|积分 2646


  • 什么是数据库:
数据库(Database DB)是按照数据布局来组织、存储和管理数据的堆栈(存储数据的堆栈),它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而变化成用户所需要的各种数据管理的方式。数据库有很多种范例,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库体系都在各个方面得到了广泛的应用。
存储表布局数据,到现在可以海量数据Hbase。
数据库就是用来存储,查询,管理数据的一个堆栈。---订单数据【数据库中 可以从数据库中查询订单信息】
数据库的种类

按照早期的数据库理论,比较流行的数据库模型有三种,
分别为层次式数据库
网络式数据库和
关系型数据库前两者已经基本消散)。
而当今的互联网中,最常用的数据库模型主要是两种即 关系型数据库非关系型数据库
1. 关系型数据库

概念:关系型数据库以行和列的形式存储数据,以便于用户明白。这一系列的行和列被称为表,一组表构成了数据库。
类似于Excel表格,但是在关系型数据库中,列是固定的 行可以动态添加。
常用的关系型数据库: MySQL Oracle SQLserver 【.net语言C#】
2. 非关系型数据库

非关系型数据库:非关系型数据库也被称为NoSQL数据库,
NoSQL的本意是“Not Only SQL”,指的黑白关系型数据库,而不是“No SQL”的意思(没有SQL语句?),因此,NoSQL的产生并不是要彻底否定关系型数据库,而是作为传统关系型数据库的一个有效增补。NoSQL数据库在特定的场景下可以发挥出不可思议的高效率和高性能。
关系型数据库它是以行和列的形式存储数据[mysql oracle sqlServer等],非关系数据库则不是以行和列的形式存储【redis】
3. SQL 语言

SQL 语言 多个关系型数据库基本通用

布局化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和步伐计划语言,用于存取数据以及查询、更新和管理关系数据库体系。

我们安装的是MySQL应用服务步伐,用来管理 存取数据。SQL是一门编程语言,是用来在MySQL等关系型数据库中进行 数据的管理 存取操纵的。

所以说 我们这门课程叫做 MySQL ,其实学习的是 SQL .

1、数据查询语言(DQL: Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定命据怎样在应用步伐给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与别的范例的SQL语句一起使用。

2、数据操纵语言(DML:Data Manipulation Language):其语句包罗动词INSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。

3、数据界说语言(DDL):其语句包罗动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREATE TABLE 或 DROP TABLE);为表参加索引等。
4. 事务控制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。包罗COMMIT(提交)命令、SAVEPOINT(生存点)命令、ROLLBACK(回滚)命令。【mysql高级讲】
学习是SQL语言。 该语言用来操纵关系型数据库。【DQL数据查询语言 DML 数据操纵语言 DDL数据界说语言】
3.1. DDL 数据界说语言

3.1.1. 连接数据的三种方式(条件保证 MySQL 的服务开启)

第一种、Mysql自带的客户端连接。
第二种、使用命令:
mysql -uroot -proot (-u:用户名)(-p: 暗码)
第三种: 使用客户端软件 navicat 和sqlyog等
3.1.2. DDL 界说语言

  1. -- DDL数据定义语言---
  2. -- 1. 创建数据库 语法: create database 数据库名;
  3. create database qy174;
  4. -- 2. 删除数据库 语法: drop database 数据库名
  5. drop database qy174;
  6. -- 3. 切换到指定的数据库。use 数据库名
  7. use qy174;
  8. -- 4. 创建表结构 语法: create table 表名(列名 数据类型,列名 数据类型....列名 数据类型);
  9. -- 数据类型: int bigint float double decimal小数  varchar(长度)
  10. -- 字符串类型 最大255  text文本类型  date日期类型
  11. create table student(
  12.     id int,-- 学号
  13.                 name varchar(10),
  14.                 age int ,
  15.                 salary decimal(10,2), -- 该数子有10,而小数2位
  16.                 birthday date
  17. );
  18. -- 5. 删除表
  19. drop table student;
复制代码
3.1.3. 修改表的布局

增长一列
alter table 表名 add column 列名 数据范例;
删除指定列
alter table 表名 drop column 列名;
修改某一列的数据范例
alter table 表名 modify column 列名 新数据范例
修改列名
alter table 表名 change column 原来的列名 新的列名 数据范例
  1. -- 6. 添加新列
  2. alter table student add column salary decimal(6,2);
  3. -- 7. 删除指定的列
  4. alter table student drop column salary;
  5. -- 8. 修改列的数据类型
  6. alter table student modify column age double;
  7. -- 9. 修改列的名字
  8. alter table student change column age nianling double;
复制代码
3.2. 添加约束


  • 概念:约束时作用于表中字段上的规则用于限制表中的数据。
  • 目的:保证数据库中数据的正确、有效性和完备性。
分类:
约束
描述
关键字
非空约束
限制该字段的数据不能为nul
NOT NULL
唯一约束
保证该字段的所有数据都是唯一、不重复的
UNIQUE
主键约束
主键是一行数据的唯一标识,要求非空且唯
PRIMARYKEY
默认约束
生存数据时,假如未指定该字段的值,则接纳默认值
DEFAULT
查抄约束(8.0.14版本后)
保证字段值满足某一个条件
CHECK
外键约束
用来让两张图的数据之间建立连接,保证数据的一致性和完备性
FOREIGN
3.3. 外键约束

概念:外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完备性


为什么需要外键:


3.4. 添加外键

两种方式:


① constraint 外键名称 foreign key 外键字段名 references 主表(主表列名)
② alter table 表名 add constraint


数据范例:
int bigint varchar(长度) char(长度)
decimal(长度,小数) text date
char和varchar区别:char固定长度 varchar()可变
约束:
主键约束 primary key
唯一约束unique
非空约束not null
默认约束default
查抄约束(8.0.14以后) check
外键约束constraint foreign key references
4. DML 语言(Data Mark Language)

DML(Data Mark Lau)数据标记性语言。该语言主要用户对数据库表中的记录进行操纵的。【增长 删除 修改】
4.1. 增长记录

语法:
-- 为表中所有列添加数据
insert into 表名 values(值,值,值.....)
-- 为指定列添加数据
insert into 表名(列名,列名...) values(值,值....)
-- 批量添加
insert into 表名(列名,列名...) values(值,值....),(值,值....)
  1. create table t_user(
  2.      id int primary key auto_increment,-- auto_increment:递增 必须为整型类型
  3.          name varchar(20) not null,
  4.          age int,
  5.          sex char(2) DEFAULT '男'
  6. );
  7. -- 为所有列添加数据
  8. insert into t_user values(1,'关文琪',19,'男');
  9. -- 添加指定列的数据
  10. insert into t_user(id,name) values(2,'王世琦');
  11. -- 添加多条记录
  12. insert into t_user(id,name) values(3,'刘德华'),(4,'张学友');
  13. -- 查询该表中的记录
  14. select * from t_user;
复制代码
注意:一定要注意 值 和 列 要个数匹配。
4.2. 删除操纵

delete from 表名; -- 删除表中所有的记录 [不建议使用(删库跑路)]
delete from 表名 where 条件; -- 根据条件删除满足条件的记录
  1. -- 根据条件删除记录
  2. delete from t_user where id=1
  3. -- 删除所有的数据[不要使用]
  4. delete from t_user;
复制代码
条件有哪些:

  • 关系运算符: >,>=,<,<=,=,!=
  • in运算符:
  • between and
  • 逻辑运算符:  and(与)  or(或)
4.3. 修改记录

语法:update 表名 set 列名=值,列名=值,列名=值.... where 条件;
注意: 最后一个列名=值不要使用,号
  1. update t_user set age=18 where name='刘德华';
  2. update t_user set name='马德华',age=99,sex='妖' where id=17;
复制代码
5. DQL 语言(Data Query Language)

DQL( Data Query Language)数据查询语言。作用:用于查询数据表中记录。
语法:
select [列名...] from 表名 [where 条件]
5.1. 暗昧查询

%:统配n个字符 _:统配一个字符
  1. -- 查询所有列的值语句
  2. select * from t_user;
  3. -- 查询指定列的值
  4. select name,age from t_user;
  5. -- 根据条件查询
  6. select * from t_user where age>20 or sex='男';
  7. select * from t_user where age in(19,20,25,29)
  8. -- 模糊查询 like 通配符 %:统配n个字符  _:统配一个字符
  9. -- 查找名字中含有琪
  10. select * from t_user where name like '%琪%'
  11. -- 查询姓刘
  12. select * from t_user where name like '刘%'
  13. -- 第二个字为琪的
  14. select * from t_user where name like '_琪%'
  15. -- 查找姓刘的且只要两个字
  16. select * from t_user where name like '刘_'
复制代码
5.2. 为查询的列起别名:

(as 可省略)
语法: select 列名 as 别名, 列名 as 别名 from 表名 【where 条件】
eg : select name 姓名, age,sex 性别 from t_user;
5.3. 去除重复项

语法:select distinct 列名,列名 ... from 表名 【where 条件】
eg: select distinct id,name,age from t_user;
5.4. 排序

语法:select * from 表名 order by 列1,列2...[desc降序 asc升序默认]
eg: -- 先按照年龄升序,年龄相同按照id降序
select * from t_user order by age desc,id desc;
5.5. 分页查询

5.5.1. MySQL 数据库(常用)

语法: select * from 表名 limit 起始记录,每页表现条数;
eg: -- 查询第一页的数据 每页表现三条
select * from t_user limit 0,3;
-- 查询第二页的数据 每页表现三条
select * from t_user limit 3,3
-- 查询第三页的数据current 每页表现三条PageSize
select * from t_user limit 6,3
-- 规律: select * from t_user limit (current-1)*pageSize,pageSize;
5.5.2. sqlServer 数据库(不常用)

  1. select top @pageSize *
  2. from 表名
  3. where 主键>=
  4. (select max(主键)
  5.         from (
  6.                 select top ((@pageIndex-1)*@pageSize+1) 主键
  7.                 from 表名  
  8.                 order by  主键 asc) temp_max_ids)
  9. order by 主键;
复制代码
5.5.3. oracle 数据库

  1. -- 40为pageCurrent * pageSize,30 应为为(pageCurrent - 1) * pageSize
  2. SELECT * FROM  
  3. (  
  4. SELECT A.*, ROWNUM RN  
  5. FROM (SELECT * FROM TABLE_NAME
  6.    WHERE 1 = 1 -- 条件
  7.    ORDER BY CREATETIME DESC -- 排序
  8.   ) A  
  9. WHERE ROWNUM <= 40  
  10. )  
  11. WHERE RN > 30
复制代码
5.6. 聚合函数

函数就是mysql中自带的函数。 5大聚合函数
sum(): 求和
count(): 求个数
avg(): 平均值
max(): 最大值
min(): 最小值
eg: select sum(age) 年龄和,max(age) 最大年龄,min(age) 最小年龄,count(id) 个数,avg(age) from t_user;
5.7. 分组查询:

语法:select 分组的列,聚合函数 from 表名 group by 列名,列名 having 分组后的条件
  1. -- 按照性别分组查询 人数大于等于3
  2. select sex,count(id),max(age),name from t_user
  3.           group by sex,name having count(id)>=2;
  4. -- 注意: select 后只能根聚合函数或分组的列名
复制代码
5.8. 查询的完备语法:

select [distinct] [列名 as 别名,列名 别名, 列名]

  • from 表名
    [where 条件]
    [group by 分组列]
    [having 分组后的条件]
    [order by 排序的列]
    [limit 起始记录,每页的条数]
    6. 查询 SQL 的执行原理

    基本语法:
    select distinct * from 表名
    where 条件
    group by 分组
    having 分组条件
    order by 排序
    limit 分页。
    上面为他得语法布局。顺序不能乱。
    6.1. 执行顺序

    执行顺序

    • from 先确定从哪张表中取数据,所以开始执行 from table
    • where where 语句是对条件的加以限定
    • group by 分组语句
    • 聚合函数
    • select
    • distinct
    • order by
    • limit
    举例:
    1. -- 由于where先执行,select后执行,再执行where不知道别名n
    2. select w_name n from workers where n='程西'
    3. -- 因为from先执行--where 执行时指定别名为w,
    4. select w_name n from workers w where w.w_name='程西'
    复制代码
    7. 联表查询

    什么是多表联合查询:
    前面所讲的查询语句都是针对一个表的,但是在关系型数据库中,表与表之间是有联系的,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。
    表与表之间有联系: ----外键。
    表与表之间有哪些联系:----
    多对一: 例如: 员工表和部分表 门生和班级 外键放置多一方
    多对多: 例如: 门生和课程 设置一个中间表
    一对一: 例如: 丈夫表和老婆表
    为什么需要联表查询?
    当我们查询的结果不在一张表中。就需要联表查询。


    7.1. 联表查询的类


    • 内连接: 查询两个表中公共部分。
    • 外连接:
      左外连接: 查询左边中所有的内容以及公共内容。
      右外连接: 查询右边中所有的内容以及公共内容。
    • 子连接: 自己和自己连接
    7.1.1. 内连接

    1. select *         from        表名1          inner         join         表名2          on         联表条件;
    复制代码
    7.1.2. 左外连接

    1. select * from 表名1 left join 表名2 on 联表条件
    复制代码
    7.1.3. 右外连接

    1. select * from 表名1 right join 表名2 on 联表条件
    复制代码
    7.1.4. 自连接

    自己连接自己的表
    8. 嵌套查询

    把一个sql查询的结果作为另一个sql查询的条件值。
    例一:查询研发部的员工信息。
    ①查询研发部的部分号
    ②根据查询的部分号查询对应的员工信息
    select * from tb_emp where dept_id=(select id from tb_dept where name='研发部')

    9. 把查询结果当作一个暂时表

    查询各个部分中最高薪资的员工信息。
    1. select e.* from tb_emp e inner join
    2.    (select max(salary) m,dept_id from tb_emp group by dept_id) t
    3.          on e.dept_id=t.dept_id and e.salary=t.m
    复制代码

    10. MySQL 的内置函数

    10.1. 字符串函数



    10.2. 日期函数



    10.3. 数学函数



    10.4. 设置数据库允许远程连接


    • 切换mysql数据库
    • select host,user from user;
    • 修饰update user set host='%' where user='root';
    • 革新配置。FLUSH PRIVILEGES;


    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
  • 回复

    使用道具 举报

    0 个回复

    倒序浏览

    快速回复

    您需要登录后才可以回帖 登录 or 立即注册

    本版积分规则

    惊雷无声

    金牌会员
    这个人很懒什么都没写!

    标签云

    快速回复 返回顶部 返回列表