数据库基础
定义:
Database:A database is an organized collection of data,
stored and accessed electronically. [wikipedia]
数据库:数据库是按照数据结构来组织、存储和管理数据
的仓库。【百度百科】
分类:
关系型数据库
不仅存储数据本身,还存储数据之间的关系,比如说用户信息和订单信息。
关系型数据库模型把复杂的数据结构归结为简单的二维表(关系表) 。
非关系型数据库
非关系型数据库也被称为NoSQL数据库。NoSQL的产生并不是要否定
关系型数据库,而是作为关系型数据库的一个有效补充。
易混淆术语:
数据库系统(DBS):是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员(DBA)构成。
数据库管理系统(DBMS):是一种操纵和管理数据库的大型软件,
用于建立、使用和维护数据库(如:MySQL)。
数据库(DB):数据库是按照数据结构来组织、存储和管理数据的仓库。
数据库管理系统、数据库服务、数据库和表的关系
典型的C/S架构
红色框中是服务器端
客户端通过SQL语言向服务器端发送需求。
MySQL接受客户端的请求。
MySQL会管理很多个数据库,每个数据库中又有多张表
·································································································································································································································
DB-Engines排行榜(2019/5)
可以简单的人为Redis就是存在于内存中的一个很大的Map,并且对key和value做了很多的限制,key必须是String类型,value有五六种类型。
可以把Redis当做缓存使用。
·································································································································································································································
数据在表中的形式:
对象与行对应,属性与列对应
对象关系映射(Object Relational Mapping,简称ORM):Hibernate & MyBatis
·································································································································································································································
登录 MySQL Server
在启动 MySQL 服务后,输入以下格式的命令:
mysql -h 主机名 -u 用户名 –p
-h:该参数用于指定客户端的主机名(host),即哪台机器要登录 MySQL Server,如果是当前机器该参数可以省略;
-u:用户名(user)。
-p:密码(password),如果密码为空,该参数可以省略。
h:localhost
·································································································································································································································
SQL简介
SQL是结构化查询语言(Structured Query Language)的缩写。
它是一种专门用来与关系型数据库沟通的语言。
它主要有如下的优点:
SQL 是一种通用语言,几乎所有的关系型数据库都支持 SQL。
SQL 简单易学。它的语句是由一些有很强描述性的关键词组织而成,
而且这些关键词并不多。
SQL 虽然简单,但它是一种强有力的语言,灵活地使用 SQL,
可以进行非常复杂的数据库操作。
半衰期很长 SQL92, SQL99
说明:SQL 的扩展
标准 SQL 是由 ANSI 标准委员会管理的,从而称为 ANSI SQL。许多 DBMS 厂商通过增加语句或指令,对 SQL 进行了扩展,目的是提供一些特定的操作,或者是简化某些操作。 虽然这种扩展很有必要,但同时也给 SQL 代码的移植带来了麻烦。
即使 DBMS 有自己的扩展,但它们都支持 ANSI SQL。
注意:请正确认识 “SQL 不区分大小写“
虽然 SQL 不区分大小写,但是表名、列名和值可能区分!(这依赖具体的 DBMS 及其配置)。
SQL 不区分大小写(关键字不区分大小写)!!!
建议:关键字大写, 表名,列名,值最好是以它定义时值
这个组成其实是按照SQL语言的功能划分的:
组成:
DDL: 数据定义语言
DML:数据操作语言 (增,删,改)
DQL: 数据查询语言 (查)
DCL: 数据控制语言
TPL: 事务处理语言
…
·································································································································································································································
数据定义语言(DDL)
DDL:Data Definition Language
作用:创建 & 管理数据库和表的结构。
常用关键字:
CREATE ALTER DROP
创建数据库
查看、删除数据库
修改数据库
修改数据库名称
很遗憾地告诉你,官方并没有提供直接修改数据库名称的命令。
·································································································································································································································
关于表的一些操作:
创建表
如果创建表的时候没有指定的字符集和校对规则,那么默认这张表的字符集和校对规则就是数据库的字符集和校对规则。
如果创建表的时候指定了的字符集和校对规则,那么这张表的数据就会使用你创建表时的字符集和校对规则。
·································································································································································································································
查询表
简单描述表结构
DESC 表名
或者
DESCRIBE 表名
查看生成表的 DDL 语句
SHOW CREATE TABLE 表名
·································································································································································································································
修改表
RENAME TABLE 语句的另一个用法是移动该表到另一个数据库
语法为:
RENAME TABLE 旧数据库名.旧表名 TO 新数据库名.新表名
提示:我们可以把 RENAME TABLE 的这两种用法很好地统一起来,如果我们把 “重命名” 理解为 “在同一数据库里的移动”。甚至我们可以省略数据库名,如果你恰好正在使用该数据库。
删除表
DROP TALBE 表名
·································································································································································································································
总结:
数据库基础
定义
分类
a.关系型数据库
Oracle
MySQL
Microsoft SQL Server
MariaDb
...
b.非关系型数据库
文档型
键值值
搜索引擎
列存储
图数据库
易混淆的概念
数据库系统
数据库管理系统(DBMS)
数据库
RDBMS架构(C/S)
ORM思想
MySQL的安装和配置
SQL
介绍
组成:
DDL
DML
DQL
DCL
TPL
...
DML
数据库
查:
show databases;
show create database db_name;
增:
create database [if not exists] db_name [character set, collate];
改:
alter database db_name [character set, collate]
删:
drop database db_name;
表:
查:
show tables;
show create table tb_name;
describe/desc tb_name;
增:
create table tb_name(
col_name type,
col_name type,
col_name type
)[engine, character set, collate];
改:
a. 添加列
alter table tb_name add column new_col_name type;
alter table tb_name add column new_col_name type after col_name;
alter table tb_name add column new_col_name type first;
b. 修改列
alter table tb_name change column col_name new_col_name type;
alter table tb_name modify column col_name type;
c. 删除列
alter table tb_name drop column col_name;
d. 重命名/迁移
rename table tb_name to new_tb_name;
e. 修改存储引擎,字符集,校对集
alter table tb_name [engine, character set, collate];
删:
drop table tb_name;
############################字符集和校对规则########################
#查看所有字符集
show char set;
#查看所有的校对集
show collation;
#查看数据库中默认的字符集
#1.当年及布置名字时
show variables like '%char%';
#2.记得名字时,@@表示系统变量
select @@character_set_database;
#################################数据库################################
# a.查询数据库
show databases; #查看所有的数据库
show create database mydb1; #查询数据库的创建语句
show create database mydb2;
# b.创建数据库
# create database [if not exists] db_name [specification];
#练习1:创建一个数据库mydb1
create database mydb1;
#练习2:创建一个使用gbk字符集的mydb2数据库
create database if not exists mydb1 character set gbk;
create database if not exists mydb2 character set gbk;
#练习3:创建一个使用gbk字符集,并带校对规则(校对集)的mydb3数据库。
create database if not exists mydb3 character set gbk collate gbk_bin;
# c.删除数据库
#语法:DROP DATABASE [IF EXISTS] db_name
#练习:删除数据库mydb3
drop database if exists mydb3;
# d.修改数据库
#语法:alter database db_name [specification]
#练习:把mydb2的字符集修改为utf8
alter database mydb2 character set utf8;
#################################表################################
# a.查看表
show tables; #查看数据库中的所有表
show create table t_user; #查看表的定义语句
desc t_user;
describe t_user; #查看表的结构
# b.创建表
#语法:
/*
create table tb_name (
field1 datatype,
field2 datatype,
field3 datatype
)*/
use mydb1;
#练习:创建user(id,name,password,birthday)
create table t_user (
id int,
name varchar(255),
password varchar(20),
birthday date
);
# c.修改表
#语法:alter table tb_name add (column) column_name datatype, add column_name datatype...
#练习1:添加gender列
alter table t_user add gender varchar(20); #默认添加在表尾部
#练习2:在password后面增加balance列
alter table t_user add balance int after password;
#练习3:在最前面添加no列
alter table t_user add no int first;
#练习4:添加a,b列
alter table t_user add a int, add b int;
#修改列
#修改列的名字
#语法:alter table tb_name change (column) col_name new_col_name datatype [specification]
#练习:把balance的名字改成salary
alter table t_user change balance salary int;
#修改列的定义
#语法:alter table tb_name modify (column) col_name datatype [specification]
#练习:把salary的类型修改成decimal(10,2)
alter table t_user modify salary decimal(10,2);
#删除列
#语法:alter table tb_name drop column col_name;
#练习:删除a列
alter table t_user drop column a;
#练习:删除b列,把gender的类型改成bit(1),在name列的后面添加c列
alter table t_user drop column b, modify gender bit(1), add column c int after name;
#修改表的名字
#语法:rename table tb_name to new_tb_name;
#练习:将t_user表更名为user
rename table t_user to user;
show tables;
#练习:把mydb1中的user迁移到mydb2,并且重命名为t_user
rename table user to mydb2.t_user;
show tables;
show tables in mydb2;
#修改表的字符集
#语法:alter table character set charset_name
rename table mydb2.t_user to t_user;
show create table t_user;
alter table t_user char set gbk;
#删除表
#语法:drop table tb_name;
drop table if exists t_user;
show tables;