一 、数据库概述

数据库就是以一定格式进行组织的数据的集合。通俗来看数据库就是用户计算机上 一些具有特殊格式的数据文件的集合。

数据库也可以理解为表格,大家都知道表格都是由表名、表头、数据等几部分组成的,数据库跟这类似,只不过叫法不一样,这里叫数据库名、表名和字段。

数据库的特点

  • 持久化存储
  • 读写速度极高
  • 保证数据的有效性
  • 对程序支持性非常好,容易扩展

数据库管理系统:

数据库管理系统(Database Management System,简称DBMS)是为管理数据库而设计的软件系统,包括三大部分构成:

数据库文件集合:主要是一系列的数据文件, 作用是存储数据.
数据库服务端:主要负责对数据文件以及文件中的数据进行管理.
数据库客户端:对外通信

数据库的分类:

● 关系型数据库:所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,本质上使用一张二维表来表示关系。

  1. oracle 银行,电信等项目
  2. ms sql server:在微软的项目中使用
  3. sqlite:轻量级数据库,主要应用在移动平台
  4. mysql:web时代使用最广泛的关系型数据库。

● 非关系型数据库:

  1. 键值存储数据库(key-value):可以通过key来添加、查询或者删除数据库,Memcached、Redis、MemcacheDB等
  2. 列存储数据库(Column-oriented):列存储数据库将数据存储在列族中,一个列族存储经常被一起查询的相关数据,Cassandra、HBase
  3. 面向文档数据库(Document-Oriented):面向文档数据库会将数据以文档形式存储,MongoDB、CouchDB
  4. 图形数据库:图形数据库允许我们将数据以图的方式存储,Neo4J、InforGrid

二 、数据库的使用

① 常用的数据类型

整数类型:int、bit
浮点数类型,定点数类型和位类型:float、double、decimal
日期和时间类型:date,time、datetime
字符串类型:char、varchar、text
枚举类型(Enum)

特别说明的类型如下:

  • decimal表示浮点数,如 decimal(5, 2) 表示共存5位数,小数占 2 位.
  • char表示-固定长度的字符串,如char(3),如果填充'ab'时会补一个空格为 'ab ' .
  • varchar表示可变长度的字符串,如varchar(3),填充'ab'时就会存储'ab'
  • 注意 : 对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储 这个文件的保存路径。字符串 text 表示存储大文本,当字符大于 4000 时推荐使用, 比如技术博客.

② 数据约束

PK(Primary Key):主键索引,物理上存储的顺序. MySQL 建议所有表的主键字段都叫 id, 类型为 int unsigned。
UQ(Unique):唯一索引,数据不可重复; 此字段的值不允许重复。
NN(Not Null):不允许为空,此字段不允许填写空值。
AI(Auto Increment):自动增长,一般用在id自动生成增长。
Default:默认值,当不填写字段对应的值会使用默认值,如果填写时以填写为准。
Foreign key:外键,对关系字段进行约束, 当为关系字段填写值时, 会到关联的表中查询此值是否存在, 如果存在则填写成功, 如果不存在则填写失败并抛出异常。

存储引擎

SHOW ENGINES:查看数据库支持存储引擎:
SHOW ENGINES\G:每行显示数据库支持存储引擎:
SHOW VARIABLES LIKE '%STOR%':查看默认存储引擎
SHOW CREATE TABLE 表名;查看某个表用什么引擎
DEFAULT-STORAGE-ENGINE=存储引擎(需要重启服务器):修改默认存储引擎MY.INI(修改文件数据)

三 、 数据库的相关操作

数据库的操作:DATABASE

1 - 创建

CREAT DATABASE [IF NOT EXISTS] database [CHARACTER SET UTF8];-- 创建数据库

CREAT DATABASE IF NOT EXISTS database;-- 如果数据库不存在则创建数据库
-- 注意:[IF NOT EXISTS]:最好加上,这样可以避免麻烦,每操作一次数据库就多一次风险;[CHARACTER SET UTF8]:就是设置编码格式,也可以不指定

2 - 查看

SHOW DATABASES:-- 查看所有数据库

SHOW CREATE DATABASE database:-- 查看创建数据库的创建方式

SELECT VERSION():-- 查看版本

SELECT DATEBASE():-- 查看当前的数据库

SELECT NOW():-- 显示时间

3 - 修改

ALTER DATABASE database DEFAULT CHARACTER SET 字符集:-- 修改数据库字符集

4 - 选择

USE database:-- 选择数据库

5 - 删除

DROP DATABASE [IF EXISTS] database:-- 删除指定数据;注意: [if exists]:如果你不确定数据库是否存在最好加上,存在就删除,不存在也不会报错

数据表的操作:TABLE

1 - 创建、添加、插入
CREATE TABLE [IF NOT EXISTS] 表名称(字段 类型 [字段约束] [,字段 类型 [字段约束],..]);-- 如果数据表不存在则创建一个数据表

CREATE TABLE table LIKE copyTable;-- 复制表的结构
INSERT INTO table SELECT * FROM copyTable;-- 复制表的结构
INSERT INTO table SELECT[部分字段,...] FORM copyTable;-- 复制表的部分结构 ALTER TABLE table ADD COLUMN 列名 类型 [字段约束];-- 添加字段(列)
ALTER TABLE table ADD COLUMN 列名 类型 [字段约束] AFTER 指定列名;-- 在指定字段(列)后面添加字段(列) INSERT INTO table VALUES(数值..,数值)[,(数值1...数值x)];-- 按照表字段插入数据,插入多条数据可以用逗号隔开
INSERT INTO table (列名1...,列名x) VALUES(数值1..,数值x)[,(数值1...数值x)];-- 选择字段插入数据,插入多条数据可以用逗号隔开
2 - 查看
SHOW TABLES;-- 显示当前数据库中所有的表

SHOW TABLES LIKE ‘xxx’;-- 模糊检索,x为表名的某一个字符,可以使用通配符%和_

SHOW CREATE TEABLE table;-- 查看表单创建语句

SHOW FULL COLUMNS FROM table;-- 返回字段的详细信息

DESC table;-- 查看表结构的描述信息
SHOW COLUMNS FROM table;-- 查看表结构的描述信息
3 - 修改、更新
ALTER TABLE oldTableName RENAME TO newTableName;-- 修改表的名字
RENAME TABLE oldTableName TO newTableName;-- 修改表的名字 ALTER TABLE table CHARACTER SET 字符集;-- 修改表所用的字符集 ALTER TABLE table MODIFY COLUMN 列名 类型 [字段约束]:-- 修改字段(列)约束和类型
ALTER TABLE table CHANGE COLUMN 旧列名 新列名 类型 [字段约束];-- 修改字段(列)定义,并重命名字段(列) UPDATE table SET 字段名(列名)=字段数据 WHERE 条件限制;-- 修改数据(行),如果没有条件限制则更新到所有行的字段数据
4 - 删除
DROP TABLE table;-- 删除表
DELETE FROM table WHERE(条件限制);-- 删除行,一定要加条件限制 不然整张表都会删除
ALTER TABLE table DROP COLUMN 列名;-- 删除字段(删除列)

表数据记录查询SELECT

1 - 简单数据记录查询

SELECT [列1 列2...列] FROM table;-- 查询数据
SELECT DISTINCT(列名)[,列名[...]] FROM table;-- 避免重复数据查询
SELECT CONCAT(列名,"字符") FROM table;-- 字符串连接
SELECT CONCAT(CONCAT(列名,"字符"),列名) FROM table;-- 字符串嵌套连接

2 - 条件数据记录查询

SELECT * FROM table WHERE [条件运算1];-- 查询数据
SELECT * FROM table WHERE [条件运算1] AND [条件运算2];-- 带有关系运算符和逻辑运算符的条件数据查询
SELECT * FROM table WHERE [条件运算1] AND [条件运算2] OR [条件运算3];-- 带有关系运算符和逻辑运算符的条件数据查询
SELECT * FROM table WHERE 列名 IS NULL;-- 查询数值为NULL的数据
SELECT * FROM table WHERE 列名 IN (a,b,...);-- 查询列名中包含ab等的数据
SELECT * FROM table WHERE 列名 NOT IN (a,b,...);-- 查询列名中不包含ab等的数据行
SHOW table LIKE ‘%xxx%’;-- 通配符‘_’,能匹配任意单个字符。通配符‘%’,能匹配任意长度字符串 0个或1个或多个。
SELECT * FROM table WHERE 列名 LIKE ‘通配符’;
SELECT * FROM table1,table2 WHERE 条件运算;-- 内连接查询,显示两个表的数据
SELECT * FROM table1 LEFT JOIN table2 ON 条件运算;-- 左连接查询,保留显示左边表的数据,右边表数据满足条件的话显示
SELECT * FROM table1 RIGHT JOIN table2 ON 条件运算;-- 右连接查询,保留显示右边表的数据,左边表数据满足条件的话显示

3 - 排序数据记录查询

SELECT 列1,列2... FROM table ORDER BY 列名1 [ASC|DESC][,列2[ASC|DESC]];-- 按照指定字段顺序查询 ASC升序 DESC降序

4 - 限制数据记录查询数量

SELECT * FROM table LIMIT offset_start,row_count;-- offset_state第几个开始,row_count查询几个

5 - 统计函数和分组数据记录查询:SLECT * FROM ......,统计函数一般代替星号 * ;

  • COUNT():统计表中数据的数量
  • AVG():计算字段值平均值
  • SUM():计算字段值的总和
  • MAX():查询字段值的最大值
  • MIN():查询字段值的最小值

6 - 功能记录查询:function可以使用上面的部分函数

SELECT function(列名) FROM table GROUP BY 列名;-- 简单分组数据记录查询
SELECT GROUP_CONCAT(列名) FROM table GROUP BY 列名;--功能分组查询SELECT GROUP_CONCAT(列名),function(列名) FROM table GROUP BY 列名1,列名2,...;-- 多个字段分组查询

7 - 内连接查询:等值查询

SELECT [e.列名...[c.列名...]] FROM table_e,table_c WHERE e.列名=c.列名;-- 

字句查询:多表连接进行查询

返回结果为单行单列子查询
-- 当子查询的返回结果为单行单列数据记录时,盖子查询语句一般会在主查询语句的WHERE子句里,通常会包含比较运算符号(>,<,=,!= 等)
SELECT * FROM table1 WHERE 列名 >(SELECT 列名 FROM table2 WHERE 条件运算);
返回结果为单行多列子查询
-- WHERE子句中的子查询除了是返回单行单列的数据记录外,还可以是返回单行多列的数据记录,不过这种子查询很少出现。
SELECT * FROM table1 WHERE (列名1,列名)=(SELECT 列名1,列名2 FROM table2 WHERE 条件运算);
返回结果为多行多列子查询 - 带有关键字IN,NOT IN的子查询
-- 当主查询的条件是子查询的查询结果时,就可以通过关键字IN来进行判断。相反如果想实现主查询的条件不是子查询的查询结果时,就可以通过关键字NOT IN 来进行判断。
SELECT * FROM table1 WHERE 列名 IN(SELECT 列名 FROM table2 WHERE 列名 IN(xxx,xxx));
SELECT * FROM table1 WHERE 列名 NOT IN(SELECT 列名 FROM table2 WHERE 列名 IN(xxx,xxx));
返回结果为多行单列子查询 - ANY、ALL、EXISTS
/*带有关键字ANY的子查询
 =ANY:其功能与关键字IN一样
 >ANY(>=ANY):比子查询中返回数据记录中最小的还要大于(大于等于)的数据记录。
 <ANY(<=ANY):比子查询中返回数据记录中最小的还要小于(小于等于)的数据记录。
*/
SELECT * FROM table1 WHERE 列名 >=ANY(SELECT 列名 FROM table2 WHERE 条件运算);
SELECT * FROM table1 WHERE 列名 <=ANY(SELECT 列名 FROM table2 WHERE 条件运算); /*带有关键字ALL的子查询
 =ALL:其功能与关键字IN一样
 >ALL(>=ALL):比子查询中返回数据记录中最小的还要大于(大于等于)的数据记录。
 <ALL(<=ALL):比子查询中返回数据记录中最小的还要小于(小于等于)的数据记录。
*/
SELECT * FROM table1 WHERE 列名 >=ALL(SELECT 列名 FROM table2 WHERE 条件运算);
SELECT * FROM table1 WHERE 列名 <=ALL(SELECT 列名 FROM table2 WHERE 条件运算); /*带有关键字EXISTS子查询
 关键字EXISTS表示-布尔类型,当返回结果集时为true,不能返回结果集为false。
 查询时EXISTS对外表采用遍历方式逐条查询,每次查询都会比较EXISTS的条件语句,
 当EXISTS里的条件语句能返回记录行时则条件为真,此时返回当前遍历到的记录,
 反之如果EXISTS里的条件语句不能返回记录行,则丢弃当前遍历到的记录。
*/
SELECT * FROM table1 WHERE EXISTS(SELECT * FROM table2 WHERE 条件运算);-- o为table1的引用,将外查询的表引用到内查询中

MySQL数据库基本使用的更多相关文章

  1. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  2. 当忘记mysql数据库密码时如何进行修改

    因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...

  3. MySQL数据库和InnoDB存储引擎文件

    参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...

  4. 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库

    说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...

  5. CentOS下mysql数据库常用命令总结

    mysql数据库使用总结 本文主要记录一些mysql日常使用的命令,供以后查询. 1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆 ...

  6. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  7. mysql数据库主从同步

    环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168. ...

  8. PDO连接mysql数据库

    1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...

  9. mysql数据库开发常见问题及优化

    mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...

  10. 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库

    昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所 ...

随机推荐

  1. android GPS: code should explicitly check to see if permission is available

    转载的,感谢作者,由于我找了很久才找到这个解决方法,因此我自己再转一遍 原文链接 https://blog.csdn.net/qinwendou/article/details/77849048 if ...

  2. fastjson 过滤不需要序列化的属性

    JSON JSON英文全称为JavaScriptObject Natation,采用key:value键值对的方式存贮数据,与xml格式相比,JSON是一种轻量级的数据交换格式:不要被JavaScri ...

  3. 一些关于Hibernate延迟加载的误区

    最近面试别人,正好出的笔试题中有道关于Hibernate延迟加载的问题,聊天过程中发现很多人对Hibernate的延迟加载有些理解误区,写 些东东在这里,希望对大家有所帮助. 首先是第一个误区:延迟加 ...

  4. org.apache.ibatis.binding.BindingException: Parameter 'xxx' not found. Available parameters are [arg1, arg0, param1, param2]

    这个异常说明参数没有加上@Param注解,加上这个注解就行了. 默认情况下mybatis把参数按顺序转化为[0, 1, param1, param2],也就是说#{0} 和 #{param1} 是一样 ...

  5. <每日一题>题目11:以文件夹名称作为参数,返回该文件夹下所有文件的路径

    ''' 分析: 1.知道文件夹名称(假设是形如:E:\\software\\Notepad++),很显然可以通过OS模块去求 2.OS.listdir(sPath),列出文件夹内所有的文件和文件夹,以 ...

  6. .net core模糊查询及分页

    在项目文件夹中,创建 PaginatedList类,然后用以下代码替换模板代码. using Microsoft.EntityFrameworkCore; using System; using Sy ...

  7. springcloud系列12 config的使用

    config组件分为server端和client端 config的原理: 就是当我们将配置文件放置在git上面,那么configserver就会去拉取相关配置文件至本地: 可以看到我本地是拉去了配置文 ...

  8. C++开发系列-C语言的malloc与C++的new分配空间

    概述 在软件开发过程中,常常需要动态地分配和撤销存储空间,例如对动态链表中结点的插入与删除.在C语言中是利用库函数malloc和free来分配和撤销内存空间的.C++提供了较简便而功能较强的运算符ne ...

  9. Python-线程(2)

    目录 GIL全局解释器锁 GIL 与 Lock 多进程 VS 多线程 死锁现象 递归锁 信号量 Semaphore 线程队列 GIL全局解释器锁 在Cpython解释器中,同一个进程下开启的多线程,同 ...

  10. 2-sat——hdu3062基础

    hdu就是会卡cin,, 另一种建模方式,把点i拆成i*2,i*2+1,有时候这样会比较简单 #include<bits/stdc++.h> using namespace std; #d ...