如何在相关网站免费做宣传广告,wordpress 增加阅读量,衡水网站建设 燕丰收,买空间服务器做网站怎么弄目录 2. 数据库设计-DDL2.1 项目开发流程2.2 数据库操作2.2.1 查询数据库2.2.2 创建数据库2.2.3 使用数据库2.2.4 删除数据库 2.3 图形化工具2.3.1 介绍2.3.2 安装2.3.3 使用2.2.3.1 连接数据库2.2.3.2 操作数据库 2.3 表操作2.3.1 创建2.3.1.1 语法2.3.1.2 约束2.3.1.3 数据类… 目录 2. 数据库设计-DDL2.1 项目开发流程2.2 数据库操作2.2.1 查询数据库2.2.2 创建数据库2.2.3 使用数据库2.2.4 删除数据库 2.3 图形化工具2.3.1 介绍2.3.2 安装2.3.3 使用2.2.3.1 连接数据库2.2.3.2 操作数据库 2.3 表操作2.3.1 创建2.3.1.1 语法2.3.1.2 约束2.3.1.3 数据类型2.3.1.4 案例2.3.1.5 设计表流程 2.3.2 查询2.3.3 修改2.3.4 删除 2. 数据库设计-DDL
下面我们就正式的进入到SQL语句的学习在学习之前先给大家介绍一下我们要开发一个项目整个开发流程是什么样的以及在流程当中哪些环节会涉及到数据库。
2.1 项目开发流程 需求文档
在我们开发一个项目或者项目当中的某个模块之前会先会拿到产品经理给我们提供的页面原型及需求文档。 设计
拿到产品原型和需求文档之后我们首先要做的不是编码而是要先进行项目的设计其中就包括概要设计、详细设计、接口设计、数据库设计等等。数据库设计根据产品原型以及需求文档要分析各个模块涉及到的表结构以及表结构之间的关系以及表结构的详细信息。最终我们需要将数据库以及数据库当中的表结构设计创建出来。
开发/测试
参照页面原型和需求进行编码实现业务功能。在这个过程当中我们就需要来操作设计出来的数据库表结构来完成业务的增删改查操作等。
部署上线
在项目的功能开发测试完成之后项目就可以上线运行了后期如果项目遇到性能瓶颈还需要对项目进行优化。优化很重要的一个部分就是数据库的优化包括数据库当中索引的建立、SQL 的优化、分库分表等操作。
在上述的流程当中针对于数据库来说主要包括三个阶段
数据库设计阶段 参照页面原型以及需求文档设计数据库表结构 数据库操作阶段 根据业务功能的实现编写SQL语句对数据表中的数据进行增删改查操作 数据库优化阶段 通过数据库的优化来提高数据库的访问性能。优化手段索引、SQL优化、分库分表等
接下来我们就先来学习第一部分数据库的设计而数据库的设计就是来定义数据库定义表结构以及表中的字段。
2.2 数据库操作
我们在进行数据库设计需要使用到刚才所介绍SQL分类中的DDL语句。
DDL英文全称是Data Definition Language(数据定义语言)用来定义数据库对象(数据库、表)。
DDL中数据库的常见操作查询、创建、使用、删除。
2.2.1 查询数据库
查询所有数据库
show databases;命令行中执行效果如下 查询当前数据库
select database();命令行中执行效果如果 我们要操作某一个数据库必须要切换到对应的数据库中。 通过指令select database() 就可以查询到当前所处的数据库 2.2.2 创建数据库
语法
create database [ if not exists ] 数据库名;案例 创建一个itcast数据库。
create database itcast;命令行执行效果如下 注意在同一个数据库服务器中不能创建两个名称相同的数据库否则将会报错。 可以使用if not exists来避免这个问题
-- 数据库不存在,则创建该数据库如果存在则不创建
create database if not extists itcast; 命令行执行效果如下
2.2.3 使用数据库
语法
use 数据库名 ;我们要操作某一个数据库下的表时就需要通过该指令切换到对应的数据库下否则不能操作。 案例切换到itcast数据
use itcast;命令执行效果如下
2.2.4 删除数据库
语法
drop database [ if exists ] 数据库名 ;如果删除一个不存在的数据库将会报错。 可以加上参数 if exists 如果数据库存在再执行删除否则不执行删除。 案例删除itcast数据库
drop database if exists itcast; -- itcast数据库存在时删除命令执行效果如下 说明上述语法中的database也可以替换成 schema 如create schema db01;如show schemas; 2.3 图形化工具
2.3.1 介绍
前面我们讲解了DDL中关于数据库操作的SQL语句在我们编写这些SQL时都是在命令行当中完成的。大家在练习的时候应该也感受到了在命令行当中来敲这些SQL语句很不方便主要的原因有以下 3 点
没有任何代码提示。全靠记忆容易敲错字母造成执行报错操作繁琐影响开发效率。所有的功能操作都是通过SQL语句来完成的编写过的SQL代码无法保存。
在项目开发当中通常为了提高开发效率都会借助于现成的图形化管理工具来操作数据库。
目前MySQL主流的图形化界面工具有以下几种 DataGrip是JetBrains旗下的一款数据库管理工具是管理和开发MySQL、Oracle、PostgreSQL的理想解决方案。
官网 https://www.jetbrains.com/zh-cn/datagrip/
2.3.2 安装
安装 参考资料中提供的《DataGrip安装手册》 说明DataGrip这款工具可以不用安装因为Jetbrains公司已经将DataGrip这款工具的功能已经集成到了 IDEA当中所以我们就可以使用IDEA来作为一款图形化界面工具来操作Mysql数据库。 2.3.3 使用
2.2.3.1 连接数据库
1、打开IDEA自带的Database 2、配置MySQL
3、输入相关信息 4、下载MySQL连接驱动 5、测试数据库连接 6、保存配置 默认情况下连接上了MySQL数据库之后 数据库并没有全部展示出来。 需要选择要展示哪些数据库。具体操作如下 2.2.3.2 操作数据库
创建数据库 有了图形化界面工具后就可以方便的使用图形化工具创建数据库创建表、修改表等DDL操作。 其实工具底层也是通过DDL语句操作的数据库只不过这些SQL语句是图形化界面工具帮我们自动完成的。 查看所有数据库 2.3 表操作
学习完了DDL语句当中关于数据库的操作之后接下来我们继续学习DDL语句当中关于表结构的操作。
关于表结构的操作也是包含四个部分创建表、查询表、修改表、删除表。
2.3.1 创建
2.3.1.1 语法
create table 表名(字段1 字段1类型 [约束] [comment 字段1注释 ],字段2 字段2类型 [约束] [comment 字段2注释 ],......字段n 字段n类型 [约束] [comment 字段n注释 ]
) [ comment 表注释 ] ;注意 [ ] 中的内容为可选参数 最后一个字段后面没有逗号 案例创建tb_user表
对应的结构如下 建表语句
create table tb_user (id int comment ID,唯一标识, # id是一行数据的唯一标识不能重复username varchar(20) comment 用户名,name varchar(10) comment 姓名,age int comment 年龄,gender char(1) comment 性别
) comment 用户表;数据表创建完成接下来我们还需要测试一下是否可以往这张表结构当中来存储数据。 双击打开tb_user表结构大家会发现里面没有数据 添加数据 此时我们再插入一条数据 我们之前提到过id字段是一行数据的唯一标识不能有重复值。但是现在数据表中有两个相同的id值这是为什么呢
其实我们现在创建表结构的时候 id这个字段我们只加了一个备注信息说明它是一个唯一标识但是在数据库层面呢并没有去限制字段存储的数据。所以id这个字段没有起到唯一标识的作用。 想要限制字段所存储的数据就需要用到数据库中的约束。 2.3.1.2 约束
概念所谓约束就是作用在表中字段上的规则用于限制存储在表中的数据。
作用就是来保证数据库当中数据的正确性、有效性和完整性。后面的学习会验证这些
在MySQL数据库当中提供了以下5种约束
约束描述关键字非空约束限制该字段值不能为nullnot null唯一约束保证字段的所有数据都是唯一、不重复的unique主键约束主键是一行数据的唯一标识要求非空且唯一primary key默认约束保存数据时如果未指定该字段值则采用默认值default外键约束让两张表的数据建立连接保证数据的一致性和完整性foreign key 注意约束是作用于表中字段上的可以在创建表/修改表的时候添加约束。 案例创建tb_user表
对应的结构如下 在上述的表结构中: id 是一行数据的唯一标识 username 用户名字段是非空且唯一的 name 姓名字段是不允许存储空值的 gender 性别字段是有默认值默认为男 建表语句
create table tb_user (id int primary key comment ID,唯一标识, username varchar(20) not null unique comment 用户名,name varchar(10) not null comment 姓名,age int comment 年龄,gender char(1) default 男 comment 性别
) comment 用户表;数据表创建完成接下来测试一下表中字段上的约束是否生效 大家有没有发现一个问题id字段下存储的值如果由我们自己来维护会比较麻烦(必须保证值的唯一性)。MySQL数据库为了解决这个问题给我们提供了一个关键字auto_increment自动增长 主键自增auto_increment 每次插入新的行记录时数据库自动生成id字段(主键)下的值具有auto_increment的数据列是一个正数序列开始增长(从1开始自增) create table tb_user (id int primary key auto_increment comment ID,唯一标识, #主键自动增长username varchar(20) not null unique comment 用户名,name varchar(10) not null comment 姓名,age int comment 年龄,gender char(1) default 男 comment 性别
) comment 用户表;测试主键自增 2.3.1.3 数据类型
在上面建表语句中我们在指定字段的数据类型时用到了int 、varchar、char那么在MySQL中除了以上的数据类型还有哪些常见的数据类型呢 接下来,我们就来详细介绍一下MySQL的数据类型。
MySQL中的数据类型有很多主要分为三类数值类型、字符串类型、日期时间类型。
数值类型
类型大小有符号(SIGNED)范围无符号(UNSIGNED)范围描述TINYINT1byte(-128127)(0255)小整数值SMALLINT2bytes(-3276832767)(065535)大整数值MEDIUMINT3bytes(-83886088388607)(016777215)大整数值INT/INTEGER4bytes(-21474836482147483647)(04294967295)大整数值BIGINT8bytes(-263263-1)(02^64-1)极大整数值FLOAT4bytes(-3.402823466 E383.402823466351 E38)0 和 (1.175494351 E-383.402823466 E38)单精度浮点数值DOUBLE8bytes(-1.7976931348623157 E3081.7976931348623157 E308)0 和 (2.2250738585072014 E-3081.7976931348623157 E308)双精度浮点数值DECIMAL依赖于M(精度)和D(标度)的值依赖于M(精度)和D(标度)的值小数值(精确定点数)
示例: 年龄字段 ---不会出现负数, 而且人的年龄不会太大age tinyint unsigned分数 ---总分100分, 最多出现一位小数score double(4,1)字符串类型
类型大小描述CHAR0-255 bytes定长字符串(需要指定长度)VARCHAR0-65535 bytes变长字符串(需要指定长度)TINYBLOB0-255 bytes不超过255个字符的二进制数据TINYTEXT0-255 bytes短文本字符串BLOB0-65 535 bytes二进制形式的长文本数据TEXT0-65 535 bytes长文本数据MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据MEDIUMTEXT0-16 777 215 bytes中等长度文本数据LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据LONGTEXT0-4 294 967 295 bytes极大文本数据
char 与 varchar 都可以描述字符串char是定长字符串指定长度多长就占用多少个字符和字段值的长度无关 。而varchar是变长字符串指定的长度为最大占用长度 。相对来说char的性能会更高些。
示例 用户名 username ---长度不定, 最长不会超过50username varchar(50)手机号 phone ---固定长度为11phone char(11)日期时间类型
类型大小范围格式描述DATE31000-01-01 至 9999-12-31YYYY-MM-DD日期值TIME3-838:59:59 至 838:59:59HH:MM:SS时间值或持续时间YEAR11901 至 2155YYYY年份值DATETIME81000-01-01 00:00:00 至 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值TIMESTAMP41970-01-01 00:00:01 至 2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS混合日期和时间值时间戳
示例: 生日字段 birthday ---生日只需要年月日 birthday date创建时间 createtime --- 需要精确到时分秒createtime datetime2.3.1.4 案例
需求根据产品原型/需求创建表((设计合理的数据类型、长度、约束) 参考资料中提供的《黑马-tlias智能学习辅助系统》页面原型设计员工管理模块的表结构 暂不考虑所属部门字段 产品原型及需求如下 步骤 阅读产品原型及需求文档看看里面涉及到哪些字段。 查看需求文档说明确认各个字段的类型以及字段存储数据的长度限制。 在页面原型中描述的基础字段的基础上再增加额外的基础字段。
使用SQL创建表
create table emp (id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment 用户名,password varchar(32) default 123456 comment 密码,name varchar(10) not null comment 姓名,gender tinyint unsigned not null comment 性别, 说明: 1 男, 2 女,image varchar(300) comment 图像,job tinyint unsigned comment 职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管,entrydate date comment 入职时间,create_time datetime not null comment 创建时间,update_time datetime not null comment 修改时间
) comment 员工表;除了使用SQL语句创建表外我们还可以借助于图形化界面来创建表结构这种创建方式会更加直观、更加方便。
操作步骤如下
在指定操作的数据库上右键New Table 编辑表结构的相关信息 2.3.1.5 设计表流程
通过上面的案例我们明白了设计一张表基本的流程如下 阅读页面原型及需求文档 基于页面原则和需求文档确定原型字段(类型、长度限制、约束) 再增加表设计所需要的业务基础字段(id主键、插入时间、修改时间) 说明 create_time记录的是当前这条数据插入的时间。 update_time记录当前这条数据最后更新的时间。 2.3.2 查询 关于表结构的查询操作工作中一般都是直接基于图形化界面操作。 查询当前数据库所有表
show tables;查看指定表结构
desc 表名 ;#可以查看指定表的字段、字段的类型、是否可以为NULL、是否存在默认值等信息查询指定表的建表语句
show create table 表名 ;2.3.3 修改 关于表结构的修改操作工作中一般都是直接基于图形化界面操作。 添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];案例 为tb_emp表添加字段qq字段类型为 varchar(11)
alter table tb_emp add qq varchar(11) comment QQ号码;图形化操作添加字段 修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];案例修改qq字段的字段类型将其长度由11修改为13
alter table tb_emp modify qq varchar(13) comment QQ号码;案例修改qq字段名为 qq_num字段类型varchar(13)
alter table tb_emp change qq qq_num varchar(13) comment QQ号码;图形化操作修改数据类型和字段名 删除字段
alter table 表名 drop 字段名;案例删除tb_emp表中的qq_num字段
alter table tb_emp drop qq_num;图形化操作删除字段 修改表名
rename table 表名 to 新表名;案例将当前的tb_emp表的表名修改为emp
rename table tb_emp to emp;图形化操作修改表名 2.3.4 删除 关于表结构的删除操作工作中一般都是直接基于图形化界面操作。 删除表语法
drop table [ if exists ] 表名;if exists 只有表名存在时才会删除该表表名不存在则不执行删除操作(如果不加该参数项删除一张不存在的表执行将会报错)。 案例如果tb_emp表存在则删除tb_emp表
drop table if exists tb_emp; -- 在删除表时表中的全部数据也会被删除。图形化操作删除表