Content
- 数据库基础
- 数据库和数据表管理
- 简单查询与数据操作
- 备份和回复数据
数据库j经历过程:手工管理阶段>文件管理阶段>数据管理阶段
数据库的特征:
- 数据结构化
- 实现数据共享
- 减少数据冗余
- 数据独立性
数据库管理系统(DBMS)
数据库类型(按数据模型特点分):
- 网状型数据库(采用记录类型为节点的网状数据模型)
- 层次型数据库(采用层次模型模拟现实世界中按层次组织起来的事物)
- 关系型数据库(采用二维表结构组织和管理数据,并规定了表内和表间数据的依赖关系)
数据库基础概述
关系数据库是指一些相关的表和其他数据库对象的集合。对于关系数据库来说,关系就是表的同义词。
- 表是由行和列组成(类似二维数组的结构)
- 列包含一组命名的属性(也称字段)
- 行包含一组记录,每行包含一条记录
- 行和列的交集称为数据项,指出了某列对应的属性在某行上的值,也称为字段值
- 列需定义数据类型,比如整数或者字符型的数据
常见关系型数据库:
- Oracle
- MySQL
- SQL Server
SQL语言主要是用来操作关系型数据库的一本语言,称之为结构化查询语句
SQL语句主要分为:
- DQL:数据查询语言,用于对数据进行查询,如select
- DML:数据操作语言,对数据进行增加、修改、删除,如insert、update、delete
- TPL:事务处理语言,对事物进行处理,包括begin transaction、commit、rollback
- DCL:数据控制语言,进行授权与权限回收,如grant、revoke
- DDL:数据定义语言,进行数据库、表的管理等,如create、drop
- CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor
MySQL的特点:
- 使用C和C++编写,使用了多种编译器进行测试,保证源代码的可移植性
- 全面支持SQL的group by/order by语句,聚合函数(count()、count(distinct)、avg()、std()、sum()、max()、min())可以在同一查询中混来自不同数据库的表
- 为多种编程语言提供了API,如C、C++、Python、Java、Perl、PHP、Eiffel、Ruby等
- 支持多种存储引擎
数据库的管理
连接数据库:
- mysql-u账号-p密码-h主机地址-P端口
- mysql-uroot-pmysql
查看数据版本
- select version()
显示当前时间
- select now()
查看所有数据库
- show databases
创建数据库
- create database 数据库名 charset=utf8
切换数据库
- use数据库名
查看当前正在使用哪个数据库
- select database()
删除数据库
- drop datatbase数据库名
数据表管理-数据表设计
- 数据表设计包括ER图、表的主键、字段、数据类型、约束、表之间关系的设计
- E-R (Entity-Relationship) 模型 即 实体-关系模型,主要用于定义数据的存储需求,该模型已经广泛用于关系数据库设计中。E-R模型由实体、属性、和关系三个基本要素构成
- 主键(Primary Key)数据库表要求表中的每一行记录都必须是唯一的,即在同一张表中不允许出现完全相同的两条记录。在设计数据库时,为了保证记录的“唯一性”,最为普遍、最为推荐的做法是为表定义一个主键(primary key)。主键有2个特征:1)可以由一个字段构成,也可以由多个字段构成(即复合主键);2)主键的值具有唯一性且不能取空值(NULL),当由多个字段构成时,每个字段的值不能取NULL值
- 实体间的关系与外键(Foreign Key),比如班级实体和班主任实体之间一对一的关系,班级实体和学生实体之间为一对多的关系,学生实体和课程实体之间为多对多的关系。实体之间的关系可以通过外键来表示,如果表A中的一个字段a对应于表B的主键b,则字段a称为表A的外键。此时存储在表A中字段a的值,同时这个字段值也是表B主键b的值
- 约束(Constraint)是定义在表上的一种强制规则。当为某个表定义约束后,对该表做的所有SQL操作都必须满足约束的规则要求,否则操作将失败,约束类型有:
约束 | 说明 |
---|---|
NOT NULL | 非空约束,指定某列的所有行数据不能包含空值 |
UNIQUE | 唯一性约束,指定列或者列的组合的所有行数据必须唯一 |
PRIMARY KEY | 主键约束,在列及引用列上建立的一种强制依赖关系 |
FOREIGN KEY | 外键约束,在列及引用列上建立的一种强制依赖关系 |
CHECK | 检查性约束,在列上指定一个必须满足的条件 |
数据表管理-创建表
- 查看当前数据库中的表:show table
- 创建表:
create table 表名(
id int unsigned auto_increment primary key not null,
name varchar(10) not null,
is_delete bit(1) not null default 0
);
- 创建学生表
create table students(
id int auto_increment primary key not null,
name varchar(10) not null,
gendar bit(1) default 0,
hometown varchar(40) deafault ""
);
- comment 注释,在创建表的时候如果字段很多,防止忘记字段是存什么数据的,可以给字段添加注释
create table students(
id int auto_increment primary key not null comment '主键',
name varchar(10) not null comment '学生姓名',
gendar bit(1) default 0 comment ‘性别’,
hometown varchar(40) default "" comment '家乡地址'
);
- 查看创建表的sql语句
show create table 表名
- 添加字段
alter table 表名 add 列名 类型;给students添加一个生日字段:
mysql>alter table students add birthday date;
- 删除字段
alter table 表名 drop 字段名字;将students表中的gendar字段删除:
mysql>alter table students drop gendar;
- 修改字段
1)不修改字段名,只修改类型及约束
alter table 表名 modify 列名 类型及约束;
mysql>alter table students modify hometown varchar(40) default NULL;
2)需要修改字段名字
alter table 表名 change 原名 新名 类型及约束;
mysql>alter table class change is_delete delete bit(1) NOT NULL DEFAULT b'0';
- 删除表
mysql>drop table 表名;
navicat for mysql连接不上mysql服务的原因排除:
1.确保mysql的数据库服务正确启动
2.输入的用户名和密码是否正确
3.数据是否开启远程连接【默认安装mysql数据完成后 只允许本地连接】
注意:对mysql配置文件更改完毕之后,一定要重启mysql服务,否则不会生效
基本查询语句
select * from 表名:
例:select * from students; 查询students表中的所有内容
插入数据
- 全部插入,有多少个字段,必须插入多少个字段,即使默认可以为空的字段也要占用。主键自增也需要占位一般使用0占位
insert into 表名 values(......)
例:insert into students values(0,'韩信',0,'广州'); 在students表中插入学生信息
- 部分插入
insert into 表名(字段1,字段2) values(值1,值2);
例:insert into students(name,gendar) values('貂蝉',1);
- 全列多行插入,多行插入每一行的内容写在一个小括号内,用逗号分隔多行
insert into 表名 values(...),(...),(...);
例:insert into students values(0,'后羿',0,'广州'),(0,1,'广州'),(0,'嬴政',0,'广州');
- 部分列多行插入
insert into 表名 (字段1,字段2) values (...),(...);
例:insert into students(name,gendar,hometown) values('狄仁杰',0,'深圳'),('鲁迅七号',1,’深圳'),('孙尚香',1,'深圳');
修改数据
update 表名 set 字段=xxx where 字段=xxx; 修改某一行的内容一定要加where限定条件,否则会造成全表修改,除非是想要全表修改效果
例:update students set hometown='珠海' where id=5;
删除数据
delete from 表名 where 字段=xxx;
例:delete from students where id=3;
查询指定列
select id,name from student; 指定id和name列查询
备份数据库
mysqldump -uroot -p 数据库名 > python.sql;
mysqldump -uroot -p pyhthon > python.sql
提示输入密码,mysql的密码
备份某个表直接在数据库名后面加表名
mysqldump -uroot -p 数据库名 数据表名 > class.sql
mysqldump -uroot -p python class > class.sql
恢复数据库
mysql -uroot -p 新数据库名 < python.sql
备份数据库,转储SQL文件即可以进行数据库备份
知识小结
- 数据库基础、SQL数据库介绍(基本了解)
- MySQL安装(重点)
- 数据库和数据表管理:数据库管理(E-R模型)、数据表管理、图形化界面操作数据库(Navicat)
- 简单查询与数据操作(基本查询语句、插入数据、修改数据、删除数据)
- 备份和恢复数据库(备份数据库、恢复数据库、图形界面备份和恢复数据库)
Practice
1.写出全列插入和部分插入的语法格式:
insert into 表名 values('值1','值2',...) 值的数量必须和列的数量一致
insert into 表名('列1','列2',...) values('值1','值2',...) 值的数量必须和列的数量一致
2.使用Navicat