(此文章仅是我自己整理的学习笔记,写博客的原因也是想通过这种方式进行学习的巩固以及督促自己学习,如果文章能对你有些许帮助,我会很高兴的。当然文章有何不足,也可以帮我指出,感谢)
SQL(Structured Query Language):操作关系型数据库的编程语言,定义了一套操作关系型数据库的标准。
SQL:SQL通用语法,SQL分类
SQL通用语法:
(1)SQL语句可以单行或多行书写,以分号结尾。
(2)SQL语句可以使用空格/缩进来增强语句的可读性
(3)MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
(4)注释:单行注释(--注释内容/#注释内容)
多行注释(/*注释内容*/)
SQL分类:DDL,DML,DQL,DCL
一、DDL(Data Definition Language):数据库定义语言,用来定义数据库对象(数据库,表,字段)
1.DDL操作:
<1>数据库操作
查询所有数据库:
SHOW DATABSES;
查询当前数据库:
SELECT DATABASE();
创建数据库:
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
删除数据库:
DROP DATABASE [IF EXISTS] 数据库名;
使用数据库:
SUE 数据库名;
<2>表操作
查询当前数据库中所有的表:
SHOW TABLES;
查询表结构
DESCRIBE 表名;
查询指定表的建表语句
SHOW CREATE TABLE 表名;
创建表
CREATE TABLE 表名(字段 数据类型 [COMMENT 字段注释])COMMENT 表注释;
添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [COMMENT 注释] [约束];
修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 型字段名 数据类型 [COMMENT 字段注释] [约束];
删除字段
ALTER TABLE 表名 DROP 字段名;
修改表名
ALTER TABLE 表名 RENAME TO 新表名;
删除表
DROP TABLE [IF EXISTS] 表名;
删除指定表,并重新创建该表
TRANCATE TABLE 表名;
2.数据类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 名称 |
TINYINT | 1byte | (-128,127) | (0,255) | 小整数型 |
SMALLINT | 2byte | (-[2^15],[2^15]-1) | (0,[2^16]-1) | 大整数型 |
MEDIUMINT | 3byte | (-[2^23],[2^23]-1) | (0,[2^24]-1) | 大整数型 |
INT(INTEGER) | 4byte | (-[2^31],[2^31]-1) | (0,[2^32]-1) | 大整数型 |
BIGINT | 8byte | (-[2^63],[2^63]-1) | (0,[2^64]-1) | 极大整数型 |
FLOAT | 4byte | (-3.40E+38,-1.18 E-38),0,(1.18E-38,3.40E+38) | 0,(1.18 E-38,3.40 E+38) | 单精度浮点数 |
DOUBLE | 8byte | (-1.80 E+308,-2.23E-308),0,(2.23E-308,1.80 E+308) | 0,(2.23E-308,1.80E+308) | 双精度浮点数 |
DECIMAL | 对DECIMAL(M,D),如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
3.字符串类型
类型 | 大小 | 描述 |
CHAR | 0—255byte | 定长字符串 |
VARCHAR | 0—[2^16]-1byte | 变长字符串 |
TINYBLOB | 0—255byte | 不超过255个字符的二进制数据 |
TINYTEXT | 0—255byte | 短文本字符串 |
BLOB | 0—[2^16]-1byte | 二进制形式的长文本数据 |
TEXT | 0—[2^16]-1byte | 长文本数据 |
MEDIUMBLOB | 0—[2^24]-1byte | 二进制形式的中长度文本数据 |
MEDIUMTEXT | 0—[2^24]-1byte | 中等长度文本数据 |
LONGBLOB | 0—[2^32]-1byte | 二进制形式的极大文本数据 |
LONGTEXT | 0—[2^32]-1byte | 极大文本数据 |
4.日期时间类型
类型 | 大小 | 范围 | 格式 | 名称 |
DATE | 3byte | 1000-01-01至9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3byte | -838:59:59至838:59:59 | HH:MM:DD | 是兼职或持续时间 |
YEAR | 1byte | 1901至2155 | YYYY | 年份值 |
DATETIME | 8byte | 1000-01-01 00:00:00至9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4byte | 1970-01-01 00:00:00/2037年某时 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
二、DML(Data Manipulation Language):数据操作语言,用来对数据库中的数据进行增删改
1.DML操作
<1>数据操作
添加数据
INSERT INTO 表名(字段1,字段2……) VALUES(数值1,数值2……);
INSERT INTO 表名 VALUES(数值……);
批量添加数据
INSERT INTO 表名(字段) VALUES(数值),(数值),……;
INSERT INTO 表名 VALUES(数值),(数值),……;
修改数据
UPDATE 表名 SET 字段=数值 [WHERE 条件];
删除数据
DELECT FROM 表名 [WHERE 条件];
三、DQL(Data Query Language):数据库查询语言,用来查询数据库中表的记录
1.DQL操作
<1>查询语句
SELECT 字段 FROM 表名 HWERE 条件 GROUP BY 字段 HAVING 条件 ORDER BY ASC/DESC(升序/降序)
LIMIT 分页参数;
<2>查询
查询多个字段
SELECT 字段1,字段2,…… FROM 表名;
查询所有字段
SELECT * FROM 表名;
设置别名
SELECT 字段 [AS] 别名 FROM 表名;
去重记录
SELECT DISTINCT 字段 FROM 表名;
<3>分组查询
SELECET 字段1,字段2 FROM 表名 WHERE 条件 GROUP BY 字段1,字段2 HAVING 分组后条件;
(1)where与having的区别:
执行时机不同:where条件是分组之前过滤数据,不参与分组。having是分组后对数据进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
(2)多字段分组:先对“字段1”进行分组,然后在字段1的每个组别中对字段2进行分组。
<4>分页查询
SELECT * FROM 表名 WHERE 条件 LIMIT 起始索引,分页记录数;
(1)起始索引从0 开始,起始索引=(查询页码-1)*每页记录数
(2)如果是查询的第一页,起始索引可省略。
例如:查询第一页的数据,要求每页显示20个数据。
起始索引=(1-1)*20=0,因此省略不写
SELECT * FROM 表名 WHERE 条件 LIMIT 20;
四、DCL(Data Control Language):数据控制语言,用来创建数据库用户,控制数据库的访问权限
1.DCL操作
<1>管理用户
查询用户
USE MYSQL;
SELECT * FROM USER;
创建用户
CREATE USER '用户名'@'主机名' IDENTIFUED BY '密码';
修改用户密码:
ALTER USER '用户名'@'主机名' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '新密码';
删除用户:
DROP USER '用户名'@'主机名';
注意:主机名可以使用通配符(%)表示所有主机
<2>权限控制
权限名称 | 授权 | 权限名称 | 授权 |
ALL,ALL PRIVAILEGES | 所有权限 | SELECT | 查询数据 |
INSERT | 插入数据 | UPDATE | 修改数据 |
DELETE | 删除数据 | ALTER | 修改表 |
DROP | 删除数据库/视图/表 | CREATE | 创建数据库/表 |
查询权限
SHOW GRANTS FOR '用户名'@'主机名';
授予权限
GRANT 权限名称 ON 数据库名,表名 TO '用户名'@'主机名';
撤销权限
REVOKE 权限名称 ON 数据库名,表名 FROM '用户名'@'主机名';
注意:多个权限之间使用逗号分隔,授权时,数据库名和表名可以使用通配符表示。