本文共 5749 字,大约阅读时间需要 19 分钟。
数据库可以将数据保存到可掉电存储设备中以供之后使用。持久化的大多数时候是将内存中的数据存储在数据库中,当然也可以存储在磁盘文件或者XML数据文件中。
此时,又有同学有疑问了,既然能将数据都放在文件中也能进行实现数据持久化,为什么使用数据库呢?原因在于数据库还存在另外一大优点:方便管理数据(例如:快速的检索数据等)。DB:数据库(Database)即存储数据的"仓库"。它保存了一系列有组织的数据。
DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,例如:建立、使用和维护数据库。
MySQL是一种开放源代码的关系型数据库管理系统。关系型数据库,采用关系模型来组织数据,简单的说,关系模型就是二维表格模型。
关系型数据库设计规则:
关系型数据库设计规则 |
---|
遵循ER模型和三范式 |
ER模型-E:entity 代表实体的意思,对应到数据库当中对应一张表;R:relationship代表关系的意思 |
三范式:1.列不能拆 2.唯一表示 3.关系引用主键 |
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等 |
常用的数据类型有:
下面对常用的一些MySQL数据类型进行学习了解。
整数类型 | 字节 | 最小值(有符号/无符号) | 最大值 |
---|---|---|---|
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 |
整数列的可选属性有三个:
对于浮点数类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。
类型 | 说明 | 标准格式 | 范围 |
---|---|---|---|
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 |
注意:需要注意每一种日期时间的表示范围。
MySQL常用运算符有:算数运算符、比较运算符、逻辑运算符、范围运算符、模糊查询等。下面将逐一进行了解学习。
算数运算符 |
---|
+:加号 |
-:减号 |
*:乘号 |
/:除号 |
%或者mod:求余数 |
注意:/表示除,可以保留小数部分;div表示整数与整数相除只能保留整数部分。
/*运算符1、算术运算符+:加-:减*:乘/:除 可以保留小数部分div:除 如果整数与整数相除只保留整数部分%:求余数mod:求余数*/select 1/2; #0.5select 1 div 2; #0
/*比较运算符>:大于<:小于=:等于 注意区别,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;
/*逻辑运算符&&和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='男';
/* 范围运算符 区间范围:[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)
/*like'%x%' x代表确定的字符 %表示不确定的0~n个字符 like'_x%' _表示不确定的1个字符 */#查询,名字中包含“冰”这个字的员工SELECT * from employees where ename like '%冰%';#查询:名字ename是李**,三个字的员工SELECT * from employees where ename like'李__';
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 新表名;
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/