重返MySQL之MySQL基础

本章详细介绍了,什么是数据库,常见的关系型数据库有哪些,什么是MySQL,及MySQL中DDL操作表,DML操作表记录。

1.0 数据库概述

1.1 数据存储的方式

  • 目前来说如果我们要进行数据存储,有几种方式:
  • 我们可以使用集合等方式将数据保存在内存中,但是数据不能持久化保存,断电/程序退出,数据就清除了
  • 我们还可以将数据保存在普通文件中,可以持久化保存,但是查找,增加,修改,删除数据比较麻烦,效率低
  • 所以我们需要一个既可以持久化保存数据又可以方便操作的地方来存储数据,这就是接下来要给大家介绍的数据库

1.2 什么是数据库

  • 数据库(DataBase,DB):指长期保存在计算机的存储设备(硬盘)上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合. 还是以文件的方式存在服务器的电脑上的。
  • 说白了就是数据的仓库, 用来持久化保存数据的.

1.3 常见的关系型数据库

  • MySql :开源免费的数据库,中小型的数据库,后来Sun公司收购了MySql,而Sun公司又被Oracle收购
  • Oracle:收费的大型数据库.Oracle公司的产品.Oracle收购SUN公司,收购MySql.
  • DB2:IBM公司的数据库产品,收费的.银行系统中.
  • SQLServer:MS公司.收费的中型的数据库.
  • SyBase:已经淡出历史舞台.提供了一个非常专业数据建模的工具PowerDesigner.
  • SQLite: 嵌入式的小型数据库,应用在手机端.

2.0 知识点-数据库结构

  • 数据库是用来存储数据的,那么到底通过什么样的方式来存的. 结构是怎么样的呢?
  • 数据库管理程序(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。
  • 数据库管理系统、数据库和表的关系如图所示:

3.0 什么是MySQL

3.1 MySQL始出

  • MySQL是开源,多线程的关系型数据库,支持双重授权模式,最早是在瑞典MySQL AB公司开发,其MySQL取名,来源于Monty 大女儿My,MySQL以免费,可靠性,易用性,广受好评。
  • 1996年MySQL发布1.0版本,同年十月MySQL发布3.11.1版本,当时只提供Solaris下的二进制版本,又一个月后,Linux下二进制包也发布,此时MySQL还非常简陋,只能在一个表中进行增删查改操作,并无其他功能。
  • 之后MySQL被Sun公司收购,随后Sun被Oracle收购,所以目前MySQL属于Oracle旗下产品

4.0 MySQL安装

5.0 SQL概述

5.1 什么是sql?

  • SQL:Structure Query Language。(结构化查询语言),通过sql操作数据库(操作数据库,操作表,操作数据)
  • SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准
  • 各数据库厂商(MySql,oracle,sql server)都支持ISO的SQL标准。
  • 各数据库厂商在标准的基础上做了自己的扩展。 各个数据库自己特定的语法

5.2 sql的语法

  • 每条语句以分号结尾(命令行里面需要),如果在navicat,java代码中不是必须加的。
  • SQL在window中不区分大小写,关键字中认为大写和小写是一样的

5.3 sql的分类

  • Data Definition Language (DDL数据定义语言) 如:操作数据库,操作表
  • Data Manipulation Language(DML数据操纵语言),如:对表中的记录操作增删改
  • Data Query Language(DQL 数据查询语言),如:对表中的记录查询操作
  • Data Control Language(DCL 数据控制语言),如:对用户权限的设置

6.0 DDL操作数据库

6.1 数据库增删查改

create database 数据库名 [character set 字符集][collate  校对规则]     注: []意思是可选的意思
-- 创建一个数据库名为41itblog的数据库
create database 41itblog;
-- 创建一个为41itblog2的数据库指定编码为GBK
create database 41itblog2 character set gbk;
-- 查看所有数据库
show databases;
-- 查看41itblog数据库定义结构
show create database 41itblog;
-- 删除数据库
drop databse 数据库名;
-- 修改数据库
alter database 数据库名 character set 字符集;
-- 切换数据库
use 数据库名;
-- 查看正在使用的数据库
select database();

7.0 DDL操作表增删查改

7.1 DDL创建表语法

create table 表名(
字段名 字段类型 [约束],
字段名 字段类型 [约束],
........
字段名 字段类型 [约束]
);

7.2 数据库数据类型

  • 数据库数据类型一般可以分为三类,字符串,数值,日期
  1. 整型 一般使用int 或者bigint
  2. 浮点/双精度型
    • 默认的范围 float或者double
    • 指定范围 float(M,D) eg: float(4,2) 表达的范围: -99.99~99.99
  3. 字符串
    • 固定长度 char(n) eg: char(20), 最大能存放20个字符. ‘aaa’, 还是占20个字符的空间
    • 可变长度 varchar(n) eg:varchar(20), 最大能存放20个字符. ‘aaa’, 占3个字符的空间
    • 一般使用varchar(n) 节省空间; 如果长度(eg:身份证)是固定的话 可以使用char(n) 性能高一点
  4. 关于大文件
    • 一般在数据库里面很少存文件的内容, 一般存文件的路径
    • 一般不使用二进制存, 使用varchar(n)存文件的路径
  5. 日期
    • DATE 只有日期
    • DATETIME 日期和时间

7.3 数据库字段约束

  • 即规则,规矩 限制;

  • 作用:保证用户插入的数据保存到数据库中是符合规范的

    约束 约束关键字
    主键 primary key
    唯一 unique
    非空 not null

约束种类:

  • not null: 非空 ; eg: username varchar(40) not null username这个字段不能为空,必须要有数据
  • unique:唯一约束, 后面的数据不能和前面重复; eg: cardNo char(18) unique; cardNo字段不能出现重复的数据
  • primary key;主键约束(非空+唯一); 一般用在表的id列上面. 一张表基本上都有id列的, id列作为唯一标识的
    • auto_increment: 自动增长,必须是设置了primary key之后,才可以使用auto_increment
  • id int primary key auto_increment; id不需要我们自己维护了, 插入数据的时候直接插入null, 自动的增长进行填充进去, 避免重复了.

    注意:
  1. 先设置了primary key 再能设置auto_increment
  2. 只有当设置了auto_increment 才可以插入null 自己维护 否则插入null会报错

    id列:
  3. 给id设置为int类型, 添加主键约束, 自动增长
  4. 或者给id设置为字符串类型,添加主键约束, 不能设置自动增长

7.4 创建数据库表

创建一张博客用户表(含有id字段,网名字段,性别字段.QQ字段 id为主键自动增长)

-- 创建一张博客用户表(含有id字段,网名字段,性别字段.QQ字段 id为主键自动增长)
create table blog_user(
id int primary key auto_increment,
name varchar(40),
sex varchar(40),
qq int
);

7.5 查看数据库表

-- 查看所有的表
show tables;
-- 查看表定义结构
desc 表名;

7.6 修改数据库表

  • 修改数据库表语法

    • 增加一列;alter table 表 add 字段 类型 约束;
    • 修改列的类型约束; alter table 表 modify 字段 类型 约束 ;
    • 修改列的名称,类型,约束;alter table 表 change 旧列 新列 类型 约束;
    • 删除一列; alter table 表名 drop 列名;
    • 修改表名 ; rename table 旧表名 to 新表名;
    • 给blog_user表添加一个地址字段
    alter table blog_user add address varchar(60) not null;
    • 给blog_user表的sex字段改成int类型
    alter table blog_user modify sex int;
    • 给blog_user表的address字段修改成phone字段
    alter table blog_user change address phone varchar(20);
    • 把class字段删除
    alter table blog_user drop phone;
    • 把blog_user表修改成blog_article
    rename table blog_user to blog_article;

7.7 删除数据库表

-- 删除表语法
drop table 表名;
-- 删除blog_article
drop table blog_article;

8.0 DML操作表记录-增删改

准备工作: 创建一张博客用户表(用户id,用户名字,用户年龄,用户地址

create table blog_user(
user_id int primary key auto_increment,
user_name varchar(40),
user_age int,
user_address varchar(80)
);

8.1 插入数据

  • 插入方式一: 插入指定列,如果没有把这个列进行列出来, 以null进行自动赋值了
    insert into 表(列,列..) values(值,值..);
  • 插入方拾二:插入所有列
    -- 注意  创建数据库时候需要将编码设置为utf8
    insert into 表 values(值,值....);
    eg:
    insert into blog_user values(null,'张三',18,'河南');
    insert into blog_user values(null,'李四',19,'湖南');
    insert into blog_user values(null,'王二',50,'河北');
    insert into blog_user values(null,'赵武',7,'湖北');

8.2 更新记录

  • 更新记录语法
    update 表 set 列 =值, 列 =值 [where 条件]
    -- 将所有用户年龄改为18
    update blog_user set user_age = 18;
    -- 将用户名是张三的年龄改为50
    update blog_user set user_age =50 where user_name='张三';
    -- 将用户名是李四的年龄改为25地址改为北京
    update blog_user set user_age =25 , user_address='北京' where user_name='李四';
    -- 用户名是王二的年龄在原有的基础上增加两岁
    update blog_user set user_age =user_age+2 where user_name='王二';

8.3 删除记录

  • delete删除记录语法
    delete from 表 [where 条件]
    -- 删除名字为张三的数据
    delete from blog_user where user_name='张三';
    -- 删除年龄小于25的数据
    delete from blog_user where user_age < 25;
    -- 删除所有记录
    delete from blog_user ;
  • truncate 删除表
    truncate table 表;
    1. delete 和truncate区别

      • DELETE 删除表中的数据,表结构还在; 删除的记录可以找回
      • TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表(空)。删除的记录不可以找回
    2. 逻辑删除和物理删除
      • 物理删除: 真正的删除了, 数据不在, 使用delete就属于物理删除
      • 逻辑删除: 没有真正的删除, 数据还在. 搞一个标记, 其实逻辑删除是更新 eg: state字段 1 启用 0禁用
  • 这里只有DML操作表其中的增删改,关于DML操作表的查询语法将在下一个章节叙述,查询表相对来说稍有复杂其中还包含,单表查询,多表查询,子查询,外连接,内连接,左右外连接等。

重返MySQL之MySQL基础的更多相关文章

  1. MySQL 调优基础(一) CPU与进程

    一般而言,MySQL 的调优可以分为两个层面,一个是在MySQL层面上进行的调优,比如SQL改写,索引的添加,MySQL各种参数的配置:另一个层面是从操作系统的层面和硬件的层面来进行调优.操作系统的层 ...

  2. 【MySQL】MySQL无基础学习和入门之一:数据库基础概述和实验环境搭建

    数据库基础概述  大部分互联网公司都选择MySQL作为业务数据存储数据库,除了MySQL目前还有很多公司使用Oracle(甲骨文).SQLserver(微软).MongoDB等. 从使用成本来区分可以 ...

  3. (2.16)Mysql之SQL基础——函数

    (2.16)Mysql之SQL基础——函数 关键词:mysql函数,mysql自定义函数,mysql聚合函数,mysql字符串函数,mysql数值函数 1.自定义函数 -- (1)一般形式 creat ...

  4. (2.15)Mysql之SQL基础——开发设计最佳规范

    (2.15)Mysql之SQL基础——开发设计最佳规范 关键字:mysql三大范式,mysql sql开发规范 分析: show profile.mysqllsla.mysqldrmpslow.exp ...

  5. (2.14)Mysql之SQL基础——游标

    (2.14)Mysql之SQL基础——游标 关键词:Mysql游标 -- (1)定义游标 declare cur_name cursor for select * from table_name wh ...

  6. (2.13)Mysql之SQL基础——触发器

    (2.13)Mysql之SQL基础——触发器 关键词:Mysql触发器 1.一般形式 -- 0.查看触发器[1]SHOW TRIGGERS;[2]SELECT * FROM `information_ ...

  7. (2.11)Mysql之SQL基础——存储过程与变量

    (2.11)Mysql之SQL基础——存储过程 关键字:mysql存储过程 查看存储过程: []SELECT * FROM information_schema.ROUTINES WHERE ROUT ...

  8. (2.10)Mysql之SQL基础——约束及主键重复处理

    (2.10)Mysql之SQL基础——约束及主键重复处理 关键词:mysql约束,批量插入数据主键冲突 [1]查看索引: show index from table_name; [2]查看有约束的列: ...

  9. (2.9)Mysql之SQL基础——索引的查看与删除

    (2.9)Mysql之SQL基础——索引的查看与删除 关键词:mysql索引查看,mysql索引删除 1.索引查询(以下包括主键,唯一,普通,复合,全文,但不包括外键) (1)按库查询 select ...

随机推荐

  1. 通过ffmpeg转换为mp4格式

    FFMPEG  -i  example.wmv -c:v libx264 -strict -2 output.mp4FFMPEG  -i  example.wmv -c:v libx264 -stri ...

  2. BGP路由技术

    BGP路由技术 目录 一.BGP概述 1.1.自治系统 1.2.动态路由分类 1.3.BGP概念 1.4.BGP的特征 1.5.BGP工作原理 二.命令配置 2.1.BGP配置思路 2.2.命令 一. ...

  3. Linux基本命令精讲

    一.Shell Linux系统中运行的一种特殊程序 在用户和内核之间充当"翻译官 用户登录 Linux系统时,自动加载一个 Shell程序 Bash是 LinuxShell系统中默认使用的程 ...

  4. 1.5Java、万维网以及其他

    要点提示:Java是一种功能强大和多用途的编程语言,可用于开发运行在移动设备.台式计算机以及服务器端的软件.

  5. Python协程你学会了吗?

    在学习协程之前,你需要先知道协程是什么?协程又称为微线程,一个程序可以包含多个协程,可以对比与一个进程包含多个线程,因而下面我们来比较协程和线程.我们知道多个线程相对独立,有自己的上下文,切换受系统控 ...

  6. 『无为则无心』Python函数 — 25、Python中的函数

    目录 1.函数的使用 (1)定义函数 (2)调用函数 (3)使用函数的注意事项 2.函数的参数 3.实参的类型 Python函数的说明: Python中函数的应用非常广泛,前面章节中我们已经接触过多个 ...

  7. AcWing 237. 程序自动分析

    #include<bits/stdc++.h> using namespace std; const int N=1e6+5; int f[N*2],a[N],b[N],c[N],n,t, ...

  8. AcWing 1289. 序列的第k个数

    BSNY 在学等差数列和等比数列,当已知前三项时,就可以知道是等差数列还是等比数列. 现在给你 整数 序列的前三项,这个序列要么是等差序列,要么是等比序列,你能求出第k项的值吗. 如果第k项的值太大, ...

  9. Https:创建部署SSL证书进行双向认证

    一.前言 建立客户端与服务器的Https的连接需要证书进行双向验证后,才可访问.   二.证书类型 不同数字证书部署在服务器上后,用户浏览器访问网站时,展示如下: 1.无证书时 显示不安全标识. 2. ...

  10. 12 shell case in语句

    Shell也支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句.当分支较多,并且判断条件比较简单时,使用 case in 语句就比较方便了. if else 语句与ca ...