第一章 创建数据库及数据表 ① 笔记
1. 本章内容
数据库的概念
创建数据库
创建数据表
2. 本章重点
2.1. MySql简介
2.2. MySql的安装与连接
2.3. 设置访问数据库
3. 具体内容
3.1. 数据库简介
3.1.1 数据库概述
数据是关于自然、社会现象和科学试验的定量或定性的记录,是科学研究最重要的
基础。
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今
六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不
再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多
种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统
都在各个方面得到了广泛的应用。
在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管
理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信
息系统的核心部分,是进行科学研究和决策管理的重要技术手段。
发展历程:从数据管理角度分析
人工管理阶段 20世纪50年代中期之前
文件系统阶段 20世纪50年代中期到60年代中期
数据库系统阶段 20世纪60年代后期
3.1.2 数据库分类
按照早期的数据库理论,比较流行的数据库模型有三种,分别为层次式数据
库、网络式数据库、关系型数据库(前两者已经基本消失),非关系型数据库。
而当今的互联网中,最常用的数据库模型主要是两种即 关系型数据库 和
非关系型数据库
关系模型 1970年由E.F.Codd提出的,是用二维表的形式表示实体和实体间的联系
的模型。是现今数据库领域中应用最广泛的数据模型,简单、清晰。
类:由属性和方法。对应于一个具体的数据表
对象:根据类创建的一个实体。对应于数据表中的一条记录
3.1.3 数据库跟程序的联系
3.1.3.1 数据库基本概念
实体与属性(程序概念)
实体(Entity)是客观存在并可以相互区别的事物 。
属性(Attribute)是事物本身固有的性质 。
记录和字段(数据库中的概念)
数据表:二维表格的形式存储数据
行:记录,一条数据,对应实体对象
列:字段,属性
关系型数据库:关系型数据库以行和列的形式存储数据,以便于用户理解。这一系
列的行和列被称为表,一组表组成了数据库。关系:有关联的。
关系 一词源于数学。关系型数据库是 用表的形式进行存储数据,一张表分成 行与
列,列是固定的 行可以动态添加,这种形式称之为关系。
在关系型数据库中:对应的就是记录和字段——列
常见的关系型数据库 :MySQL、 Oracle、 SqlServer(服务器) sql语言
(structed query language 结构化查询语言)
非关系型数据库:非关系型数据库也被称为NoSQL数据库,大Map key:value 索
引。NoSQL的本意是“Not Only SQL”,指的是非关系型数据库,而不是“No SQL”的意思(没
有SQL语句?),因此,NoSQL的产生并不是要彻底否定关系型数据库,而是作为传统关系型
数据库的一个有效补充。NoSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性
能。常见非关系型数据库:Redis MongoDB hbase redis 缓存
3.1.3.2 数据库术语
数据库管理系统 :DBMS:DataBase Management System(数据库+管理数据库的软
件):MySQL,Oracle,SqlServer
数据库系统 :DBS;基于数据库进行读写的软件系统
数据库管理员:DBA : 要求:高;保证数据库系统的正常运行,安全,备份,恢复,日
常问题的解决。 数据库运维人员:要求低。测试,产品
3.2. MySql使用
3.2.1 MySql简介
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系
统使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。
由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可
下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受
关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
3.2.2 MySql优点
开源:MySQL源代码免费下载
简单:体积小,便于安装
性能优越:性能足够与商业数据库媲美
3.2.3 MySql的安装与访问
安装过程请参考发的文件资料
1.启动mysql服务器
win+r打开cmd命令框(以管理员身份打开,不然会报错误)
启动mysql:
输入:net start mysql服务名(例如:mysql57,mysql80)
停止mysql:
输入: net stop mysql服务名(例如:mysql57,mysql80)
2.在cmd命令行中连接mysql服务器
在cmd命令框中输入:
mysql -u用户名 -p密码
例如:
mysql -uroot -p123456
3.基于客户端工具连接MySql
Navicate连接mysq
Heidisql连接MySql
3.2.4 创建用户和授权
3.2.4.1 创建用户
create user '用户名'@'主机地址' identified by '密码'
create user 'myuser'@'localhost' identified by '123456'
新用户登录
mysql -u tiger -p
Enter password: ******
注意:如果新创建的用户没有被授权,则使用cmd登陆时会出错。
3.2.4.2 授权
权限种类:select, update, insert, delete ,alter(修改数据库的结构信息的) , drop
,all(所有权限)
#mysql5 授权
grant 权限种类 on 数据库名.表名 to '用户名'@'主机地址' identified by '密码'
#mysql8 授权
grant 权限种类 on 数据库名.表名 to '用户名'@'主机地址' with grant option;
实例:
#mysql5
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456' WIT
#mysql8
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
flush privileges; 修改后执行此句命令,刷新权限。
说明:
GRANT:赋权命令
ALL PRIVILEGES:当前用户的所有权限
ON:介词
.:当前用户对所有数据库和表的相应操作权限
TO:介词
‘root’@’%’:权限赋给root用户,所有ip都能连接
IDENTIFIED BY ‘123456’:连接时输入密码,密码为123456
WITH GRANT OPTION:允许级联赋权
连接:
#让别人使用指定账号能访问自己的数据库
cmd命令框登录进入mysql之后;
1.先执行
use mysql;
2.再执行
update user set host = '%' where user = '用户名' and host='主机地址';//执行此句
3.执行刷新语句 刷新权限
flush privileges;
#要查看数据库的账号信息可以执行如下sql
select host,user from user;
3.2.4.3 数据库的操作
数据库的常用操作
show databases; 显示当前连接下的所有数据库;
use 数据库名;使用数据库
show tables; 显示该数据库下的所有表
desc 表名; 显示表结构
#查看表结构
desc goods
#查询表信息
select * from book;
# 查看建表代码
show create TABLE goods
创建数据库
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校对规则名>];
实例:
CREATE DATABASE IF NOT EXISTS test_db_char
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
#简写
create database test_db;
[ ] 中的内容是可选的。语法说明如下:
<数据库名>:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据
库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际
意义。注意在 MySQL 中不区分大小写。
IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操
作。此选项可以用来避免数据库已经存在而重复创建的错误。
[DEFAULT] CHARACTER SET:指定数据库的字符集。指定字符集的目的是为了避免在数
据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的
默认字符集。
[DEFAULT] COLLATE:指定字符集的默认校对规则。
MySQL 的字符集(CHARACTER)和校对规则(COLLATION)是两个不同的概念。字符集是用来定义 MySQL 存储字符串的方式,校对规则定义了比较字符串的方式。
#创建数据库
#方式1
create database demo_db
default character set utf8mb4
collate utf8mb4_general_ci;
#方式2
create database demo_db2
default charset = utf8mb4
collate utf8mb4_general_ci;
#简写
create database demo_db3;
#删除数据库
drop database 数据库名;
#切换数据库(使用数据库)
use 数据库名;
建表语句
CREATE TABLE [IF NOT EXISTS] `表名`(
`列名1` 类型 [约束],
`列名2` 类型 [约束],
...
`列名n` 类型 [约束]
)[ENGINE=存储引擎 DEFAULT CHARSET=字符编码];
#创建表
create table testtab(id int,name varchar(10),sex char(1));
#查询表
select * from 表名;
3.3. MySQL存储引擎简介 面试必考
什么是存储引擎:
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。
InnoDB存储引擎
InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,InnoDB是默
1、InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。In
2、InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数
3、InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维
4、InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显
5、InnoDB被用在众多需要高性能的大型数据库站点上
InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大
MyISAM存储引擎
MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的
1、大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持
2、当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被
3、每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16
4、最大的键长度是1000字节,这也可以通过编译来改变,对于键长度超过250字节的情况,一个超
5、BLOB和TEXT列可以被索引
6、NULL被允许在索引的列中,这个值占每个键的0~1个字节
7、所有数字键值以高字节优先被存储以允许一个更高的索引压缩
8、每个MyISAM类型的表都有一个AUTO_INCREMENT的内部列,当INSERT和UPDATE操作的时候该列
9、可以把数据文件和索引文件放在不同目录
10、每个字符列可以有不同的字符集
11、有VARCHAR的表可以固定或动态记录长度
12、VARCHAR和CHAR列可以多达64KB
使用MyISAM引擎创建数据库,将产生3个文件。文件的名字以表名字开始,扩展名之处文件类型:f
MEMORY存储引擎
MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。MEMORY主要
1、MEMORY表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度
2、MEMORY存储引擎执行HASH和BTREE缩影
3、可以在一个MEMORY表中有非唯一键值
4、MEMORY表使用一个固定的记录长度格式
5、MEMORY不支持BLOB或TEXT列
6、MEMORY支持AUTO_INCREMENT列和对可包含NULL值的列的索引
7、MEMORY表在所由客户端之间共享(就像其他任何非TEMPORARY表)
8、MEMORY表内存被存储在内存中,内存是MEMORY表和服务器在查询处理时的空闲中,创建的内部
9、当不再需要MEMORY表的内容时,要释放被MEMORY表使用的内存,应该执行DELETE FROM或TRU
存储引擎的选择
不同的存储引擎都有各自的特点,以适应不同的需求,如下表所示:
如果要提供提交、回滚、崩溃恢复能力的事务安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择
如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率
如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果
如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能。
Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB
查看默认存储引擎
查看当前mysql默认引擎:
show variables like '%engine%';
查看mysql支持哪些引擎:
show engines;
修改默认存储引擎
如果修改本次会话的默认存储引擎(重启后失效),只对本会话有效,其他会话无效:
set default_storage_engine=innodb;
修改全局会话默认存储引擎(重启后失效),对所有会话有效
set global default_storage_engine=innodb;
3.4. 导入和导出(备份) 很重要、必会
1.第一种方式:
具体操作如下:
保存数据库:
顺着我们保存备份文件的路径,找到备份文件:
这是我们把我们备份文件(goodsdb数据库)中的表(student表和goods表)删掉,做还原的操作。
将数据从备份中还原的方式有两种:
第一种从备份还原数据:
第二种从备份还原数据:
用EditPlus打开备份文件(也可以用其他软件打开。注意:可能会乱码),然后Ctrl+A全选,Ctrl+C复制。
备份数据表:(原理同上:略)
2.第二种方式:
导出(备份):该命令是直接在cmd窗口命令行执行,不要进入到mysql。
mysqldump -uroot -p --databases 数据库命名 [表名,...]>路径
具体操作:
首先找到我们要备份的文件(数据库doodsdb)名称 ,以及要将文件备份保存的位置(这里我们将备份文件保存在桌面,路径: D:\Users\33154\Desktop 备份文件名:goodsdb2.sql 备份总路径: D:\Users\33154\Desktop\goodsdb2.sql)。
Microsoft Windows [版本 10.0.22000.795]
(c) Microsoft Corporation。保留所有权利。
#①-u[服务器/账号]root -p密码 --databases 需要备份的数据库名称 > 备份路径+备份文件名
#②-u[服务器/账号]root -p --databases 需要备份的数据库名称 > 备份路径+备份文件名
#密码******
C:\Users\33154>mysqldump -uroot -p --databases goodsdb > D:\Users\33154\Desktop\goodsdb2.sql
Enter password: ******
#-u[服务器/账号]root -p密码 需要备份的数据库名称 < 备份路径+备份文件名
C:\Users\33154>mysql -uroot -p123456 goodsdb < D:\Users\33154\Desktop\goodsdb2.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
C:\Users\33154>
示例:
mysqldump -uroot -p school > e:/school2.sql--备份文件中只有表,没有数据库名称
mysqldump -uroot -p --databases school > e:/school3.sql --备份文件中包含数据库
mysqldump -uroot -p --default-character-set=utf8 school > e:/school.sql--可以
导入(还原):
mysql -uroot -p [数据库名]<路径
示例:
mysql -uroot -p < e:/northwind.sql
mysql -uroot -p school<e:/school2.sql --如果备份文件中没有数据库名,可以先创建空数
具体操作:
3.第三种方式:
图形化操作:
转储数据库
备份数据库文件:(在数据库内部,只能数据库内部的文件,例如:表格。如果数据库被删除,备份也将被删除)
具体步骤:
文件路径:
3.5 数据类型
3.5.1 整型
原则:就小不就大
常用:int ,默认4 个字节的大小,无需指定大小
3.5.2 浮点型(float 和 double):
float(7,2) : 12345.45
3.5.3 定点数
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
decimal(m,d) 参数 m<65 是总个数,d<30 且 d<m 是小数位。
3.5.4 字符串(char,varchar,text)
用单引号括起来的内容
char 和 varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以
char 类型存储的字符串末尾不能有空格,varchar 不限于此。
2.char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节,varchar是存入的实际字符数 +1 个字节(n<=255)或2个字节(n>255),所以 varchar(4),存入 3 个字符将占用 4 个字节。
3.char 类型的字符串检索速度要比 varchar 类型的快。
varchar 和 text:
1.varchar 可指定 n,text 不能指定,内部存储 varchar 是存入的实际字符数 +1 个
字节(n<=255)或 2 个字节(n>255),text 是实际字符数 +2 个字节。
2.text 类型不能有默认值。
3.varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度
快于 text, 在都创建索引的情况下,text 的索引似乎不起作用。
3.5.5 日期时间类型
3.5.6 二进制类型:binary … (文件,图片)
文件上传,图片——转换成流——存到数据库中
一般:文件存到文件服务器。数据库中存储文件的地址路径
练习,创建数据表
4. 本章总结
数据库简介
MySql使用
创建用户
授权
操作数据库
导入导出
数据类型
5. 课后作业
1、创建学员系统的数据库 school_db
2、创建学员信息表 student
字段:编号、名字、性别、家庭住址、电话、入学日期、出生日期、班级
create table 表名(
列名(字段名) 数据类型 选项(主键、非空、递增),
列名(字段名) 数据类型 选项
);
```![在这里插入图片描述](https://img-blog.csdnimg.cn/de1dec07820a42229f6903a96505231e.jpeg)