数据库基本操作概述
数据库:数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增删改查。
数据库管理系统:数据库管理系统是指一种操作和管理数据库的大型软件,用于建立,使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。
常见的数据库管理系统:
MySQL、Oracle、DB2、SqlServer、SyBase、SQLite。
MySQL:开源免费的数据库,小型的数据库已经被Oracle收购了。Oracle:收费的大型数据库。
关系型数据库和非关系型数据库:
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织。优点:1.易于维护,都是使用表结构,格式一致2.使用方便,SQL语言通用,可用于复杂查询3.复杂操作,支持SQL,可用于一个表以及多个表之间非常复杂的查询。缺点:1.读写性能差,尤其是海量数据的高效率读写2.固定的表结构,灵活度稍欠3.高并发读写需求,硬盘I/O是个很大的瓶颈。非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。优点:1.格式灵活,存储格式可以是key、value形式、文档形式、图片形式等等2.速度快,不仅可以使用硬盘,还可以使用随机存储器作为载体3.高扩展性4.成本低。缺点:学习和使用成本高,数据结构相对复杂。非关系型数据库的分类:文档型,key-value型,列式数据库,图形数据库。mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,redis是非关系型数据库,也是缓存数据库,即将数据存储在缓存中,用来存储使用频繁的数据。一般二者配合使用。
数据库与数据管理系统的关系:
客户端通过TCP协议与数据库管理系统建立联系,管理系统又直接面向多个数据库,在数据库中真正存储数据的是表格(数据库表),不同的数据库又面向多个表格。管理系统来建库建表管理数据。
数据库表:
数据库中以表为组织单位存储数据。表类似我们的Java类,每个字段都有对应的数据类型。用java和关系型数据库对比,类对应表,类中属性对应表中字段,类的对象对应表中记录。
SQLYog软件和SQL语句:
SQLYog可以代替命令行来执行命令从而操作数据库。数据库是不认识Java语言的,SQL语句是数据库的代码,全称结构化查询语言,是一种数据库查询和程序设计语言。SQL语句不区分大小写,建议关键字大写,自己定义的符号小写。int整型,double浮点型,varchar字符串型,date日期类型。
数据库操作:
创建数据库:create database 查看数据库:show database(安装MySql会默认生成四个库) 删除数据库:drop database(数据库操作没有确认键)
创建数据表:1.create database mydatabase2.use mydatabase3.create table{列名,数据类型,约束};约束是在表中定义的用于维护数据库完整性的一些规则,若某个约束条件只作用于某个列,可以将其定义为列约束或表约束,若某个约束条件作用于多个列,则必须将其定义为表约束。一般约束可以分为:主键约束,外键约束,检查约束,默认约束,唯一约束,非空约束。
举一个带主键约束的例子:首先,主键是用于标识当前记录的字段,特点是非空和唯一,在开发中主键一般是不具备任何含义,只是用于标识当前记录。
CREATE TABLE users{
uid INT PRIMARY KEY AUTO_INCREMENT
uname VARCHAR(20)
uaddress VARCHAR(200)
}
常见表操作:显示库中所有的表:show tables;查看具体的表结构:desc 表名;删除表:drop table 表名---这三个操作用的不是很多
修改表结构:添加列:alter table 表名 add 列名 数据类型 约束;修改列的类型长度及约束:alter table 表名 modify 列名 类型(长度)约束;修改列名:alter table 表名 change 旧列名 新列名 类型(长度) 约束;
删除列:alter table 表名 drop 列名;修改表名:rename table 表名 to 新表名;
数据表添加数据: insert into 表名(列名1,列名2,列名3)values(值1,值2,值3),这是考虑主键的添加语句。例如insert into product(id,pname,price) values(1,'笔记本',5555), sql语句中没有字符串之说,都是采用单引号。insert into product(id,pname,price) values(2,'智能手机',9999),考虑主键后每次添加语句主键的值都要不一样,可见这样比较麻烦,于是我们采用下面这种添加方式:insert into 表名(列名) values(值),这种添加方式不用考虑主键的变化了,因为之间在创建表的时候已经给了主键约束和aoto_increment了,这种添加方式最常用。接下来一种方式是:insert into 表名 values(全列值),例如insert into product values(4,'电磁炉',400),这种添加方式不需要输入列名,但是必须加主键。还有一种方式是批量写入:insert into 表名(列名1,列名2,列名3) values(值1,值2,值3),(值1,值2,值3),逗号可以持续累加,所以是批量写入。
数据表添加过程中可能出现断号问题,但问题不大。
更新数据表中的数据:数据在原有的基础上更改,格式:update 表名 set 列1=值1,列2=值2 where 条件(where条件:数据中的唯一性)例如:update product set price = 15999 where id=2,修改条件的写法:id=6,id<>6(<>是不等于的意思,就类似java中的!=),id<=6,sql语句中与:and,或:or,非:not,id in (1,3,4,5,6),id not in (1,3,4,5,6)
删除数据:delete from 表名 where 条件,或者truncate table 表名,二者区别:delete一条一条删,不清空auto_increment记录数,truncate直接将表删除,重新建表,auto_increment将置为零,从新开始。
查询数据:查询指定列的数据:select 列名1,列名2 from 表名;查询所有列的数据:select * from 表名;查询去掉重复记录:select distinct 列名 from 表名;查询临时重命名列:select 列名 as ‘新列名’ from 表名;查询数据中,直接进行数学计算:举个例子select zname,zmoney+1000 from zhangwu
条件查询:有各种各样的条件查询方式,前面也提到了一些,主要是使用where关键字,在此着重讲一些重要的用法。like,模糊查询,配合通配符,举例:select * from zhangwu where zname like‘%支出%’。
分组查询:格式:group by 被分组的列名,必须跟随聚合函数,select查询的时候,被分组的列要出现在select选择列的后面;举例:select sum(zmoney),zname from zhangwu group by zname
DOS操作数据乱码解决:
在使用cmd打开创建的mysql服务器查看数据表的时候会发现有乱码问题存在,这是由于mysql的客户端编码用的是utf8,而系统的cmd窗口编码是gbk,解决方案为修改mysql客户端编码。cmd命令行中执行set names gbk。
聚合函数:
count,对表中的数据的个数求和:count(列名),举例:select count(*) from zhangwu
sum,对一列中数据(如果数据类型不是数字则作为0)进行求和计算:sum(列名), 举例:select sum(zmoney) from zhangwu
max,min函数格式如上所示,不再列出格式和举例了
avg也类似,但是求指定列数据平均值的时候,如果指定列类型不是数值类型,计算结果设为0
count,sum,avg使用频率最高,尤其是count。