开发中存在着各种数据,比如用户的个人信息、商品详情、购买记录,这些数据都要以一定的方式储存,如果以文本的形式储存,每一次获取都要读取文件,如果信息有修改则需要直接修改文本,大量的数据会需要保存大量的文件,这样不仅不便于操作、维护,还给服务器带来巨大的负担,什么样的方式能够储存大量的数据并且便于修改?答案就是数据库。
 
关系型数据库以二维数组组成的表结构来储存数据,各表之间可以设置一对一,一对多,多对多的关系,比如用户个人信息的表中id为1的用户,她在xx商品购买记录的表中存在着一条购买商品的数据,通过各种对应关系,能够从不同的维度保存数据,当需要使用的时候,直接根据某些条件下操作数据。
 
而非关系型数据库,它的存储更为自由,使用 key-value 这样的形式去保存数据,比如在登陆状态后,保存某个用户的姓名、手机号、身份等信息,获取和写入都比较的简单。
 
关系型数据库包括mysql、oracle、sql server 等,非关系型数据库包括 MongoDB、Redis等,这里来聊聊mysql。
 
mysql的语句大致可以分为四类,分别是
DDL(Data Definition Language):数据定义语言,用来对数据库或者表进行:创建、删除、修改等操作,
DML(Data Manipulation Language):数据操作语言,用来对表进行:添加、删除、修改等操作,
DQL(Data Query Language):数据查询语言,用来从数据库中查询记录,
DCL(Data Control Language):数据控制语言 对数据库、表格的权限进行相关访问控制操作。
 
首先来看对数据库操作,这里有一个编写习惯,通常把sql语句部分大写,数据库名、表名、字段名小写
// 1、展示所有的数据库,即使没有创建任何一个数据库,系统默认也会有四个数据库
SHOW DATABASES;
// 2、选择数据库 mysql
USE mysql;
// 3、显示当前所选择的数据库
SELECT DATABASE();
// 4、如果不存在数据库 studySql 则创建
CREATE DATABASE IF NOT EXISTS `studySql`;
// 5、如果存在数据库 studySql 则删除
DROP DATABASE IF EXISTS `studySql`;
再来看看对表的操作,比如在项目里,我们需要保存用户的个人资料,那么此时要创建一个用户表,表里面存储着用户的姓名、手机号码、出生年月,以上的这三种字段对应的是不同的类型,姓名需要字符串类型,手机号码需要数字类型,而出生年月需要使用日期类型,通过数据类型来对保存的数据进行限制,那么常见的数据类型有以下几种。
1、字符串类型
char定义固定长度的字符串,长度在0-255之间,varchar定义可变长的字符串,长度在0到65535之间的值,text可存储更大的字符串 2、数字类型
数字分为整数、浮点数、精确到小数点的数
整数类型:INT,
浮点类型:FLOAT,DOUBLE,
精确数字:DECIMAL,NUMERIC 3、日期类型
(1) YEAR,格式如YYYY,只有年份,范围从 1901到2155,和 0000
(2) DATE,格式如YYYY-MM-DD,有年月日,范围从 '1000-01-01' 到 '9999-12-31'
(3) DATATIME,格式如 YYYY-MM-DD hh:mm:ss,有年月日时分秒,范围从 '1970-01-01 00:00:01' 到'2038-01-19 03:14:07'
(4) DATASTAMP / TIMESTAMP,比DATATIME还要精确6位,格式如 YYYY-MM-DD hh:mm:ss.xxxxxx,
范围从'1000-01-01 00:00:00.000000'到'9999-12-31 23:59:59.999999'

以上的数据类型用于创建表时对字段进行补充,除了补充之外,还应该对字段有限制,比如用户的手机号码不可重复,用户要添加一个唯一的id值来表示其“身份”,这些限制就是表约束,我们通常有以下几种方式来对表进行约束

1、主键
主键代表唯一的值,如id,主键不可重复,也不可以为空,用字段 PRIMARY KEY 来表示
2、唯一键
不可重复,但允许为空,比如手机号码,用字段UNIQUE来表示
3、AUTO_INCREMENT
当我们没有给某一字段设置值的时候,希望它自动增长,需要数据类型为数字类型
4、NOT NULL
不允许为空
5、DEFAULT
设置默认值
6、外键在下一篇关于DQL的总结中具体说明~

有了以上的概念,我们就可以在数据库中创建一张“用户表”了

CREATE TABLE IF NOT EXISTS `person` (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) ,
telephone VARCHAR(20) UNIQUE NOT NULL,
birth TIMESTAMP
)

在这张表里插入、删除、修改一些数据

// 给每一个字段一一对应设置值
INSERT INTO `person` VALUES (9, 'judy', '18877776666', '1998-08-08');
INSERT INTO `person` VALUES (10, 'kiki', '18012345678', '2000-08-10');
// id 可自增、birth设置默认参数
INSERT INTO `person` (name, telephone) VALUES ('alice', '15600000000');
// 修改数据
UPDATE `person` SET NAME = 'xiaoming' WHERE id = 10;
// 删除元素
DELETE FROM `person` WHERE id = 9;
// 清空表所有内容
DELETE FROM `person`
// 查询表里所有数据
SELECT * FROM `person`
// 删除表
DROP TABLE IF EXISTS `person`

部分sql语句执行的结果如下图所示

 以上sql语句操作的是表中的数据,如果对于表字段要进行操作,那么可以使用以下方式
// 修改表名(将表名person改为users)
ALTER TABLE `person` RENAME TO `users`;
// 修改表字段(将telephone修改为phone,数据类型为varchar)
ALTER TABLE `users` CHANGE telephone phone VARCHAR(20);
// 修改表数据类型(将birth的类型修改为Data,默认值为当前时间)
ALTER TABLE `users` MODIFY DATATIME DEFAULT CURRENT_TIMESTAMP;
// 增加列 gender
ALTER TABLE `users` ADD gender varchar(10);
ALTER TABLE `user` ADD updateTime TIMESTAMP;
// 删除列
ALTER TABLE `user` DELETE updateTime;
// 查看表结构
DESC `users`
还有一些sql有可能也会被用到
//  根据表结构创建另外一个表(复制)
CREATE TABLE `user1` LIKE `users`
// 根据另外一个表中的所有内容(不包括表结构), 创建新的表
CREATE TABLE `user3` AS (SELECT * FROM `user`)
// 查看创建表的sql语句
SHOW CREATE TABLE `users`

以上就是mysql的基本概念以及基本操作,关于 DQL( Data Query Language),数据查询的部分总结在下一篇文章中~

超详细的mysql总结(基本概念、DDL、DML)的更多相关文章

  1. 超详细讲解mysql存储过程中的in/out/inout

    存储过程 大概定义:用一个别名来描述多个sql语句的执行过程. 最简单 delimiter // create PROCEDURE p1() begin select * from userinfo; ...

  2. MySql用statement实现DDL,DML,DQL的操作Demo

    Demo1 Connection connection=null; Statement stmt=null; int result=-1; try { Class.forName("com. ...

  3. 超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数

    超详细,多图文使用galera cluster搭建mysql集群并介绍wsrep相关参数 介绍galera cluster原理的文章已经有一大堆了,百度几篇看一看就能有相关了解,这里就不赘述了.本文主 ...

  4. Linux系统部署JavaWeb项目(超详细tomcat,nginx,mysql)

    转载自:Linux系统部署JavaWeb项目(超详细tomcat,nginx,mysql) 我的系统是阿里云的,香港的系统,本人选择的是系统镜像:CentOS 7.3 64位. 具体步骤: 配置Jav ...

  5. 详细分析MySQL事务日志(redo log和undo log)

    innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...

  6. 详细分析MySQL事务日志(redo log和undo log) 表明了为何mysql不会丢数据

    innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...

  7. MyCat安装与测试教程 超详细!

    MyCat安装与测试教程 超详细! MyCat基础知识 一.什么是MYCAT? 1. 一个彻底开源的,面向企业应用开发的大数据库集群 2. 支持事务.ACID.可以替代MySQL的加强版数据库 3. ...

  8. RabbitMQ安装说明文档(超详细版本)

    RabbitMQ安装说明文档(超详细版本) 1. 安装依赖环境 在线安装依赖环境: yum install build-essential openssl openssl-devel unixODBC ...

  9. 超强、超详细Redis数据库入门教程

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...

  10. 理解MySQL——架构与概念

    写在前面:最早接触的MySQL是在三年前,那时候MySQL还是4.x版本,很多功能都不支持,比如,存储过程,视图,触发器,更别说分布式事务等复杂特性了.但从5.0(2005年10月)开始,MySQL渐 ...

随机推荐

  1. 5分钟实现调用ChatGPT接口API实现多轮问答

    5分钟实现调用ChatGPT接口API完成多轮问答 最近ChatGPT也是火爆异常啊,在亲自使用了几个月之后,我发现这东西是真的好用,实实在在地提高了生产力.那么对于开发人员来说,有时候可能需要在自己 ...

  2. Hibernate 基本操作、懒加载以及缓存

    前言 上一篇咱们介绍了 Hibernate 以及写了一个 Hibernate 的工具类,快速入门体验了一波 Hibernate 的使用,我们只需通过 Session 对象就能实现数据库的操作了. 现在 ...

  3. wmi搜集一台计算机的硬件信息

    作用: Python搜集一台计算机的硬件信息,借助模块:wmi,这个模块只支持window操作系统. 安装: pip install wmi 导入: import wmi 实例 c = wmi.WMI ...

  4. idea 查看scala源代码

    使用idea编写spark程序,想要查看源代码,点进去是compiled code private[sql] def this(sc : org.apache.spark.SparkContext) ...

  5. 【GiraKoo】夜神模拟器提示“当前设备未开启VT”

    [解决]夜神模拟器提示"当前设备未开启VT" 环境 Windows 11 夜神模拟器64位 现象 启动夜神模拟器时,提示"检测到当前设备未开启VT,请先开启VT后再运行6 ...

  6. 7-2 Broken Pad (20 分)

    1.题目描述: The party began, the greasy uncle was playing cards, the fat otaku was eating, and the littl ...

  7. 如何基于G6进行双树流转绘制?

    1. 背景 业务背景:CRM系统随着各业务条线对线索精细化分配的诉求逐渐增加,各个条线的流向规则会越来越复杂,各个条线甚至整个CRM的线索流转规则急需一种树形的可视化的图来表达. 技术背景:在开发之前 ...

  8. K8S in Action 读后感(概念简介)

    一.K8S的用武之地 今天,大型单体应用正被逐渐拆分成小的.可独立运行的组件,我们称之为微服务.微服务彼此之间解耦,所以它们可以被独立开发.部署.升级.伸缩.这使得我们可以对每一个微服务实现快速迭代, ...

  9. 在 Istio 服务网格内连接外部 MySQL 数据库

    为了方便理解,以 Istio 官方提供的 Bookinfo 应用示例为例,利用 ratings 服务外部 MySQL 数据库. Bookinfo应用的架构图如下: 其中,包含四个单独的微服务: pro ...

  10. TVM Deploy Runtime[施工中]

    本文地址:https://www.cnblogs.com/wanger-sjtu/p/17291070.html tvm 中在部署时有多个选择,最开始的graph exectuor runtime . ...