MySQL数据库基本使用
一 、数据库概述
数据库就是以一定格式进行组织的数据的集合。通俗来看数据库就是用户计算机上 一些具有特殊格式的数据文件的集合。
数据库也可以理解为表格,大家都知道表格都是由表名、表头、数据等几部分组成的,数据库跟这类似,只不过叫法不一样,这里叫数据库名、表名和字段。
数据库的特点:
- 持久化存储
- 读写速度极高
- 保证数据的有效性
- 对程序支持性非常好,容易扩展
数据库管理系统:
数据库管理系统(Database Management System,简称DBMS)是为管理数据库而设计的软件系统,包括三大部分构成:
数据库文件集合:主要是一系列的数据文件, 作用是存储数据.
数据库服务端:主要负责对数据文件以及文件中的数据进行管理.
数据库客户端:对外通信
数据库的分类:
● 关系型数据库:所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,本质上使用一张二维表来表示关系。
- oracle 银行,电信等项目
- ms sql server:在微软的项目中使用
- sqlite:轻量级数据库,主要应用在移动平台
- mysql:web时代使用最广泛的关系型数据库。
● 非关系型数据库:
- 键值存储数据库(key-value):可以通过key来添加、查询或者删除数据库,Memcached、Redis、MemcacheDB等
- 列存储数据库(Column-oriented):列存储数据库将数据存储在列族中,一个列族存储经常被一起查询的相关数据,Cassandra、HBase
- 面向文档数据库(Document-Oriented):面向文档数据库会将数据以文档形式存储,MongoDB、CouchDB
- 图形数据库:图形数据库允许我们将数据以图的方式存储,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
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)];-- 选择字段插入数据,插入多条数据可以用逗号隔开
SHOW TABLES;-- 显示当前数据库中所有的表 SHOW TABLES LIKE ‘xxx’;-- 模糊检索,x为表名的某一个字符,可以使用通配符%和_ SHOW CREATE TEABLE table;-- 查看表单创建语句 SHOW FULL COLUMNS FROM table;-- 返回字段的详细信息 DESC table;-- 查看表结构的描述信息
SHOW COLUMNS FROM table;-- 查看表结构的描述信息
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 条件限制;-- 修改数据(行),如果没有条件限制则更新到所有行的字段数据
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 来进行判断。
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的子查询
=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数据库基本使用的更多相关文章
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
- MySQL数据库和InnoDB存储引擎文件
参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...
- 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...
- CentOS下mysql数据库常用命令总结
mysql数据库使用总结 本文主要记录一些mysql日常使用的命令,供以后查询. 1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆 ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- mysql数据库主从同步
环境: Mater: CentOS7.1 5.5.52-MariaDB 192.168.108.133 Slave: CentOS7.1 5.5.52-MariaDB 192.168. ...
- PDO连接mysql数据库
1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...
- mysql数据库开发常见问题及优化
mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...
- 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库
昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所 ...
随机推荐
- http://ajax.open-open.com/ ajax开源家园
http://ajax.open-open.com/ 本站为广大OPEN爱好者搭建了一个OPEN家园,大家可以方便快捷地发布日志.上传照片,分享生活中的精彩瞬间:与好友一起玩转游戏,增加好友感情:创建 ...
- JAVA基础_反射获取泛型参数类型
我经常会想获取参数的实际类型,在Hibernate中就利用的这一点. domain: Person.java public class Person { // 编号 private Long id; ...
- Git上传文件指北
PS:之前设置SSH密钥之类的步骤假设都已经完成,只需日常上传文件 1.仓库初始化 假设你已经新建好了一个仓库(New Repository),名为:RepoName 选择你代码所在的本地文件夹,鼠标 ...
- 面试系列25 dubbo的spi思想是什么
spi,简单来说,就是service provider interface,说白了是什么意思呢,比如你有个接口,现在这个接口有3个实现类,那么在系统运行的时候对这个接口到底选择哪个实现类呢?这就需要s ...
- [JZOJ1320] 【Usaco2009 gold 】拯救奶牛
题目 题目大意 一个三角形的网格图,三角形与其有共同边的三角形相连. 起点到所有终点的最短距离. 思考历程 数据看起来还挺大的,所以不是什么图论算法. 这显然是一个结论题. 什么结论? 然后我就开始推 ...
- 创建vue项目及引入插件
部署开发环境 安装淘宝镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org 安装webpack cnpm install ...
- CF1166D——数学公式思维题
#include<bits/stdc++.h> using namespace std; #define ll long long ll ans[],a,b,m; /* b=2^(n-2) ...
- docker 安装 ElasticSearch
docker pull docker.elastic.co/elasticsearch/elasticsearch:5.6.9 docker images docker run -e ES_JAVA_ ...
- 你知道的和不知道的sass
关于sass,大多数人的认识一个写css的工具而已 其实就是的 但是这个工具的威力你发挥了多少呢... 以下全部都是干货,希望你能用在自己的项目里 定义集合 我们通常是这么定义变量的 $warning ...
- VS2010-MFC(MFC消息映射机制概述)
转自:http://www.jizhuomi.com/software/147.html 前面已经说过,Windows应用程序是消息驱动的.在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息 ...