基础认识
1. 什么是数据库?
数据库: database,存储数据的仓库
数据库: 高效的存储和处理数据的介质(介质主要是两种: 磁盘和内存)
2. 数据库的分类?
数据库基于存储介质的不同: 进行了分类,分为两类: 关系型数据库(SQL)和非关系型数据库(NoSQL: Not Only SQL, 不是关系型的数据库都叫做非关系型数据库)
3. 不同的数据库阵营中的产品有哪些?
关系型数据库
大型: Oracle, DB2
中型: SQL-SERVER, Mysql等
小型: access等
非关系型数据库:memcached, mongodb, redis(同步到磁盘)
4. 两种数据库阵营的区别?
关系型数据库: 安全(保存磁盘基本不可能丢失), 容易理解, 比较浪费空间(二维表)
非关系型数据库: 效率高, 不安全(断电丢失)
关系型数据库
1. 什么是关系型数据库?
关系型数据库: 是一种建立在关系模型(数学模型)上的数据库.
关系模型: 一种所谓建立在关系上的模型. 关系模型包含三个方面:
数据结构: 数据存储的问题, 二维表(有行和列)
操作指令集合: 所有SQL语句
完整性约束: 表内数据约束(字段与字段), 表与表之间约束(外键)
关键字说明
数据库: database
数据库系统:DBS(Database System): 是一种虚拟系统, 将多种内容关联起来的称呼
DBS = DBMS + DB
DBMS: Database Management System, 数据库管理系统, 专门管理数据库
DBA: Database Administrator,数据库管理员
行/记录: row/record, 本质是一个东西: 都是指表中的一行(一条记录): 行是从结构角度出发,记录是从数据角度出发
列/字段: column/field, 本质是一个东西
SQL
SQL: Structured Query Language, 结构化查询语言(数据以查询为主: 99%是在进行查询操作)
SQL分为三个部分
DDL: DataDefinition Language, 数据定义语言, 用来维护存储数据的结构(数据库,表), 代表指令: create,drop, alter等
DML: DataManipulation Language, 数据操作语言, 用来对数据进行操作(数据表中的内容), 代表指令: insert, delete,update等: 其中DML内部又单独进行了一个分
类:DQL(Data Query Language: 数据查询语言, 如select)
DCL: DataControl Language, 数据控制语言, 主要是负责权限管理(用户), 代表指令: grant,revoke等
SQL是关系型数据库的操作指令, SQL是一种约束,但不强制(类似W3C): 不同的数据库产品(如Oracle,mysql)可能内部会有一些细微的区别.
Mysql数据库
Mysql数据库是一种c/s结构的软件: 客户端/服务端, 若想访问服务器必须通过客户端(服务器一直运行, 客户端在需要使用的时候运行).
客户单连接认证: 连接服务器, 认证身份: mysql.exe -hPup(-hlocalhost -P3306 -uroot -p)
断开连接(释放资源: 服务器并发限制): exit/quit/\q
Mysql服务器对象
将mysql服务器内部对象分成了四层: 系统(DBMS) -> 数据库(DB) -> 数据表(Table) -> 字段(field)
SQL基本操作
基本操作: CRUD
将SQL的基本操作根据操作对象进行分类 ,分为三类: 库操作, 表操作(字段), 数据操作
库操作
对数据库的增删改查.
C:
Create database 数据库名字 [库选项];(可以用中文,但是必须把数据库类型改 set names GBK)
库选项(opt文件): 用来约束数据库, 分为两个选项
字符集设定: charset/character set 具体字符集(数据存储的编码格式): 常用字符集: GBK和UTF8
校对集设定: collate 具体校对集(数据比较的规则)
R :
1. 查看所有数据库: show databases;
2. 查看指定部分的数据库: 模糊查询 Show databases like ‘pattern’; — pattern是匹配模式
pattern %: 表示匹配多个字符 _: 表示匹配单个字符
3. 查看数据库的创建语句: show create database 数据库名字;
U:
数据库名字不可以修改.
数据库的修改仅限库选项: 字符集和校对集(校对集依赖字符集)
Alter database 数据库名字 [库选项];
Charset/ character set [=] 字符集
Collate 校对集
D:
Drop database 数据库名字;
表操作
对数据表的增删改查.
操作前一定要指定哪个数据库!!【①Create table 数据库名.表名(); ②进入数据库环境: use 数据库名字;】
C:
Create table [if not exists] 表名(
字段名字 数据类型,
字段名字 数据类型 — 最后一行不需要逗号
)[表选项];
表选项: 控制表的表现
字符集: charset/character set 具体字符集; — 保证表中数据存储的字符集
校对集: collate 具体校对集;
存储引擎: engine 具体的存储引擎(innodb和myisam)
R :
1. 查看所有表: show tables;
2. 查看指定部分的表: 模糊查询 Show tables like ‘pattern’; — pattern是匹配模式
pattern %: 表示匹配多个字符 _: 表示匹配单个字符
3. 查看表的创建语句: show create tables 表名;
4. 查看表结构: 查看表中的字段信息
Desc/describe/show columns from 表名;
U:
修改表本身和修改字段
修改表本身
表本身可以修改: 表名和表选项
①修改表名: rename table 老表名 to 新表名;
②修改表选项: 字符集,校对集和存储引擎
Alter table 表名表选项 [=] 值;
修改字段
字段操作很多: 新增, 修改, 重名, 删除
新增字段
Alter table 表名 add [column] 字段名 数据类型 [列属性] [位置];
位置: 字段名可以存放表中的任意位置
First: 第一个位置
After: 在哪个字段之后: after 字段名; 默认的是在最后一个字段之后
修改字段: 修改通常是修改属性或者数据类型
Alter table 表名 modify 字段名 数据类型 [属性] [位置];
重命名字段
Alter table 表名 change 旧字段 新字段名 数据类型 [属性] [位置];
删除字段
Alter table 表名 drop 字段名;
D:
Drop table 表名1,表名2…; — 可以一次性删除多张表
数据操作
对数据的增删改查.
C:
Insert into 表名 values(值列表)[,(值列表)]; — 可以一次性插入多条记录
Insert into 表名 (字段列表) values (值列表)[,(值列表)];
R :
Select */字段列表 from 表名 [where条件];
U:
Update 表名 set 字段 = 值 [where条件]; –建议都有where: 要不是更新全部
D:
Delete from 表名 [where条件];
校对集问题
校对集: 数据比较的方式
校对集有三种格式
_bin: binary,二进制比较, 取出二进制位,一位一位的比较, 区分大小写
_cs: casesensitive,大小写敏感, 区分大小写
_ci: caseinsensitice,大小写不敏感,不区分大小写
查看数据库所支持的校对集:show collation;
校对集应用: 只有当数据产生比较的时候,校对集才会生效.