博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL数据库学习笔记(一) 数据库概述、MySQL数据类型、运算符,SQL介绍与分类,DDL以及DML
阅读量:3906 次
发布时间:2019-05-23

本文共 5749 字,大约阅读时间需要 19 分钟。

MySQL数据库学习笔记(一)

在学习数据库之前,可能很多同学都会有疑问,为什么要学习数据库呢?前面我们学习编写的代码在执行与保存都是在内存层面的。

数据库可以将数据保存到可掉电存储设备中以供之后使用。持久化的大多数时候是将内存中的数据存储在数据库中,当然也可以存储在磁盘文件或者XML数据文件中。

在这里插入图片描述
此时,又有同学有疑问了,既然能将数据都放在文件中也能进行实现数据持久化,为什么使用数据库呢?原因在于数据库还存在另外一大优点:方便管理数据(例如:快速的检索数据等)。


1.数据库概述

DB:数据库(Database)即存储数据的"仓库"。它保存了一系列有组织的数据。

DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,例如:建立、使用和维护数据库。

MySQL是一种开放源代码的关系型数据库管理系统。关系型数据库,采用关系模型来组织数据,简单的说,关系模型就是二维表格模型。

关系型数据库设计规则:

关系型数据库设计规则
遵循ER模型和三范式
ER模型-E:entity 代表实体的意思,对应到数据库当中对应一张表;R:relationship代表关系的意思
三范式:1.列不能拆 2.唯一表示 3.关系引用主键
  • 具体表现:
  • 将数据放入表中,表再放入库中。
  • 一个数据库中可以由多张表,每一个表只有一个名字,用来标识自己。表名具有唯一性。
  • 表中含有一些特性,这些特性定义了数据在表中如何存储,类似java中"类"的设计。
  • 表由列组成,也可以称为字段。每个字段描述它所含有的数据意义。数据表的设计实际上就是对字段设计。
  • 表中的数据是按行进行存储的,一行就是一条记录。每一行类似与java中的"对象"。

在这里插入图片描述


2.SQL的语言规范与分类

SQL:结构化查询语句。

SQL的语言的规范
1.mysql对于sql语句不区分大小写,SQL语句关键字最好大写。
2.值,除了数值型,字符串和日期时间类型使用单引号。
3.别名尽量使用双引号,而且不建议省略as关键字。
4.所有标点符号使用英文状态下的半角输入方式。
5.必须保证所有(),单引号,双引号是成对结束的。
6.可以使用(1)#单行注释 (2)–空格单行注释 (3)/* 多行注释 */
SQL语言的命名规则
数据库、表名不得超过30个字符。
必须只能包含A-Z,a-z,0-9,_共63个字符。
不能在对象名的字符间留空格。
必须不能和用户定义的其他对象重名。
必须不能保证书写的字段没有和保留字、数据库系统或常用方法冲突。

SQ语句的分类:

SQL语句的分类
1.DDL(Data Definution Lanuages):数据定义语句,这些语句定义了不同的数据段、数据表、表、列、索引等数据库对象。主要的语句关键字包含create、drop、alter等。
2.DML(Data Manipulation Lanuages):数据库操作语句,用于添加、删除、更新和查询数据库记录,并检查数据的完整性。
3.DCL(Data Control Lanuages):数据库控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句主要的语句关键字包含grant、revoke等

3.MySQL数据类型

常用的数据类型有:

  • 整型(***int)
  • 位类型(bit)
  • 浮点型(float和double)
  • 定点数(decimal,numeric)
  • 日期时间类型(date,time,datetime,year)
  • 字符串(char,varchar,text)
  • 二进制数据(**Blob,**binary)
  • 枚举(enum)
  • 集合(set)

下面对常用的一些MySQL数据类型进行学习了解。


3.1 整数

整数类型 字节 最小值(有符号/无符号) 最大值
TINYINT 1 -128/0 127/255
SAMLLINT 2 -32768/0 32767/65535
MEDIUMINT 3 -8388608/0 8388607/1677215
INT、INTEGER 4 -2147483648/0 -2147483648/0
BIGINT 8 -9223372036854775808/0 9223372036854775807/18446744073709551615

整数列的可选属性有三个:

  • M:宽度(在0填充的时候才有意义,否则不需要指定)
  • unsigned:无符号类型(非负)
  • zerofill:0填充,(如果某列是zerofill,那么默认就是无符号),如果指定了zerofill只是表示不够M位时,用0在左边填充。如果超过M位,只要不超过数据存储范围即可。

3.2 浮点数

对于浮点数类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。

  • MySQL允许使用非标准语法:FLOAT(M,D)或DOUBLE(M,D)。这里,(M,D)表示该值一共显示M位,其中D表示小数点后几位,M和D又称为精度和标度。
  • float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统决定)来显示。

3.3 定点型

  • DECIMAL在MySQL内部以字符串形式存放,比浮点数更精确。定点类型占M+2个字节。
  • decimal(M,D):表示最长M位,其中小数点后D位。

3.4 日期时间类型

类型 说明 标准格式 范围
date 日期 YYYY-MM-DD 1000-01-01到9999-12-31
time 时间 HH:MM:SS -839:59:59到838:59:59
datetime 日期时间 YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00到9999-12-31 23:59:59
year 年份类型 YYYY和YY(不推荐) 1901-2155
timestamp 时间戳 YYYY-MM-DD HH:MM:SS 1970 01-01 00:00:01到2038-01-19 03:14:07

注意:需要注意每一种日期时间的表示范围。


4. MySQL运算符

MySQL常用运算符有:算数运算符、比较运算符、逻辑运算符、范围运算符、模糊查询等。下面将逐一进行了解学习。


4.1 算数运算符

算数运算符
+:加号
-:减号
*:乘号
/:除号
%或者mod:求余数

注意:/表示除,可以保留小数部分;div表示整数与整数相除只能保留整数部分。

/*运算符1、算术运算符+:加-:减*:乘/:除   可以保留小数部分div:除  如果整数与整数相除只保留整数部分%:求余数mod:求余数*/select 1/2; #0.5select 1 div 2; #0

4.2 比较运算符

/*比较运算符>:大于<:小于=:等于  注意区别,Java中是==,mysql中是=>=:大于等于<=:小于等于!=:不等于<>:不等于<=>:安全等于  用于判断null值的比较运算符		null值的判断,习惯上我们用is null 和is not null*/-- 查询薪资大于20000元的员工select * from employees where salary>20000;-- 查询所有job_id为AD_PRES的员工信息SELECT  * from employees where job_id='AD_PRES';-- 查询所有job_id不为AD_PRES的员工信息SELECT  * from employees where job_id!='AD_PRES';SELECT  * from employees where job_id <>'AD_PRES';-- 查询奖金比例commission_pct是null的员工SELECT * from employees where commission_pct is null;

4.3 逻辑运算符

/*逻辑运算符&&和and:逻辑与	两个条件同时满足||和or:逻辑或	两个条件满足任意一个^和xor:逻辑异或	两个条件只能满足其中一个!和not:	不满足xx条件	*/;# 查询薪资大于20000的女员工select * from employee where salary>20000 && gender='女';SELECT * from employee where salary>20000 and gender='女';# 查询男员工SELECT * from employee where not gender='女';SELECT * from employee where !(gender='女');# 查询薪资大于10000异或  性别是男的(查询的结果为:工资大于10000的女性以及工资小于10000的男性)SELECT * from employee where salary>10000 xor gender='男';

4.4 范围运算符

/* 范围运算符  区间范围:[a,b]的范围   betweeen a and b  不在[a,b]的范围  not between a and b        集合范围:in(...)          not in(...)  */# 查询薪资在[15000,20000]之间的员工SELECT * from employees where salary BETWEEN 15000 and 20000;# 查询薪资是9000,10000.12000SELECT * from employees where salary in(9000,10000,12000)

4.5 模糊查询

/*like'%x%'  x代表确定的字符  %表示不确定的0~n个字符 like'_x%'  _表示不确定的1个字符 */#查询,名字中包含“冰”这个字的员工SELECT * from employees where  ename like '%冰%';#查询:名字ename是李**,三个字的员工SELECT * from employees where ename like'李__';

5. DDL

1、查看所有数据库

show databases;

2、指定使用某个数据库

use 数据库名;

3、创建数据库

create database 数据库名;

4、删除数据库

drop database 数据库名;

5、查看某个库下的所有表格

show tables ;  #前提是前面有use 数据库名;的语句show tables from 数据库名;

6、创建表格

create table 【数据名.】表名(	字段名1 数据类型,	字段名2 数据类型,	....);

7、删除表格

drop table 【数据库名.]表名称;

8、查看某个表结构

describe 【数据库名.]表名称;desc 【数据库名.]表名称;

9、增加一列

alter table 【数据库名.]表名称 add 【column】 字段名 数据类型;alter table 【数据库名.]表名称 add 【column】 字段名 数据类型 first;alter table 【数据库名.]表名称 add 【column】 字段名 数据类型 after 另一个字段;

10、删除一列

alter table 【数据库名.]表名称 drop 【column】 字段名;

11、修改列数据类型

alter table 【数据库名.]表名称 modify 【column】 字段名 新数据类型;

12、修改列名

alter table 【数据库名.]表名称 change【column】 旧字段名 新字段名 新数据类型;

13、修改列的位置

alter table 【数据库名.]表名称 modify 【column】字段名 数据类型 first;alter table 【数据库名.]表名称 modify 【column】字段名 数据类型 after 另一个字段;

14、修改表名称

alter table 旧表名 rename 新表名;rename table 旧表名 to 新表名;

 


6. DML

1、添加数据

insert into 【数据库名.]表名称 values(值列表); #要求值列表的顺序、个数、类型,要与表格中的字段的顺序、个数、类型一一匹配insert into 【数据库名.]表名称(部分字段列表) values(值列表);#要求列表的顺序、个数、类型,要与前面的(部分字段列表)的顺序、个数、类型一一匹配insert into 【数据库名.]表名称 values(值列表1),(值列表2)。。。;insert into 【数据库名.]表名称(部分字段列表) values(值列表1),(值列表2)。。。;

2、修改数据

update 【数据库名.]表名称 set 字段名1 = 值1, 字段名2 = 值2 。。。 【where 条件】;

如果没有加where条件,表示修改所有行,这个字段的值

3、删除数据

delete from 【数据库名.]表名称 【where 条件】;

如果没有where条件,表示删除整张表的数据;

4、简单查询数据

select * from 【数据库名.]表名称; #查询整张表的所有数据select 字段列表  from 【数据库名.]表名称;  #查询部分列表select * from 【数据库名.]表名称 【where 条件】;select 字段列表  from 【数据库名.]表名称 【where 条件】;

总结

MySQL数据库的学习大体上是SQL语句的学习,本节首先了解了MySQL数据类型以及运算符,然后对SQL的分类有所了解,最后对SQL语句中的DDL(数据库定义语言)以及DML(数据库操作语言),但对DML中具体数据查询后面将会做更详细的学习。

在这里插入图片描述

转载地址:http://bcqen.baihongyu.com/

你可能感兴趣的文章
Java本地接口(JNI)编程指南和规范(第二章)
查看>>
有关使用xsl输出csv格式文档的实践小结
查看>>
在Ubuntu 12.04 为 Eclipse 添加快速启动项
查看>>
GCC强大背后
查看>>
Android x86模拟器Intel Atom x86 System Image配置与使用方法
查看>>
shell脚本兼容linux/unix与windows/cygwin的基础(注意处理好CR, LF, CR/LF 回车 换行的问题)
查看>>
【分享】手把手教你使用U盘安装Ubuntu系统
查看>>
Ubuntu下adb无法识别android设备的解决方法
查看>>
使用U盘安装Ubuntu系统的实践小结
查看>>
编译cscope-15.8a遇到的问题与解决方案
查看>>
ubuntu下海信Hisense E920 usb连接不上的处理与adb的连接
查看>>
findbugs的ant脚本实践
查看>>
Ubuntu 12.04 安装 Subversion 1.7
查看>>
scp port 22: Connection refused
查看>>
ubuntu12.04命令行下安装RabbitVCS
查看>>
自定义cscope-index
查看>>
(ubuntu)在andorid andk工程中使用ccache加速编译速度
查看>>
android graphics system学习资料汇总
查看>>
GDB
查看>>
Oracle RAC Failover 详解
查看>>