1. SQL语言按功能划分
- DDL,英文叫做 Data Definition Language,也就是数据定义语言,它用来定义我们的数据库对象,包括数据库、数据表和列。通过使用 DDL,我们可以创建,删除和修改数据库和表结构。
- DML,英文叫做 Data Manipulation Language,数据操作语言,我们用它操作和数据库相关的记录,比如增加、删除、修改数据表中的记录。
- DCL,英文叫做 Data Control Language,数据控制语言,我们用它来定义访问权限和安全级别。
- DQL,英文叫做 Data Query Language,数据查询语言,我们用它查询想要的记录,它是 SQL 语言的重中之重。
SQL 是如何执行的
- Oracle
- MySQL 执行过程
数据库的执行引擎
- InnoDB 存储引擎:它是 MySQL 5.5 版本之后默认的存储引擎,最大的特点是支持事务、行级锁定、外键约束等。
- MyISAM 存储引擎:在 MySQL 5.5 版本之前是默认的存储引擎,不支持事务,也不支持外键,最大的特点是速度快,占用资源少。
- Memory 存储引擎:使用系统内存作为存储介质,以便得到更快的响应速度。不过如果 mysqld 进程崩溃,则会导致所有的数据丢失,因此我们只有当数据是临时的情况下才使用 Memory 存储引擎。
- NDB 存储引擎:也叫做 NDB Cluster 存储引擎,主要用于 MySQL Cluster 分布式集群环境,类似于 Oracle 的 RAC 集群。
- Archive 存储引擎:它有很好的压缩机制,用于文件归档,在请求写入时会进行压缩,所以也经常用来做仓库。
- 如何在 MySQL 中对一条 SQL 语句的执行时间进行分析
select @@profiling;
profiling=0 代表关闭,我们需要把 profiling打开,设置为1
set profiling=1;
show profile; – 显示上次执行时间
show profile for query 执行的ID; – 显示某个的
select version; – 当前版本
DDL建表
- 数据库定义
create database test;
drop database test;
- 数据表定义
create table 表名;
DROP TABLE IF EXISTS
player
;
CREATE TABLEplayer
(
player_id
int(11) NOT NULL AUTO_INCREMENT,
team_id
int(11) NOT NULL,
player_name
varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
height
float(3, 2) NULL DEFAULT 0.00,
PRIMARY KEY (player_id
) USING BTREE,
UNIQUE INDEXplayer_name
(player_name
) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
- 修改表结构
添加字段: alter table 表名 add (表字段 字段类型)
修改字段名称: alter table 表名 rename column 原来字段名 to 新字段名
修改字段的数据类型: alter table 表名 modify (字段名 字段类型 )
删除字段: alter table 表名 drop column 字段名称
- 数据常见约束
主键 UNIQUE+NOT NULL
外键、唯一性、NOT NULL、DEFAULT、CHECK约束等
SELECT
- 基础语法
DISTINCT 去除重复行关键字 , 针对于它后面所有的字段, 它放在所有查询字段之前
关键字的书写顺序,不能颠倒
SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY …
执行顺序
FROM > WHERE > GROUP BY > HAVING > SELECT 的字段 > DISTINCT > ORDER BY > LIMIT
- 比较运算符
通配符过滤:
_ 一个字符
% 任意个字符
SQL 函数
- 算术函数
- 字符串函数
,大多数 DBMS 使用(||)或者(+)来做拼接符,而在 MySQL中使用concat()函数
- 日期函数
-
转换函数
-
这里有一个有关命名规范的建议:
- 关键字和函数名称全部大写;
- 数据库名、表名、字段名称全部小写;
- SQL 语句必须以分号结尾。
数据库导入导出
- 数据库导出
./mysqldump -uroot -p 数据库名 > 导出文件名.sql
./mysqldump -u 用户名 -p -d 数据库名 > 数据库名.sql
这个是只导处表结构(-d 参数)
./mysqldump --socket=/home/rasweb/software/mysql5.7.29/data/mysqld.sock --skip-add-locks -u root -p rasdb > d61_xxh_rasdb.sql
- 参数解释:
socket: 指定你的连接文件, 有可能当前数据库时在普通用户上, 此时连接找不到mysql.sock文件, 我们就可以进行手动指定该连接文件
skip-add-locks 这个参数防止导出的数据,在导入某个数据库表的时候, 会进行锁表操作,而失败, 加入了该参数则可跳过锁表操作
- 数据库导入
- mysql 命令导入数据
首先命令进入mysql
mysql> create database 数据库名
mysql> use 数据库名
可以设置编码
mysql> set names utf8;
使用source 导入
mysql> source /地址/数据库名.sql
- 命令行
./mysql -h ip地址 -u 数据库用户名-p 数据库名称< 文件路径.sql
- 导入出错The sql length exceeds the max limit of maxStringLiteralLength=65535
解决:
–max_allowed_packet=4096 加入参数进行导出