文章目录
1. 关系型数据库
- 关系型数据库
- 非关系型数据库
关系型数据库由关系数据结构、关系操作集合、关系完整性约束三部分组成。
-
关系数据结构
指的是数据以什么方式存储,是一种二维表格的形式存储。本质是一个二维表 -
关系操作集合
如何来关联和管理对应的存储数据、一般使用SQL指令。 -
关系完整性约束
数据内部有对应的关联关系,以及数据与数据之间也有对应的关联关系。
表内约束:对应的具体列只能放对应的数据(不能乱放)
表间约束:自然界各实体都是有着对应的关联关系(外键)
2. 典型的关系型数据库
小型的:MicroSoft Access、SQLite
中型的:SQL Server、MySQL
大型的:Oracle、DB2
3. SQL介绍
SQL分类:
- 数据查询语言,专门用于读数据,代表指令select、show
- 数据操作语言,专门用于写数据,代表指令insert、update、delete
- 事务处理语言,专门用于事务安全处理(不是所有的关系型数据库都提供)
- 数据控制语言,专门用于权限管理,代表指令grant、revoke
- 数据定义语言,专门用于库、表结构的管理,代表指令create、drop(alter)
4. Windows环境安装MySQL
5. MySQL
服务端:mysqld.exe
客户端:mysql.exe
manjaro环境下安装的mycli
6. SQL库操作
创建数据库
create database 库名字 [可选项]
可选项:
- 字符集charset. eg:
create database mydata charset gbk;
- 校对集collate
显示数据库
- 显示全部:
show databases;
- 显示匹配:
show databases like '匹配模式';
匹配模式:’_‘表示当前位置单个字符,’%'表示指定委会多个字符(通配)
选择数据库
use 数据库名;
修改数据库
- 修改数据库的库选项:
alter database 库名 charset = gbk;
- mysql5.5之前可以修改库的名字。
删除数据库
drop database 库名;
7. SQL表操作
创建表
creat table 表名(字段名 字段类型 [字段属性], 字段名 字段类型 [字段属性],...) [表选项]
因为这里没有指定库,所以在这行命令执行之前,需要先选择一个数据库use 库名;
或者,不选择数据库,直接指定某个库create table 库名.表名(...)...
- 表选项
engine:存储引擎(默认是innodb)
charset:字符集
collate:校对集
复制已有的表结构
只复制结构,不复制数据。
create table 表名 like 表名;
当然,后边的那个表名,不一定是当前数据库的,可以用库名.表名这种。
显示数据表
与显示数据库类似,有两种
- 显示所有表
show tables
- 显示匹配
show tables like '匹配模式'
显示表结构
显示表中的字段信息
describe 表名
desc 表名
show columns from 表名
显示表创建时的语句
show create table 表名
修改表的属性
表属性就是表选择项(engine、charset、collate)
alter table 表名 表选项 = 新值
上边的等号也可以不要。
修改表的结构
- 修改表名
rename table 旧表名 to 新表名;
- 新增字段
alter table 表名 add [column] 字段名 字段类型 [插入的位置]
column 可有可无,插入的位置有first 和 after
两种。 - 修改字段名
alter table 表名 change 旧字段名 新字段名 字段类型 [位置]
这里要注意的是,虽然是修改字段名字,但是必须指定这个修改后的字段类型。 - 修改字段类型(属性)
alter table 表名 modify 字段名 新类型 [新属性] [新位置]
- 删除字段
alter table 表名 drop 字段名
删除表
drop table 表名 [, 表名2...]
可以同时删除多个表,但是删除数据库的时候不能这样连续删除。
8. SQl数据操作
插入数据
方式1:指定字段插入数据
insert into 表名 [(字段列表)] values(对应字段列表)
- 注意,值列表(values)中的值只需要与前边字段列表顺序对应即可。例如
insert into mt_student(name, age) values('clay', 26);
与
insert into my_student(age, name) values(26, 'clay');
都可以完成插入操作。 - 命令中的字段列表,不一定非要包含这个表中的所有字段。
insert into my_student(name) values('clay');
方式2:向所有字段插入数据
insert into 表名 values(对应字段列表)
- 注意,这里没有方式1中那字段列表对值列表的顺序限制,所以,这里必须要与库表中的顺序一致才可以。
查询数据
-
查询全部数据的全部字段
select * from 表名;
*
表示通配符,表示把这个表中的全部数据都取出来。 -
查询全部数据的部分字段
select 字段1, 字段2... from 表名;
-
查询部分数据的部分字段(有条件的查询)
select 字段列表或者* from 表名 where 字段名 = 值
这种条件查找,其实是遍历了表中的全部数据,再过滤出来的结果。
删除数据
delete from 表名 [where 条件];
注意,如果没有where条件,会把表中的全部数据都删掉。
修改数据(更新)
更新,通常是修改部分字段数据。
update 表名 set 字段名 = 新值 [where 条件]
注意,如果没有where条件,会把表中这个字段的数据全都修改掉。