数据库和SQL的学习对于我们开发来说是非常重要的,本篇将带你快速上手MySQL并了解什么是DDL和DML!
一、数据库
1、概述
1.1 数据库
DataBase (DB),是存储和管理数据的仓库。如下是一些市面上常见的数据库产品
1.2 数据库管理系统
DataBase Management System (DBMS),操纵和管理数据库的大型软件。
1.3 SQL
Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
二、MySQL
1、安装配置
官网:https://www.mysql.com/
关于MySQL的下载安装以及环境变量的配置,网上有很多教程,这里不再赘述。
1.1 初始化MySQL
mysqld --initialize-insecure
1.2 注册MySQL服务
mysqld -install
1.3 启动MySQL服务
net start mysql
1.4 修改默认账户密码
mysqladmin -u root password 1234
这里的1234是指默认管理员(即root账户)的密码,可以自行修改。
1.5 登录MySQL
mysql -uroot -p1234
同样1234是你自己的密码。
或者直接输入
mysql -uroot -p
再输入对应密码,这样可以保证密码的安全性。
2、MySQL数据模型 & SQL简介
2.1 概述
关系型数据库(RDBMS): 建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
2.2 特点
1)使用表存储数据,格式统一,便于维护
2)使用SQL语言操作,标准统一,使用方便,可用于复杂查询
2.3 MySQL数据模型
2.4 SQL简介
SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
1)通用语法
1.1)书写规范
SQL语句可以单行或多行书写,以分号结尾。
SQL语句可以使用空格/缩进来增强语句的可读性。
show databases;
MySQL数据库的SQL语句不区分大小写。
SHOW DATABASES;
1.2)注释
单行注释
-- 注释内容 或 #注释内容(MySQL特有)
-- show databases;
多行注释
/*注释内容*/
/*show databases;*/
2.4 SQL分类
SQL通常被分为4大类,如下,我们需要重点掌握前三类即 DDL,DML和DQL
3、DDL-数据库操作
整体学习框架
3.1 查询
查询所有数据库
show databases;
查询当前数据库
select database();
3.2 使用
使用数据库
use 数据库名;
3.3 创建
创建数据库
create database [ if not exists ] 数据库名;
3.4 删除
删除数据库
drop database [ if exists ] 数据库名;
4、MySQL图形化工具
我使用的是Navicat Premium 15,关于下载安装,网上也有很多教程,但好像它是收费的,这也简单,网上一搜破解版一大堆,这里就不再赘述了。Navicat官网:https://www.navicat.com/en/download/navicat-for-mysql
当然,如果实在不想安装,可以直接使用我们强大的IDEA,因为IDEA里面已经集成了DataGrip,如下,我们只要在IDEA中连接好我们的MySQL数据库,就可以快乐地写SQL了。
DataGrip是JetBrains旗下的一款数据库管理工具,是管理和开发MySQL、Oracle、PostgresQL的理想解决方案。
5、DDL-表结构操作
5.1 创建表
1)基本语法
create table 表名(
字段1 字段类型 [约束] [ comment 字段1注释]
......
字段n 字段类型 [约束] [ comment 字段n注释]
) [comment 表注释];
2)约束
约束是作用于表中字段上的规则,用于限制存储在表中的数据
目的:保证数据库中数据的正确性、有效性和完整性。
3)案例
在已有的数据库 db1下创建一个uer表,字段有 id,username(用户名),name(姓名),age,gender。类型及长度自行设定,合理即可。
要求添加的约束为:id(主键约束,且设置自增),username(非空且唯一),name(非空),gender(默认值为男)
对应的SQL语句如下:
-- DDL:表结构
-- 创建表:基本语法
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 '用户表';
设置主键自增:auto_increment
创建完成后,可以右键 tb_user表 ->设计表,通过图形化界面方式来进行相关的校验和修改
运行SQL后,右键刷新数据库 db1,就会显示新创建的表,双击表,就能添加数据了。可以不用编辑 id,因为设置了自增。同理不编辑 gender的话默认都为男
注1:按 tab键自动切换到下一个字段进行编辑,按方向键 上下左右 也能实现切换。
注2:添加完数据后需要 ctrl+s保存,否则可能不会添加成功。也可以通过新建查询的方式,查询一下该表,看其中的数据来验证是否添加成功。
5.2 数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
1)数值类型
了解一些常用的,并对范围能有一个大概的了解
2)字符串类型
主要熟悉 char 和 varchar即可
1、定长字符串:如 char(10),最多只能存10个字符,不足10个字符,占用10个字符空间。性能高但浪费空间(以空间换时间)
2、变长字符串:如 varchar(10),最多只能存10个字符,不足10个字符,按照实际长度存储。性能低但节省空间(以时间换空间)
3)日期时间类型
主要熟悉 date 和 datetime即可
例如:birthday ->date,update_time ->datetime
4)设计流程
根据页面原型/需求创建表(设计合理的数据类型、长度、约束)
注:通常需要加上这两个时间,create _time,记录的是当前这条数据插入的时间。update_time,记录当前这条数据最后更新的时间。
5.3 查询 & 修改 & 删除
很多情况下,该部分的操作可以直接通过图形化工具界面来实现。
查询
1)查询当前数据库所有表
show tables;
2)查询表结构
desc 表名;
3)查询建表语句
show create table 表名;
修改
1)添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
2)修改字段类型
alter table 表名 modify 字段名 新数据类型(长度);
3)修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
4)删除字段
alter table 表名 drop column 字段名;
5)修改表名
rename table 表名 to 新表名;
删除
1)删除表
drop table [if exists] 表名;
注:在删除表时,表中的全部数据也会被删除。
6、DML-添加 & 修改 & 删除数据
回顾:DML,即Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。
6.1 添加数据(insert)
1)指定字段添加数据
insert into 表名(字段名1,字段名2) values (值1,值2);
2)全部字段添加数据
insert into 表名 values (值1,值2,...);
3)批量添加数据(指定字段)
insert into 表名(字段名1,字段名2) values (值1,值2),(值1,值2);
4)批量添加数据(全部字段)
insert into 表名 values(值1,值2,...),(值1,值2,...);
5)几点注意
- 插入数据时,指定的字段顺序需要与值的顺序一一对应。
- 字符串和日期型数据应该包含在引号中。
- 插入的数据大小应在字段的规定范围内。
6.2 修改数据(update)
1)修改数据
update 表名 set 字段名1=值1,字段名2=值2,....[where 条件];
eg:将 tb_user表中 id为1的用户,姓名改为 lishi
update tb_user set name = 'lishi' where id = 1;
注:修改语句的条件可有可无,如果没有,则会修改整张表的所有数据。
6.3 删除数据(delete)
1)删除数据
delete from 表名 [where 条件];
eg1:将 tb_user表中 id为1的用户删除
delete from tb_user where id = 1;
eg2:将 tb_user表中的所有数据(需谨慎操作)
delete from tb_user;
注1:DELETE语句的条件可有可无,如果没有条件,则会删除整张表的所有数据。
注2:DELETE语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)。