目录
1.数据库基础
2.数据库和数据表管理
3.简单查询与数据操作
4.备份和恢复数据库
导入:——MySQL基本使用
在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。
本课目标:
1.掌握数据库相关概念,并且能够在Linux系统上快速安装MySQL数据库服务器和客户端(重点)
2.能够根据软件业务,设计数据表,并且创建对应数据库、表(重点、难点)
3.能够根据具体业务需求,进行简单查询和数据操作(重点)
4.能够快速备份和恢复数据库,并养成备份数据库的好习惯
1.数据库基础
数据库基础概述
数据管理主要经历过程:
手工管理阶段 :应用程序管理数据、数据不保存、不共享、不具有独立性。
文件管理阶段 :文件系统管理数据、数据可长期保存、但共享性差、冗余度大、独立性差。
数据管理阶段:数据库系统管理数据、数据结构复杂、冗余小、易扩充、较高的独立性、统一数据控制。
数据库的特征:
数据结构化
实现数据共享
减少数据冗余
数据独立性
数据库类型(按数据模型特点分)
网状型数据库
层次型数据库
关系型数据库
网状数据库:采用记录类型为节点的网状数据模型
层次数据库:采用层次模型模拟现实世界中按层次组织起来的事物
•关系型数据库:采用二维表结构组织和管理数据,并规定了表内和表间数据的依赖关系
关系数据库是指一些相关的表和其他数据库对象的集合。对于关系数据库来说,关系就是表的同义词。
表是由行和列组成(类似二维数组的结构)。
列包含一组命名的属性(也称字段)。
行包含一组记录,每行包含一条记录。
行和列的交集称为数据项,指出了某列对应的属性在某行上的值,也称为字段值。
列需定义数据类型,比如整数或者字符型的数据。
关系数据库的数据结构图示:
常见的数据库
MySQL是由瑞典 MySQL AB公司开的一种开放源代码的关系型数据库管理系统(RDBMS),目前属于 Oracle 旗下产品。
MySQL数据库系统使用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。
由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。
MySQL因为其速度、可靠性和适应性而备受关注。
SQL语言主要是用来操作关系型数据库的一本语言,称之为结构化查询语句
SQL语句主要分为:
DQL:数据查询语言,用于对数据进行查询,如select
DML:数据操作语言,对数据进行增加、修改、删除,如insert、udpate、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 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库
2.数据库和数据表管理
连接数据库
mysql -u账号 -p密码 -h主机地址 -P端口
mysql -uroot -pmysql
查看数据库版本
select version();
显示当前时间
select now();
查看所有数据库:
show databases;
创建数据库
create database 数据库名 charset=utf8;
注意:创建库的时候一定要指定编码utf8,utf8中间没有-,跟pyhton中写编码有点区别
切换数据库:
use 数据库名
查看当前正在使用哪个数据库
select database();
删除数据库
drop database 数据库名;
数据表管理-数据表设计
数据表设计包括ER图、表的主键、字段、数据类型、约束、表之间关系的设计
E-R(Entity-Relationship)模型即实体-关系模型主要用于定义数据的存储需求,该模型已经广泛用于关系数据库设计中。E-R模型由实体、属性和关系三个基本要素构成。
主键(Primary Key)
数据库表要求表中的每一行记录都必须是唯一的,即在同一张表中不允许出现完全相同的两条记录。
在设计数据库时,为了保证记录的“唯一性”,最为普遍、最为推荐的做法是为表定义一个主键(primary key)。
数据库表中主键有以下两个特征:
表的主键可以由一个字段构成,也可以由多个字段构成(这种情况称为复合主键)。
数据库表中主键的值具有唯一性且不能取空值(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 tables;
创建表
create table PythonDB(
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,
gender bit(1) default 0,
hometown varchar(40) default ""
) ;
comment 注释,在创建表的时候如果字段很多,防止忘记字段是存什么数据的,可以给字段添加注释。
create table students(
id int auto_increment primary key not null comment '主键’,
name varchar(10) not null comment '学生姓名’,
gender bit(1) default 0 comment '性别’,
hometown varchar(40) default "" comment '家乡地址’
) ;
查看创建表的sql语句
show create table 表名;
添加字段
alter table 表名 add 列名 类型;
给students添加一个兴趣爱好字段
mysql> desc students;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| gender | bit(1) | YES | | b'0' | |
| hometown | varchar(40) | YES | | | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)mysql> alter table students add hobby varchar(100);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> desc students;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| gender | bit(1) | YES | | b'0' | |
| hometown | varchar(40) | YES | | | |
| hobby | varchar(100) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
删除字段
alter table 表名 drop 字段名字;
将students表中的hobby字段删除
mysql> desc students;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| gender | bit(1) | YES | | b'0' | |
| hometown | varchar(40) | YES | | | |
| hobby | varchar(100) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
5 rows in set (0.02 sec)mysql> alter table students drop hobby;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> desc students;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| gender | bit(1) | YES | | b'0' | |
| hometown | varchar(40) | YES | | | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)
修改字段
第一种,不修改字段名只修改类型及约束
alter table 表名 modify 列名 类型及约束;
mysql> desc students;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| gender | bit(1) | YES | | b'0' | |
| hometown | varchar(40) | YES | | | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)mysql> alter table students modify hometown varchar(70) not null;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> desc students;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| gender | bit(1) | YES | | b'0' | |
| hometown | varchar(70) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
第二种,需要修改字段名字
alter table 表名 change 原名 新名 类型及约束;
mysql> desc students;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| gender | bit(1) | YES | | b'0' | |
| hometown | varchar(70) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)mysql> alter table students change gender sex bit(1);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> desc students;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| sex | bit(1) | YES | | NULL | |
| hometown | varchar(70) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)
数据表管理- 删除表
drop table 表名;
删除学生表students
mysql> drop table students;
Query OK, 0 rows affected (0.00 sec)mysql> show tables;
Empty set (0.00 sec)
图形化界面操作数据库
下载安装图形界面工具Navicat
Navicat官网:https://www.navicat.com.cn/
mysql 刚装好root账号默认只能本地登录,不能在其他机器登录的。使用Navicat连接之前,先在命令行客户端将mysql的用户登录权限进行修改;
修改步骤:
(1)mysql -uroot -p123456 连接数据库
(2)use msyql 进入mysql数据库
(3)select host,user from user; 查看账号有哪些权限
(4)将root登录权限修改成所有主机都能登录
grant all privileges on *.* to 'root'@'%';
(5)注释配置文件的bind-address
把/etc/mysql/mysql.conf.d/mysqld.cnf配置文件里面的bind-address注释掉
使用Navicat连接MySQL
打开安装好的Navicat客户端点击 连接--->mysql----填写账号密码,主机地址是你安装msyql的ubuntu ip地址,点击连接测试弹出连接成功,说明Navicat已经连接上了mysql,点击确定。
连接成功后可以看到所有数据库
创建数据库
在左侧栏空白处右击,点击“新建数据库”
在弹出框里填写数据库名,编码格式,选择utf-8
创建数据表
选择表然后点击新建表
创建一个班级表
对于id字段,需要设置为int类型,无符号,自动增长,主键,非空
创建好表后,还可以对表进行编辑
打开表,设计表,删除表
3.简单查询与数据操作
基本查询语句
select * from 表名;
select * from students; 查询students表中的所有内容
指定字段查询:select 字段1,字段2 from 表名;
比如只想看id,name这两列
select id,name from students;
SELECT id,NAME from student;
运行结果
插入数据
全列插入
insert into 表名 values (......)
mysql> desc students;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| gender | bit(1) | YES | | b'0' | |
| hometown | varchar(40) | YES | | | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)mysql> insert into students values(0,'刘德华',0,'中国香港');
Query OK, 1 row affected (0.00 sec)mysql> select * from student;
ERROR 1146 (42S02): Table 'studb.student' doesn't exist
mysql> select * from students;
+----+--------+--------+----------+
| id | name | gender | hometown |
+----+--------+--------+----------+
| 1 | 刘德华 | | 中国香港 |
+----+--------+--------+----------+
1 row in set (0.00 sec)
部分插入
insert into 表名 [字段1,字段2] values (值1,值2);
全列多行插入
多行插入每一行的内容写在一个小括号内,用逗号分隔多行。
insert into 表名 values (...),(....),(....);
部分列多行插入
insert into 表名 (字段1,字段2) values (..),(..);
修改数据
update 表名 set 字段=xxx where 字段=xxx;
update students set hometown='珠海' where id= 5;
删除数据
删除id为3的程咬金
delete from students where id =3;
4.备份和恢复数据库
备份数据库
备份数据库的所有表的数据
mysqldump –uroot –p 数据库名 > python.sql;
ysqldump -uroot -p python >python.sql
提示输入密码,mysql的密码
备份数据库的某个数据表的数据
mysqldump –uroot –p 数据库名 数据表名> class.sql;
msyqldump -uroot -p python class > class.sql
恢复数据库之前要先手动创建库
mysql -uroot –p 新数据库名 < python.sql
图形界面备份和恢复数据库
备份数据库,转储SQL文件即可以进行数据库备份
备份数据库,转储SQL文件即可以进行数据库备份
恢复数据库
新建数据库,运行备份好的SQL文件即可
知识总结
数据库基础
数据库基础概述
MySQL数据库介绍
MySQL数据库安装
数据库和数据表管理
数据库管理
数据表管理
图形化界面操作数据库
简单查询与数据操作
基本查询语句
插入数据
修改数据
删除数据
备份和恢复数据库
备份数据库
恢复数据库
图形界面备份和恢复数据库
课后作业
1、请写出全列插入与部分插入的语法格式。
Insert into student values(‘值1’,’……’) 值的数量必须和列的数量一致
Insert into student(’列1’,’…..’) values(‘值1’,’……’) 值的数量必须和列的
数量一致
课后实操题
1、使用navicat图形界面工具,创建一个名为test的数据库,编码格式为utf-8,在test库中创建一个表goods商品表。字段需要id,name,price,is_delete.在表中随便插入一些数据
2、利用navicat将第一题中的数据库备份。
3、命令行的方式将刚才建立的数据库删除。
4、命令行的方式重复第一题的操作,创建库,表,并插入一些数据。
5、在goods表中多插入一些数据,演练课上的修改删除,插入等sql语句。
6、用命令的方式备份备份test数据库。
mysql> create database test charset='utf8';
Query OK, 1 row affectedmysql> use test;
Database changed
mysql> create table goods(-> id int auto_increment primary key not null,-> name varchar(50) not null-> );
Query OK, 0 rows affectedmysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| goods |
+----------------+
1 row in setmysql> insert into goods values(0,'大豆'),(0,'玉米'),(0,'花生'),(0,'小麦');-> ;
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';' at line 1
mysql> insert into goods values(0,'大豆'),(0,'玉米'),(0,'花生'),(0,'小麦');
Query OK, 4 rows affected
Records: 4 Duplicates: 0 Warnings: 0mysql> select * from goods;
+----+------+
| id | name |
+----+------+
| 1 | 大豆 |
| 2 | 玉米 |
| 3 | 花生 |
| 4 | 小麦 |
+----+------+
4 rows in setmysql> update table goods set name='紫薯' where id=4;
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table goods set name='紫薯' where id=4' at line 1
mysql> update
goods set name='紫薯' where id=4;
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from goods;
+----+------+
| id | name |
+----+------+
| 1 | 大豆 |
| 2 | 玉米 |
| 3 | 花生 |
| 4 | 紫薯 |
+----+------+
4 rows in setmysql> delete from goods where id=4;
Query OK, 1 row affectedmysql> select * from goods;
+----+------+
| id | name |
+----+------+
| 1 | 大豆 |
| 2 | 玉米 |
| 3 | 花生 |
+----+------+
3 rows in set