天天看点

(MySQL学习笔记)1、SQL基础1、数据库基础2、 什么是SQL3、SQL数据类型4、SQL变量

SQL基础

  • 1、数据库基础
    • 1.1 保存数据的容器
    • 1.2 使用数据库的好处
    • 1.3 基本术语
    • 1.4 表、行、列、主键
      • 1.4.1 表(table)
      • 1.4.2 列(column)、数据类型
      • 1.4.3 行(row)
      • 1.4.4 主键(primary key)
  • 2、 什么是SQL
    • 2.1 SQL的优点
    • 2.2 SQL语言分类
  • 3、SQL数据类型
    • 3.1 整型
    • 3.2 浮点型 \定点型
      • 3.2.1 浮点型
      • 3.2.2 定点型
    • 3.3 字符型
    • 3.4 日期型
    • 3.5 二进制
  • 4、SQL变量
    • 4.1 分类
    • 4.2 使用语法
      • 4.2.1 系统变量的使用
      • 4.2.2 自定义变量的使用
    • 4.3 注意

1、数据库基础

数据库(DB):保存有组织的数据的容器

1.1 保存数据的容器

主要包括

  1. 数组、集合(内存):断电数据易失
  2. 文件、文件夹(外存、硬盘):不易查询
  3. 数据库:保存有组织的数据的容器

1.2 使用数据库的好处

  1. 易于实现数据的持久化
  2. 易于查询
  3. 数据的共享性高、冗余性低
  4. 有较高的数据独立性

    数据独立性:指应用程序与数据库的数据结构之间相互独立,体现为:逻辑独立性与物理独立性。由数据库的三级模式、两层映像结构保证

  5. 有统一的数据控制功能

1.3 基本术语

  • 数据库DB:保存有组织的数据的容器,长期存储在计算机内、有组织、可共享的大量数据的集合
  • 数据库管理系统DBMS:又称数据库软件,是位于用户与操作系统之间的一层数据管理软件,数据库是通过DBMS创建和操纵的。
  • 数据库系统DBS:由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成
  • 数据库管理员DBA:操作数据库软件的成员

1.4 表、行、列、主键

1.4.1 表(table)

定义:某种特定类型数据的结构化清单,即一种结构化的文件,用来存储某种特定类型的数据。

关键:数据都是存放在表中,表再放到库中。

注意:

  1. 存储在表中的数据可以是一种类型的数据,或一个清单(包含多种数据类型的数据)
  2. 表名:每个表都有唯一的名字,用来标识自己。
  3. 同一个数据库不能两次使用相同的表名,不同的数据库可以使用相同的表名

1.4.2 列(column)、数据类型

列(字段):表由字段组成。

每一列都存储着一条特定的信息(事物的一个属性),如:学生表,一个列存储学号,一个列存储姓名…

每个列都由相同的数据类型,数据类型定义列可以存储的数据种类

1.4.3 行(row)

行:表中的一个记录。表中的数据都是按行存储的,表中的行数为记录的总数。

行=记录=元组,用来描述一个具体的事物。

1.4.4 主键(primary key)

表中的每一行都应该有可以唯一标识自己的一列(或一组列),即主键。

注:主键是一列,其值可以唯一的区分每个行。即主键能唯一标识事物的信息。

  1. 任意两行都不能有相同的主键值
  2. 每一行都必须有一个主键值,主键列不允许出现null值

2、 什么是SQL

SQL:结构化查询语言,专门用来与数据库进行通信的语言

2.1 SQL的优点

  • 简单易学。所有语句都是由简单的英语单词组成,且单词数目不多
  • SQL不是某个特定数据库的专用语言。几乎所有的DBMS都支持SQL
  • SQL是一种强有力的语言,可进行非常复杂和高级的数据库操作

2.2 SQL语言分类

  • DQL数据查询语言:用于数据的查询
    • 查询:SELECT
  • DML数据操纵语言:用于添加、删除、修改、查询数据库记录,并检查数据完整性
    • 添加(插入):INSERT、修改(更新):UPDATE、删除:DELETE
  • DDL数据定义语言:用于逻辑结构(库、表、视图、索引)的创建、修改、删除
    • 创建:CREATE、修改:ALTER、删除:DROP
  • DCL数据控制语言:用于定义用户的访问权限和安全级别
    • 授权:GRANT、取消权限:REVOKE、提交:COMMIT、回滚:ROLLBACK

3、SQL数据类型

3.1 整型

数据类型 字节
TinyInt 1
SmallInt 2
MediumInt 3
Int 4
BigInt 8

设置无符号

CREATE TABLE tab_int (
	t1 INT,#默认   有符号
    t2 INT UNSIGNED #无符号
);

#若插入的数据超出临界值,则会报错误
INSERT INTO tab_int VALUES(12312331231,1111111111);

#有符号INT默认长度为11,无符号INT默认长度为10
           

3.2 浮点型 \定点型

3.2.1 浮点型

FLOAT 4
DOUBLE 8

3.2.2 定点型

DECIMAL(M,D) M+2
M代表 小数+整数的最大总长度(有效长度),D代表 保留几位小数

测试

CREATE TABLE tab_flo (
    t1 FLOAT(5 , 2 ),
    t2 DOUBLE(5 , 2 ),
    t3 DECIMAL(5 , 2 )
);
SELECT * FROM tab_flo;

INSERT INTO tab_flo VALUES(123.45,123.45,123.45);
INSERT INTO tab_flo VALUES(123.456,123.456,123.456);
INSERT INTO tab_flo VALUES(123.4,123.4,123.4);
INSERT INTO tab_flo VALUES(12.45,12.45,12.45);
INSERT INTO tab_flo VALUES(1234.45,1234.45,1234.45);#Error Code: 1264. Out of range value for column 't1' at row 1

           

结果:

(MySQL学习笔记)1、SQL基础1、数据库基础2、 什么是SQL3、SQL数据类型4、SQL变量

3.3 字符型

使用char 和varchar 存储较短的字符串

字符串类型 最多字符数 存储需求 说明
CHAR(M) M 默认为1 M为0-255之间的整数 固定长度的字符串
VARCHAR(M) M 不可省略 M为0-65535之间的整数 可变长度的字符产
ENUM 存储枚举数据
SET

3.4 日期型

数据类型 说明
DATE 格式:YYYY-MM-DD
TIME 格式:HH:MM:SS
DATETIME DATE与TIME的组合
TIMESTAMP 功能与DATETIME相同,但范围较小

3.5 二进制

BLOB 主要用于存储声音、图像

4、SQL变量

4.1 分类

  • 系统变量:系统提供的,属于服务器层面,有默认值
    • 全局变量 GLOBAL
    • 会话变量 SESSION
  • 自定义变量:用户自定义的
    • 用户变量:当前会话有效
    • 局部变量:仅仅在其定义它的begin end中有效

4.2 使用语法

4.2.1 系统变量的使用

#查看所有的系统变量
SHOW VARIABLES;
#查看所有的全局变量
SHOW GLOBAL VARIABLES;
#查看所有的会话变量
SHOW SESSION VARIABLES;

#查看指定的某个系统变量值
SELECT @@autocommit;
SELECT @@global.autocommit;
SELECT @@session.autocommit;

#为某个具体的系统变量复制
SET GLOBAL autocommit = 0;
SET @@autocommit = 1;#默认为session级别
#等价
SET @@session.autocommit = 1

           

4.2.2 自定义变量的使用

#用户变量声明并初始化
SET @用户变量名 :=值;
SELECT @用户变量名 :=值;

#赋值 
SET @name = 值;#赋的值是什么类型,该用户变量就是什么类型
#或 
SELECT 字段 INTO @用户变量名 FROM 表;

#例:将个数赋值个@count
SELECT COUNT(*) INTO @count FROM employees;

#查看
SELECT @用户变量名;
           
#局部变量
#声明
DECLARE 变量名 类型;
#初始化
DECLARE 变量名 类型 DEFAULT 初始值;

#赋值
SET 局部变量名 = 值;
SELECT 字段 INTO 用户变量名 FROM 表;
           

4.3 注意

  1. 更改的全局变量在其他的sql连接中,依然有效。
  2. 服务器每次启动都将会为全局变量赋初始值,针对所有的会话(连接)都有效。但不能跨重启
  3. 会话变量 仅在当前的会话有效,而全局变量针对所有的会话都有效
  4. 局部变量 只能声明在begin end块中的第一句
  5. 用户变量加@,不限制类型 局部变量不用加@,须限制变量类型