mysql数据库

概述

##数据
数据用来描述事物的特征,行为,记录事物的状态,过程,结果等等
从计算机角度来看,数据体现在记录现实数据信息的组织方式。

比如:文本,图片,表格,视频,音频等等。
图片, 视频,音频不是直接存储在数据库中,一般在数据库中存对应的地址(URL)
以下我们所说的数据,都是将现实信息转换为计算机角度的表示形式。

数据库

数据库就是数据的仓库,数据库按照一定的数据格式,结构来存储数据。方便数据和操作和管理

数据库管理数据和其它方式管理数据区别

内存管理数据

优点:存取速度快 缺点:断电后数据不能保存

文件管理数据

优点:数据可以持久化保存 缺点:读取速度慢,数据组织格式不好控制

数据库管理数据

优点:统一的数据组织格式 读取速度快 容量大 缺点:需要专门的管理软件 需要一定的学习成本

数据库如何管理数据

实际数据库在管理数据时,也是管理文件的形式来进行管理,只是这些文件具有特定的文件格式
数据库管理软件

DBMS Database Management System 数据库管理系统,简称DBMS ,是用来管理数据的专用软件。

数据库在管理时,通过 DBMS 来操作数据库文件。

类似于 MS Office Excel 可以操作 .xls 的文件一样。

使用者

DBA Database Administrator 数据库管理员
Programmer 程序员

数据库如何运行?

数据库 真正用来存储数据的仓库。
数据库服务管理软件 用来操作数据库中文件的管理软件,也就是 DBMS, 但在使用过程中经常的提及的数据库常指 DBMS
数据库客户端软件 用户在需要使用数据时,需要向数据库服务管理软件按照一定的格式申请,提交申请的软件软件称为数据库客户端软件
这里写图片描述

常用数据库管理软件

MySQL 中小型数据库,跨平台,开源,免费,应用范围广
Oracle 大型数据库,跨平台,稳定,安全,收费
MS SQL Server MS 针对 NT系统开发的数据库,只能运行在 NT 系统上
Sqlite 微型数据库,一般用在移动端开发,几乎所有的手机上都与sqlite

关系型数据库 RDBMS

RDBMS Relational Database Management System 关系数据库管理系统

关系型数据库系统是指以行和列的形式存储数据,将数据组织为相关的行和列的系统

这种方式便于用户理解,类似于一张表格。

一组行列关系组成的表构成一个数据文件。

一组表组成了数据库。

用户通过查询(Query)来检索数据库中的数据。

  • 关系表中元素的构成
    这里写图片描述
  • 名词解释
    这里写图片描述

数据库操作语言

数据库在操作时,需要使用专门的数据库操作规则和语法,这个语法称为 SQL。

SQL Structured Query Language 结构化查询语言

SQL 的主要功能是和数据库建立连接,提供增删改查的操作。

按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。

SQL语言共分为四大类:

  • 数据定义语言DDL Data Definition Language

用于定义数据库中要存储的现实世界实体的语言。

主要提供数据库,数据表的创建操作。

  • 数据操作语言DML Data Manipulation Language

用于数据表的操作语言

主要提供数据表中数据的插入,更新,删除操作

  • 数据查询语言DQL Data Query Language

主要提供对数据表中数据的查询操作。

  • 数据控制语言DCL Data Control Language

主要用来设置或更改数据库用户或角色权限的语句。

数据库客户端与服务端

客户端请求服务端

客户端发生请求
服务器接收请求
服务器将请求发给DBMS查询数据
DBMS 将查询结果返回给服务器
服务器将结果返回给客户端
客户端接收使用数据
这里写图片描述

安装

安装的时候最好在root用户下,安装,不然在普通用户下操作会出现权限不足的情况
安装和卸载

sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
一般只需安装第一个

ubuntu数据库的配置文件的位置:
vim /etc/mysql/mysql.conf.d/mysqld.cnf
端口号,监听地址等都可以在里面修改
##MySQL 服务管理

查看服务是否开启

ps aux | grep mysql	# 查看全部进程| grep过滤

这里写图片描述

服务器管理命令

启动服务
sudo service mysql start
或者sudo /etc/init.d/mysql start
停止服务
sudo service mysql stop
重新启动服务
sudo service mysql restart
查看服务状态
sudo service mysql status
###数据库客户端安装
MySQL 可以使用的客户端很多,使用系统命令行做为客户端,使用我们开发的程序做为客户端等等,以及Navicat , workbench等图形化客户端,感觉使用终端(terminal)就够了.
简单介绍一下navicat安装:
official websit: https://www.navicat.com/en/download/navicat-for-mysql
tar -zxvf navicat.tar.gz
cd navicat_mysql_cs_64/
./start_navicat # 执行shell脚本,或者sh start_navicat
cd ~
rm -rf .navicat64/ # navicat64验证文件,删除可以重复免费试用
connect mysql for navicat :
这里写图片描述

连接数据库

使用命令行客户端连接

mysql -hlocalhost -P3306 -uroot -p*** # 如果登不上,请切换到root用户
-h 主机地址 -P默认端口号 -u 用户名 -p 密码
如果本机登录,端口号没改,可以使用 mysql -u root -p 登录
登录成功:mysql>
退出数据库exit

默认数据库介绍

show databases;
  • Information_schema
    保存着关于mysql服务器所维护的所有其他数据库的信息(元数据)
    如数据库名,数据库表,表栏的数据类型与访问权限等
  • performance_schema
    保存数据库的性能优化信息
  • sys
    因为上面两个数据库的信息经常被使用,sys整合了两个数据库中的信息,方便操作。
  • mysql
    保存用户信息

数据库操作

CRUD

  • C Create 创建
  • R Read/Retrieve 查询
  • U Update 修改
  • D Delete 删除

数据库操作

在数操作数据库时,所有的数据库语句都要以分号结束
** 中断命令ctrl + c**
数据库操作不区分大小写

  • 创建数据库
    creat database databasename;
    默认字符集为latin1
	 create database student;

-创建时指定默认字符集
create database databasename character set utf8;

	create database t_student character set utf8;
  • 显示数据库创建信息
    show create database databasename ;
	show create database t_student;
  • 修改数据库编码
    alter database student charset=utf8;
    等号可以使用空格代替
	alter database student charset utf8;
  • 显示所有数据库
	show databases;
  • 切换,使用数据库 use databasename;
	use student;
  • 删除数据库 drop database student;
drop database student;

不要删系统数据库

数据表操作

表操作

  • 查看表
show tables;

-创建表create table tablename(
字段1 字段类型,
字段2 字段类型,
字段3 字段类型,…
);

 create table stu(sid int, sname char(20), sage int);
  • 显示创建表信息
    show create table tablename;
show create table stu;
# 格式化输出
show create table stu \G;
# 简单的查看表结构
desc stu; 
  • 增加字段 alter table tablename add fieldname type;
alter table stu add gender char(4);
  • 删除字段 alter table tablename drop fieldname
alter table stu drop gender;
  • 修改表中的字段类型alter table tablename modify fieldname type;
alter table stu modify sname varchar(20);
    • 修改列的数据类型并且改名 alter table 表名 change 原字段名 新字段名 数据类型
alter table stu change sid snumber smallint;

MySql常用数据类型

数据表是由若干个字段组成的,每个字段表示不同类型的数据。
处理金融方面(钱的时候)不使用float数,float一般都在浮点协处理器中操作,会发生数据精准度丢失,一般存储钱使用整数1000来处理,可以保证数据的完整*
所以在创建表的时候,需要为每个字段指定相应的数据类型。

  • 整数类型
  • 这里写图片描述
    这里写图片描述
  • 小数类型
    这里写图片描述
  • 字符串类型
    这里写图片描述
  • 枚举类型 enum(枚举值1,枚举值2,…)
    枚举类型使用int实现的,可以使用1和2,能找到枚举值1,枚举值2
 enum('男','女')
  • 时间类型
    这里写图片描述
    ### 查询数据
    select * from stu;

插入数据

语法: insert into 表名 [(字段名列表, …)] values(值列表, …)

  • 插入所有字段数据
insert into stu values(1, 'tom', 20);
  • 插入指定字段
insert into stu(sname, sage) values ('yang', 18);
  • 插入多条数据
insert into stu values (1, 'xin', 19), (2, 'yue', 20);

修改数据

语法: update 表名 set 字段=值 [条件]

  • 更新所有的数据
update stu set sage=25;
  • 更新满足条件的数据
update stu set sname="xizi" where sname="tom";

删除数据

语法1:truncate 表名

语法2:delete from 表名 [条件]

  • 删除全部数据 truncate
truncate stu;
  • 不需要加条件,也不能加条件,删除全部数据,重置自动编号到默认值,没有事务,速度快。
delete from stu;

相当于 truncate stu,但是delete操作有事务操作,所以速度慢,而且不会重置自动编号。 delete 删除事务操作,可以恢复

  • 删除满足条件的数据
delete from stu where snumber=1;

##约束

添加约束

约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的准确性,完整性、唯一性,可靠性、联动性。

  • 数据冗余
  • 这里写图片描述
  • 失去数据完整性
    这里写图片描述
  • 数据缺少唯一标识
    这里写图片描述
  • 失去实体完整性
    这里写图片描述
  • 失去域完整性
    这里写图片描述
  • 失去引用完整性
    这里写图片描述

数据库常用约束

总的来说有五种:唯一性和主键约束、外键约束、检查约束、空值约束、默认值约束,
有五大关键词,UNIQUE和Primary Key, Foreign Key, CHECK, NOT NULL, DEFAULT

主键约束 作用:让数据具有唯一标识 语法:primary key
create table tpk(id int primary key, name char(10));
自动增长 作用:让数字值自动累加 语法:auto_increment 自动增长设置在数值型字段上,需要配合主键约束一起使用。 如果字段没有设置主键约束,是不允许设置自动增长的。
create table yang(id int auto_increment primary key, name varchar(10));

自动增长后,如果删除数据,再次插入,从原先最高的自增

唯一性约束 作用:保证数据的准确性,不会出现重复数据 语法:unique
 create table yue(id int primary key, name char(10) unique);
非空约束 作用:不允许字段为空,添加数据时必须给值 语法:not null
 create table xin(id int, name char(10) not null);
默认约束 作用:在添加数据时,如果没有给定有默认约束字段的数据,该字段使用默认值填充 语法:default
create table xizi(id int, name char(20) default 'NoName');
外键约束 作用:让两表之间产生联动关系 语法:foreign key(字段名) references 表名(字段名)
 create table f_class(id int primary key, name char(10));
create table f_student(id int primary key, name char(10), cid int, foreign key(cid) references f_class(id));

设置外键约束字段所关联的字段,必须是主键约束字段。

想要删除有设置外键的表,必须先删除外键所关联的表。

drop table f_student;
drop table f_class;
检查约束(在MySQL中无效,不起作用) 作用:设置字段的域范围,也就是有效值范围 语法:check(值范围条件)
在mysql中不起作用
create table yang(id int, age int check(age > 0 and age < 150), gender char(10) check('boy' or 'girl'));

增加删除约束

添加约束前应该保证该字段上没有新添加的约束 删除约事前应该保证该字段上有这个约束

  • 添加主键约束 语法:alter table 表名 add constraint 约束名 primary key(字段名)
alter table yang add constraint PK_id primary key(id);
  • 删除主键约束 因为一个表中最多只能有一个主键约束,所以可以直接删除 语法:alter table 表名 drop primary key
alter table yang drop primary key;
  • 添加外键约束 语法:alter table 表名 add constraint 外键约束名 foreign key(外键字段名) references 关联表(关联字段名)
create table tpk(id int primary key, name varchar(20));
create table tfk(id int primary key, name char(20), fid int);
alter table tfk add constraint FK_id foreign key(fid) references tpk(id);

这里写图片描述

  • 删除外键约束 语法:alter table 表名 drop foreign key 外键名
    要用show create table tablename;查一下外键的名字,通过名字删除。
alter table tfk drop foreign key FK_id;

数据库导入导出

作用:使用数据库和导入导出功能,可以对数据库进行备份,迁移等操作

语法:mysqldump –uroot –p(注意不要输入密码) 要导出的数据库名 要导出的数据表 … > 目标文件.sql
导出的.sql文件记录的就是你在使用这个数据库所用到的命令,导入就是把.sql中的文件执行一遍,可以使用vim查看
导入导出数据库要exit mysql ,直接在teminal执行
mysql是用户的命令,可以在/usr/bin/下面查看,系统命令在/bin

  • 导出整个数据库
 mysqldump -uroot -p t_student > t_student_bak.sql
  • 导出库当中的指定表(可以导出多张表)
 mysqldump -uroot -p t_student tpk tfk > tpktfk.sql
  • 导入数据库
    导入数据库前需要先创建一个空数据库 # create database t_student_two;
    语法:mysql -uroot -p 数据库名 < 要导入的文件.sql
mysql -uroot -p t_student_two < t_student_bak.sql

数据库表的设计思想

  • 需求分析:根据用户的需求,分析出需要记录的数据
  • 需求设计:根据分析出的数据,设计E-R模型图
  • 详细设计:将E-R模型图转换成数据表
  • 三大范式:使用数据库三大范式的设计思想对数据表进行审核

E-R模型图

  • 概念:Entity-Relationship,实体关系图 组成元素:
    这里写图片描述
  • ER图应用案例: 将下面的项目需求 以ER图形式表示出来
    这里写图片描述
  • 表示关系:
    这里写图片描述

三大范式

  • 第一范式 : 每一列都具有原子性,也就是不能再分割
    这里写图片描述
  • 第二范式 : 每个表只描述一件事情
    这里写图片描述
  • 第三范式 : 表中不能存在冗余字段
    这里写图片描述

数据表练习

  • 创建数据库 School

  • 创建学生表 tStudent

  • tStudent学生表结构:

  • – sId – 学生编号 – sName – 姓名 – sAge – 年龄 – sGender – 性别 – sAddress – 地址 – sPhone – 电话 – sBirthday – 生日 – sCardId – 身份证号 – sClassId – 班级Id

create table tStudent(sId int, sName char(20), sAge tinyint, sGender enum('boy', 'girl'), sAddress varchar(50), sPhone char(11), sBirthday year, sCardId char(18), sClassid int);
  • 创建成绩表 tScore TblScore成绩表结构:
  • – sId(成绩id,主键,自动编号) – sStuId(学生编号) – sEnglish(英语成绩) – sMath(数学成绩)
create table tScore(sid int unsigned auto_increment Primary key, sStuId int, sEnglish float(5,2), smath float(5, 2));
  • 创建班级表 tClass tClass班级表结构:
  • – cId –班级ID – cName –班级名称 – cDescription –班级描述 答案:
create table tClass(cId int, cName char(10), cDescription varchar(100));
  • 创建老师表 tClass tTeacher老师表:

  • – tTId – tTName – tTGender – tTAge – tTSalary – tTBirthday 答案:

create table tTeacher(tId int, tName char(20), tAge tinyint, tGender enum('boy', 'girl'), tSalary float(10, 2), tBirthday year);

协处理器扩展:可以不看
早期的ARM没有协处理器,所以浮点运算是由CPU来模拟的,即所需浮点运算均在浮点运算模拟器(float math emulation)上进行,需要的浮点运算,常要耗费数千个循环才能执行完毕,因此特别缓慢。
直到今天,在ARM Kernel配置时,都有如下选项:
Floating point emulation —>
[ ] NWFPE math emulation
[ ] FastFPE math emulation (EXPERIMENTAL)
在这里,可以配置ARM 浮点模拟器。
浮点模拟器 模拟浮点是利用了undefined instrction handler,在运算过程中遇到浮点计算是产生异常中断,这么做带来的后果是带来极频繁的exception,大大增加中断延迟,降低系统实时性。
协处理器(coprocessor),一种芯片,用于减轻系统微处理器的特定处理任务。
协处理器,这是一种协助中央处理器完成其无法执行或执行效率、效果低下的处理工作而开发和应用的处理器。这种中央处理器无法执行的工作有很多,比如设备间的信号传输、接入设备的管理等;而执行效率、效果低下的有图形处理、声频处理等。为了进行这些处理,各种辅助处理器就诞生了。需要说明的是,由于现在的计算机中,整数运算器与浮点运算器已经集成在一起,因此浮点处理器已经不算是辅助处理器。而内建于CPU中的协处理器,同样不算是辅助处理器,除非它是独立存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值