数据库基础1

版权声明:转载请标明出处~~谢谢! https://blog.csdn.net/zoe_ranxiaosu/article/details/83990222

数据库概念

数据库(DataBase),简称DB,按照某一特定数据结构来组织,存储数据的仓库。

数据库管理系统(DataBase Management System),简称DBMS.是为了建立,操作和维护数据库而设计的一个程序。

介于用户和数据库之间。

PS: 使用SQL语言,通过DBMS来管理DB。

早期比较流行的数据库模型有三种,分别为层次式数据库、网络式数据库和关系型数据库。而在当今的互联网中,最常用的数据库模型主要是两种,即关系型数据库和非关系型数据库。

关系型数据库

(1)关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。

    所谓的关系,指的就是表,或者表与表之间。关系模型,就是表的行与列。

(2)常用的关系型数据库:

       大型:Oracle--甲骨文(Oracle)公司的产品

               SqlServer--Microsoft旗下的产品

               DB2--IBM旗下的产品

     小型:Access--MicroSoft旗下的产品

             Mysql--目前是甲骨文旗下的产品

非关系型数据库 

1、NOSQL不是否定关系数据库,而是作为关系数据库的一个重要补充 
2、NOSQL为了高性能、高并发而生,忽略影响高性能,高并发的功能 
3、NOSQL典型产品memcached (纯内存),redis(持久化缓存),mongodb(文档的数据库) 

非关系型数据库分类主要有:

1、键值(Key-Value)存储数据库

     典型产品:Memcached、Redis、MemcacheDB、BerkeleyDB 

2、列存储(Column-oriedted)数据库

      这部分数据库通常用来分布式存储的海量数据,键仍然存在,但是他们的特点是指向了多个列。 
      典型产品:Cassandra,HBase 

3、面向文档(Document-Oriented)数据库

     面向文档数据库会将以文档的形式存储。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关系对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储 

     典型产品:MorgoDB、CouchDB 

4、图形(Graph)数据库

Mysql 

Mysql是一个关系型数据库,最开始是瑞典的MysqlAB公司的产品,后来被Sun公司收购,在2009年4月20号Sun公司被Oracle收购。

Mysql特点

      --mysql是开源的,不会产生额外的费用。

      --mysql支持大型数据库,比如可以管理上千万条记录的数据库。

      --mysql支持多操作系统,支持多语言连接:C,C++,java,PHP....

      --mysql成本比较小,相比较Oracle和DB2。

Mysql的连接和使用

    连接方式:

                (1)使用命令提示符界面(保证环境变量配置成功)

                    第一步:输入命令+参数,发送请求连接

                                 mysql -u username -p   回车

                                 enter password:  ......

                    第二步:创建数据库

                                create database bd1802 default character set utf8;

                    第三步:选择数据库

                               use  bd1802      

               (2)使用客户端连接:(选择sqldeveloper).

                    第一步:配置第三方jdbc驱动程序

                              工具->首选项->数据库->第三方驱动程序->添加条目->选中你的jar包->确定

                    第二步:新建连接

                              连接名:随便起,就是一个连接昵称而已

                             用户名:使用什么用户进行连接

                             密码:.....

                             主机名: 数据库所在的主机IP

                             端口号:3306

                            选择数据库:如 bd1802

表(Table)

表是关系型数据库的基本存储结构。

   1)表是二维数据结构,有行和列

   2)行(Row)是横排数据,也叫记录(Recond)

   3)列(Column)是竖排数据,也叫字段(Field)

   4)行与列的交叉点是 字段值

   5)表与表之间也存在关系

数据库支持的数据类型

MySQL支持多种类型,大致可以分为三类:

 数值、日期/时间和字符串(字符)类型

数值类型:

类型

大小

范围(有符号)

用途

TINYINT

1 字节

(-128,127)

小整数值

SMALLINT

2 字节

(-32 768,32 767)

大整数值

MEDIUMINT

3 字节

(-8 388 608,8 388 607)

大整数值

INT或INTEGER

4 字节

(-2 147 483 648,2 147 483 647)

大整数值

BIGINT

8 字节

(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)

极大整数值

FLOAT

4 字节

单精度

浮点数值

DOUBLE

8 字节

双精度

浮点数值

DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值

日期和时间类型:

类型

大小(字节)范围

格式

用途

DATE

3

1000-01-01/9999-12-31YYYY-MM-DD

日期值

TIME

3

'-838:59:59'/'838:59:59' HH:MM:SS

时间值或持续时间

 

YEAR

1

1901/2155

YYYY 年份值

 

DATETIME

8

1000-01-01 00:00:00/9999-12-31 23:59:59

YYYY-MM-DD HH:MM:SS

混合日期和时间值

TIMESTAMP

8

1970-01-01 00:00:00/2037

YYYYMMDD HHMMSS

混合日期和时间值,时间戳

字符串类型:

类型

大小

用途

CHAR

0-255字节

定长字符串char(10)

VARCHAR

0-65535字节

变长字符串

TINYBLOB

0-255字节

不超过 255 个字符的二进制字符串

TINYTEXT

0-255字节

短文本字符串

BLOB

0-65535字节

二进制形式的长文本数据

TEXT

0-65535字节

长文本数据

MEDIUMBLOB

0-16777215字节

二进制形式的中等长度文本数据

MEDIUMTEXT

0-16777215字节

中等长度文本数据

LONGBLOB

0-4294967295字节

二进制形式的极大文本数据

LONGTEXT

0-4294967295字节

极大文本数据

 结构化查询语言(SQL)

结构化查询语言(Structured Query Language),简称SQL,是数据库的标准查询语言。可以通过DBMS对数据库进行定义数据,操纵数据查询数据,数据控制等

    SQL可以分为:

    1)数据定义语言(DDL):Data dafinitaon Language

创建表 create
 删除表 drop
修改表 alter
清空表 truncate彻底清空,无法找回

     2)数据操纵语言(DML):Data Manipulation Language

插入数据 insert
 删除数据 delete
修改数据 update

  3)事务控制语言(TCL):Transation Control Language

  4)数据查询语言(DQL):Data Query Language

        select: select * from tableName

  5)数据控制语言(DCL):Data Control Language


SQL语言之DDL:数据定义语言

建表语句 create table tableName(colName Type1,colName Type2......);
显示表结构 desc tableName
追加新字段 alter table tableName add (colName Type);
删除表字段 alter table tableName drop colName;
修改表字段类型 alter table tableName modify colName newType;
修改表字段名称 alter table tableName change oldColName newColName newType;
修改表名 alter table tableName change oldColName newColName newType;
清空表结构 truncate table tableName;
删除表对象 drop table tableName
删除数据库 drop database databaseName;
创建数据库 create database databaseName default character set character

 SQL语言之DML:数据操纵语言

插入数据 insert into tableName values(value1,value2,...);必须按照建表字段顺序赋值
  insert into tableName(colName1,colName2,....) values(value1,value2,...);给指定字段赋值
删除表中的数据 delete from tableName [where 条件]
修改表中的数据 update tableName set colName1 = value1[,colName2=value2] [where 条件]

DDL语言都有关键字 table, DML语言直接写表名,没有table关键字。

SQL语言之DQL:数据查询语言 

   

基本查询

    


 
     select:选择 可以指定字段进行查询:select colName[,colName.....] from tableName
 

查询整张表:select * from tableName

通配符*:如果是在select字句中,代替的是所有的字段

给查询显示的列起别名 select ename [as] "员工姓名"[,colName as nickName....] from tableName tableNickName

       条件控制

条件查询

where子句:Select colName from tableName where 条件

模糊查询

like关键字:colName like  value;

 通常与通配符%连用

%:0或0个以上的字符

_:匹配一个字符

   排序

              升序 ASC升序,默认不写时是ASC
             降序 DESC降序

 使用多列作为排序条件

使用order by子句

   去重

 

distinct  

位置:紧跟着select关键字,必须写在select后

聚合函数

 

count(Field):统计指定字段的记录数

sum(Field):统计指定字段的和

avg(Field):统计指定字段的平均值

max(Field):返回指定字段中的最大值

min(Field):返回指定字段中的最小值

PS:聚合函数不对null值进行处理,会直接忽略。

因此有时候需要使用函数:ifnull()

函数ifnull(field,value)

逻辑:如果field字段对应的值不是null,就使用field值,如果是null,就使用value

分组查询

 

group by Field1[,Field2]

select..from talbeName [where 条件][group by 子句][order by 子句]

注意:在分组查询时,select子句中的字段,除了聚合函数外,只能写分组字段。  多字段分组时:

             field1,field2

             10     500

             20     600

             30     700

注意:多字段分组时,最多分组的数目为Field1*Field2*[Field3……]

分组查询的再次过滤

having子句

在分组查询时,有的时候可能需要再次使用条件进行过滤,这个时候不能使用where子句,应该使用

having子句,having子句后可以使用聚合函数。

位置:位于group by 子句后

如果有分组,排序,having格式:group by..having..order by   

  • select

  • 练习1:查询员工表emp中的 员工姓名,员工职位,员工入职日期和员工所在部门。

    select ename,job,hiredate,deptno from emp;

       练习2:查询部门表中的所有信息

       select * from dept;

       select deptno,dname,loc from dept;


  • where子句

    练习1:查询员工表中部门号为10和20的员工的编号,姓名,职位,工资

   select empno,ename,job,sal from emp where deptno=10 or deptno =20;

   练习2:查询员工表中部门号不是10和20的员工的所有信息。

   select * from emp where deptno<>10 and deptno<>20;


  • --集合作为条件写法:in|not in (集合元素,使用逗号分开);
  • -- 注意:同一个字段有多个值的情况下使用。

    -- in 相当于 or

    -- not in  相当于  and

  • select empno,ename,job,sal from emp where deptno in(10,20);

    select * from emp where deptno not in (10,20);


  • 模糊查询

  • --练习1:查询员工姓名第二个字母为a或A的员工信息。

  • insert into emp (empno,ename,deptno) values(9000,'james',40);

    select ename,job,sal,comm,deptno from emp where ename like '_A%';

    --练习2:查询员工姓名中有a和s的员工信息。

    select ename,job,sal,comm,deptno from emp where ename like '%a%' and ename like '%s%';

    select ename,job,sal,comm,deptno from emp where ename like '%a%s%' or ename like '%s%a%'


  • --范围查询:colName between val1 and val2

  • --练习1:查询工资大于等于1500并且小于等于2500的员工的所有信息。

    select * from emp where sal>=1500 and sal<=2500;

    --练习2:查询工资小于2000和工资大于2500的所有员工信息。

    select * from emp where sal<2000 or sal>2500;

    --修改上述两个练习

    select * from emp where sal between 1500 and 2500;

    select * from emp where sal not between 1500 and 2500;

--mysql排序

--练习1:查询员工表中的所有信息,按照部门号升序排序

--练习2:查询员工的编号,姓名,工资,奖金,部门号,按照部门号降序排序,员工编号升序.

select * from emp;

select * from emp order by deptno ASC;

select empno,ename,sal,comn,deptno from emp order by deptno DESC,empno ASC;

--练习3:查询30号部门的员工的姓名,工资,部门号,按照工资降序排序

select ename ,sal,deptno from emp where deptno = 30 order by sal DESC;

--去重:

--练习:查看员工表中有哪些部门号;

select job from emp;

select distinct job from emp;

--练习:查看员工表中有几种奖金

select distinct comn from ;

select distinct job,comn from emp;

--having子句

 --练习:查询部门的平均工资大于2000的部门的部门号,平均工资,最高工资,最低工资和工资之和

select deptno, avg(ifnull(sal,0)),max(sal),min(sal),sum(sal) from emp

group by deptno having avg(ifnull(sal,0))>2000 order by deptno ASC;

子句总结 

一个基本的查询语句包含的子句有:

   select子句

   from 子句

   where子句

   group by 子句

   having 子句

   order by 子句

  一个完整的查询语句:

  select..from..[where ..][group by..][having..][order by..]

  执行顺序:

     先执行from子句

     再执行where子句

     然后group by子句

     再次having子句

     之后select子句

     最后order by子句

SQL语言之TCL:事务控制语言

有时我们可能需要使用DML进行批量数据的删除,修改,增加。比如在一个员工系统中,我们想删除一个人的信息,除了删除这个人的基本信息外,还应该删除与此人有关的其他信息,如公司的邮箱,地址等等。那么从开始执行到结束就会构成一个事务。

对于事务,我们要保证事务的完整性。要么成功,要么撤回。

一般情况下事务要符合四个条件(ACID):

 原子性(Atomicity):事务要么成功,要么撤回,不可切割性。

一致性(Consistency): 事务开始前和结束后,要保证数据的一致性。

隔离性(Isolation):当涉及到多用户操作同一张表时,数据库会为每一个用户开启一个事务。那么当其中一个事务正在

                                   进行时,其他事务应该处于等待状态。保证事务之间不会受影响。

持久性(Durability):当一个事务被提交后,我们要保证数据库里的数据是永久改变的,即使数据库崩溃了,我们也要保证

                                   事务的完整性。

 commit:提交

 rollback:撤回,回滚。

 savepoint:保存点

  事务:只有DML操作会触发一个事务

  存储引擎[ENGINE]:就是指表类型。

  当存储引擎为innodb时,才支持事务。

--一般安装的是使用innodb引擎

  有一个默认的存储引擎为Myisam,不支持事务。

  事务的验证:

  第一步:start transaction

  第二步:savepoint 保存点名称。

  第三步:DML

  第四步:commit/rollback

 SQL之DCL:数据控制语言

作用是用来创建用户,给用户授权,撤销权限,删除用户

      create user

      great

      revoke

      drop user

格式:

   1:创建用户

     create user username@ip identified by newpassword

   2:显示用户的权限

     show grants for username@ip;

   3:授权

   grant 权限1,权限2...on 用户名.* to username@ip

   DML权限:insert,delete,update

   DQL权限:select

   DDL权限:create,alter,drop...

   4:撤销权限

   revoke 权限1,权限2..on 数据库名.* from username@ip

   5:删除用户

   drop user username;

   使权限立即生效:

   flush privileges;

===============================================================================

--DCL:数据控制语言

--练习1:创建一个用户 scott,密码 tiger

create user scott@localhost identified by '123456';

grant create,drop,alter,select on mysql.* to scott@localhost;

create table emp;

 

猜你喜欢

转载自blog.csdn.net/zoe_ranxiaosu/article/details/83990222
今日推荐