3、SQL语言(上)

时间:2022-05-04 00:42:09
数据库常见组件

数据库:database;是指在计算机上存储数据的集合,可以包含多个表和其他对象,如存储过程、触发器、视图等。数据库是关系型数据库管理系统的基本单元。

表:table,行:row 列:column;是数据库中的一个独立的数据结构,由多个列和行组成。每个表都有一个唯一的名称,用于存储和组织相关的数据。

索引:index;是一种数据结构,用于提高数据库查询的速度。索引可以根据一个或多个列的值进行排序,加快查询时的查找速度,提高查询效率。

视图:view;是一种虚拟的表,不存储实际的数据,而是通过查询其他表来创建一个虚拟表。视图可以简化复杂的查询操作,隐藏数据的细节,保证数据的安全性。

用户:user

权限:privilege

存储过程:procedure;是一种预先编译的程序,可以接受参数并返回结果集,可以在数据库中重复使用,提高数据库的性能和可维护性。

存储函数:function;是指一种在数据库中定义的可重用的函数,它可以接受参数并返回一个值。与存储过程(Stored Procedure)不同的是,存储函数通常用于计算和返回单个值,而存储过程则用于执行一系列操作或返回多个结果集。

触发器:trigger;是一种特殊的存储过程,可以在表上的数据发生变化时自动执行,通常用于实现数据的完整性和约束条件。

事件调度器:event scheduler,任务计划

事务(Transaction):是一组相关的数据库操作,它们要么全部执行成功,要么全部失败回滚,保证数据的一致性和可靠性。

约束(Constraint):是一种限制条件,可以在表上定义,用于保证数据的完整性和一致性。常见的约束包括主键、唯一键、外键、默认值、非空等。

数据库连接池(Database Connection Pool):是一种连接池技术,用于缓存和重用数据库连接,减少数据库连接的开销,提高数据库的性能和扩展性。

SQL语言规范及标准
sql语言规范

sql语句不区分大小写,建议用大写,数据库和表名区分大小写;

SQL语句可单行或多行书写,以;结尾,关键词不能跨多行或简写

注释: -- 注释内容,单行注释,带空格 

           /*注释内容*/多行注释

          #注释内容 mysql注释

数据库对象和命名

命名规则:必须以字母开头,可包括数字和(# _  $)特殊字符、不能使用关键字、同一database(schema)的对象不能同名

语句分类(CRUD)

DDL 数据定义语言(create  drop  alter)主要操作数据库、表、视图、索引等

DML 数据操作语言(insert delete update)对表中数据进行增删改

DQL 数据查询语言(select)

DCL 数据控制语言(grant revoke commit rollback)对用户权限的控制

字符集和排序

早期版本mysql使用的是latin1,mysql8.0字符集已经为utf8mb4

show character set;  查看支持的字符集 ll /usr/share/mysql/charsets/

3、SQL语言(上)

3、SQL语言(上)

show variables like 'character%'; 查看当前字符集的使用情况
SELECT VERSION(); 查看版本号

3、SQL语言(上)

3、SQL语言(上)

SHOW COLLATION;  查看支持所有排序规则
SHOW VARIABLES LIKE 'collation%'; 查看当前使用的排序规则

3、SQL语言(上)

设置服务器默认的字符集,

vim /etc/my.cnf
[mysqld]
character-set-server=utf8mb4

设置客户端默认字符集

vim /etc/my.cnf
[mysql]
default-character-set=utf8mb4
数据类型

选择正确的数据类型对于获得高性能至关重要

1、更小的通常更好,尽量使用可正确存储数据的最小数据类型
2. 简单就好,简单数据类型的操作通常需要更少的CPU周期
3. 尽量避免NULL,包含为NULL的列,对MySQL更难优化

MySQL支持各种数据类型,包括数字、字符串、日期时间、二进制等。下面是MySQL中常用的数据类型:

数字类型:MySQL支持整数和浮点数两种数字类型,整数类型包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT等,浮点数类型包括FLOAT、DOUBLE等。
字符串类型:MySQL支持各种字符集和字符编码,常用的字符串类型包括CHAR、VARCHAR、TEXT等。
日期时间类型:MySQL支持日期、时间、日期时间等类型,常用的日期时间类型包括DATE、TIME、DATETIME等。
二进制类型:MySQL支持各种二进制数据类型,包括BLOB、BINARY、VARBINARY等。
枚举类型:MySQL支持ENUM类型,可以存储固定的枚举值。
集合类型:MySQL支持SET类型,可以存储多个枚举值的组合。
JSON类型:MySQL 5.7及以上版本支持JSON数据类型,可以存储JSON格式的数据
数字型

格式说明

int(m) m是整数值,
float(m,d) m总个数,d小数位 如float(6,3) float(123.45678)则数据库存储123.457
decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位

3、SQL语言(上)

:无符号设置为 tinyint unsigned 0-255;bool,boolean:布尔型:是tinyint(1)同义词,zero则为假,非zero值视为真

日期型

3、SQL语言(上)

字符型
char(n) 固定长度,最多255个字符
varchar(n) 可变长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-1个字符
longtext 可变长度,最多2的32次方-1个字符

3、SQL语言(上)

1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉,所以char类型存储的字符串末尾不能有空格,varchar不限于此
2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n< n>255),所以varchar(4),存入3个字符将占用4个字节
3.char类型的字符串检索速度要比varchar类型的快

1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n< n>255),text是实际字符数+2个字节。
2.text类型不能有默认值
3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text数据类型
二进制型

3、SQL语言(上)

枚举型

3、SQL语言(上)

修饰符

字符类型:可以使用长度修饰符指定字符类型的长度,例如VARCHAR(255)、CHAR(10)等。

整型类型:可以使用UNSIGNED修饰符指定无符号整数类型,例如INT UNSIGNED、BIGINT UNSIGNED等。

浮点类型:可以使用精度修饰符指定浮点类型的精度,例如FLOAT(10,2)、DOUBLE(16,4)等。

时间类型:可以使用精度修饰符指定时间类型的精度,例如DATETIME(3)、TIME(6)等。

枚举类型:可以使用ENUM修饰符指定枚举类型的值列表,例如ENUM('male','female')等。

集合类型:可以使用SET修饰符指定集合类型的值列表,例如SET('red','green','blue')等。

适用所有类型的修饰符:
NULL 数据列可包含NULL值,默认值
NOT NULL 数据列不允许包含NULL值,*为必填选项
DEFAULT 默认值
PRIMARY KEY 主键,所有记录中此字段的值不能重复,且不能为NULL
UNIQUE KEY 唯一键,所有记录中此字段的值不能重复,但可以为NULL
CHARACTER SET name 指定一个字符集
适用数值型的修饰符:
AUTO_INCREMENT 自动递增,适用于整数类型
UNSIGNED 无符号