MySQL
MySQL
参考:
命令
连接与配置
mysql [-h localhost] [-P 3306] -u root -p
//登录mysql
set names utf8
//设置编码
exit
//退出mysql
库操作
SHOW - 查询
SHOW DATABASES
//显示所有数据库SHOW DATABASE()
//显示当前数据库USE RUNOOB
//切换数据库
CREATE - 创建
1 | CREATE DATABASE [IF NOT EXISTS] 数据库名 |
CREATE DATABASE IF NOT EXISTS mydatabase
//创建新数据库CREATE DATABASE mydatabase
//创建新数据库CREATE DATABASE mydatabase DEFAULT CHARACTER SET utf8mb4
//创建新数据库,指定默认字符集为utf8mb4CREATE DATABASE mydatabase DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
//创建新数据库,指定默认字符集为utf8mb4,默认排序规则为utf8mb4_general_ci
DROP - 删除
1 | DROP DATABASE [IF EXISTS] 数据库名 //删除数据库 |
DROP DATABASE mydatabase
//删除数据库DROP DATABASE IF EXISTS mydatabase
//删除数据库
ALTER - 修改
1 | ALTER DATABASE 数据库名 [DEFAULT CHARACTER SET 字符集名] [DEFAULT COLLATE 排序规则]`//修改数据库编码 |
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
//修改数据库编码(其实加不加DEFAULT都可以)ALTER DATABASE mydatabase DEFAULT CHARACTER SET utf8mb4
//修改数据库默认编码ALTER DATABASE mydatabase DEFAULT COLLATE utf8mb4_general_ci
//修改数据库默认排序规则
表操作
SHOW - 查询
SHOW TABLES
//显示所有表SHOW TABLE STATUS
//显示所有表的状态
DESC 表名
//显示表结构
SHOW CREATE TABLE 表名
//显示创建表的语句
CREATE - 创建
1 | CREATE TABLE IF NOT EXISTS 表名 ( |
数据类型:
1 | CREATE TABLE IF NOT EXISTS users ( |
ALTER - 修改
1 | ALTER TABLE 表名 ADD 列名 数据类型 [COMMENT '列注释'] [约束] |
ALTER TABLE Websites CHANGE name site_name VARCHAR(255)
//修改表名ALTER TABLE Websites CHANGE url site_url VARCHAR(255)
//修改表字段名ALTER TABLE Websites CHANGE age site_age TINYINT UNSIGNED COMMENT '年龄'
//修改表字段名,数据类型,注释ALTER TABLE student MODIFY id INT UNSIGNED AUTO_INCREMENT
//修改表字段名,数据类型,自增ALTER TABLE student COMMENT '学生信息表'
//修改表注释
DROP - 删除
1 | DROP TABLE [IF EXISTS] 表名 |
DROP TABLE IF EXISTS Websites
//删除表
数据操作
INSERT - 添加
1 | INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...) --指定字段添加数据 |
INSERT INTO Websites (name, url, alexa, country) VALUES ('Google', 'https://www.google.com', 1, 'USA')
//向Websites表中插入数据INSERT INTO Websites (name, url, alexa, country) VALUES ('RUNOOB', 'https://www.runoob.com', 13, 'CN')
//向Websites表中插入数据
UPDATE - 修改
1 | UPDATE 表名 SET 列1 = 值1, 列2 = 值2, ... [WHERE 条件] |
UPDATE Websites SET name='Google' WHERE id=1
//将id为1的数据的name更新为GoogleUPDATE Websites SET name='Google', url='https://www.google.com' WHERE id=1
//将id为1的数据的name和url更新为Google和https://www.google.com
DELETE - 删除
1 | DELETE FROM 表名 WHERE 条件 |
DELETE FROM Websites WHERE id=1
//删除id为1的数据DELETE FROM Websites WHERE id=2
//删除id为2的数据
查询操作
1 | SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件 GROUP BY 列名1, 列名2 HAVING 分组后过滤条件 ORDER BY 列名1 [ASC|DESC], 列名2 [ASC|DESC] LIMIT 数量 |
起始索引从0开始,且等于(页码-1)*每页记录数,查询记录数为-1时,表示查询所有数据。
- 默认排序方式为升序,即ASC。如果需要降序排列,则需要使用DESC关键字。
WHERE
和 HAVING
的区别:
WHERE
是在查询数据之前对数据进行过滤,而HAVING
是在查询数据之后对数据进行过滤。WHERE
不能用于聚合函数,而HAVING
可以用于聚合函数。
聚合函数:
- 聚合函数可以对一列进行计算,并返回计算结果。
- 聚合函数通常与 SELECT 语句一起使用,用于对查询结果进行统计分析。
函数 | 功能 |
---|---|
COUNT | 计算指定列的行数 |
SUM | 计算指定列的总和 |
AVG | 计算指定列的平均值 |
MAX | 计算指定列的最大值 |
MIN | 计算指定列的最小值 |
SELECT COUNT(*) FROM Websites
//查询Websites表的行数SELECT SUM(age) FROM Websites
//查询Websites表的age列的总和SELECT AVG(age) FROM Websites
//查询Websites表的age列的平均值SELECT MAX(age) FROM Websites
//查询Websites表的age列的最大值SELECT MIN(age) FROM Websites
//查询Websites表的age列的最小值
SELECT * FROM Websites
//查询所有数据SELECT * FROM Websites WHERE id=1
//查询id为1的数据
SELECT * FROM Websites WHERE id=1 AND name='Google'
//查询id为1且name为Google的数据SELECT * FROM Websites WHERE id=1 OR name='Google'
//查询id为1或name为Google的数据
SELECT * FROM Websites WHERE id=1,2,3
//查询id为1,2,3的数据SELECT * FROM Websites WHERE id IN (1,2,3)
//查询id为1,2,3的数据SELECT * FROM Websites WHERE id NOT IN (1,2,3)
//查询id不为1,2,3的数据SELECT * FROM Websites WHERE id BETWEEN 1 AND 10
//查询id在1到10之间的数据
SELECT * FROM Websites WHERE id LIKE '%Google%'
//查询name中包含Google的数据SELECT * FROM Websites WHERE id LIKE 'Google%'
//查询name以Google开头的数据SELECT * FROM Websites WHERE id LIKE '%Google'
//查询name以Google结尾的数据
SELECT * FROM Websites WHERE id=1 ORDER BY name
//查询id为1的数据并按name排序SELECT * FROM Websites WHERE id=1 ORDER BY name DESC
//查询id为1的数据并按name倒序排序SELECT row1,row2 FROM Websites WHERE id=1 ORDER BY name DESC
//查询id为1的数据并按name倒序排序,只返回row1,row2列
SELECT * FROM Websites WHERE id=1 GROUP BY name
//查询id为1的数据并按name分组SELECT * FROM Websites WHERE id=1 HAVING COUNT(*) > 1
//查询id为1的数据并按name分组后筛选出数量大于1的数据
SELECT * FROM Websites WHERE id=1 LIMIT 10
//查询id为1的数据并限制返回10条数据SELECT * FROM Websites WHERE id=1 LIMIT 10 OFFSET 20
//查询id为1的数据并限制返回10条数据,从第20条开始
SELECT * FROM Websites WHERE id=1 UNION SELECT * FROM Websites WHERE id=2
//查询id为1或2的数据并去重SELECT * FROM Websites WHERE id=1 UNION ALL SELECT * FROM Websites WHERE id=2
//查询id为1或2的数据并保留重复数据
用户操作
USE mysql
//切换到mysql数据库SELECT * FROM user
SELECT Host, User FROM mysql.user
//查询用户
CREATE USER '用户名newuser'@'主机名localhost' IDENTIFIED BY '密码password'
//创建用户CREATE USER '用户名newuser'@ '%' IDENTIFIED BY '密码password'
//创建用户,主机名%表示任意主机ALTER USER '用户名newuser'@'主机名localhost' IDENTIFIED [WITH mysql_native_password] BY '新密码newpassword'
//修改用户密码DROP USER '用户名newuser'@'主机名localhost'
//删除用户
权限 | 说明 |
---|---|
ALL,ALL PRIVILEGES | 所有权限 |
SELECT | 查询权限 |
INSERT | 插入权限 |
UPDATE | 更新权限 |
DELETE | 删除权限 |
ALTER | 修改权限 |
DROP | 删除权限 |
CREATE | 创建权限 |
SHOW GRANTS FOR '用户名newuser'@'主机名localhost'
//显示用户权限GRANT 权限 ON 数据库名.表名 TO '用户名newuser'@'主机名localhost'
//授予用户权限GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' WITH GRANT OPTION
//授予用户所有权限REVOKE 权限 ON 数据库名.表名 FROM '用户名newuser'@'主机名localhost'
//撤销用户权限FLUSH PRIVILEGES;
//刷新权限
函数
字符串函数
函数 | 功能 |
---|---|
LENGTH(str) | 返回字符串的长度 |
CONCAT(str1,str2,…) | 连接字符串 |
UPPER(str) | 转换为大写 |
LOWER(str) | 转换为小写 |
LEFT(str,len) | 从左开始截取字符串 |
RIGHT(str,len) | 从右开始截取字符串 |
LPAD(str,len,padstr) | 用指定字符串从左开始填充字符串 |
RPAD(str,len,padstr) | 用指定字符串从右开始填充字符串 |
SUBSTRING(str,pos,len) | 截取字符串 |
REPLACE(str,from_str,to_str) | 替换字符串 |
TRIM(str) | 去掉字符串两边的空格 |
REVERSE(str) | 反转字符串 |
SELECT CONCAT('Hello','World')
//连接字符串UPDATE emp SET workno = LPAD(workno,4,'0')
//更新emp表workno字段,不足4位的前面补0
数值函数
函数 | 功能 |
---|---|
ROUND(x) | 四舍五入 |
ROUND(x,y) | 保留y位小数 |
TRUNCATE(x,y) | 保留y位小数,不进行四舍五入 |
RAND() | 随机数(0-1) |
MOD(x,y) | 求余(x%y) |
FLOOR(x) | 向下取整 |
CEIL(x) | 向上取整 |
SELECT ROUND(1.5)
//四舍五入SELECT ROUND(1.5,1)
//保留1位小数SELECT TRUNCATE(1.5,1)
//保留1位小数,不进行四舍五入SELECT RAND()
//随机数(0-1)SELECT MOD(10,3)
//求余(10%3)SELECT FLOOR(1.5)
//向下取整SELECT CEIL(1.5)
//向上取整
日期函数
函数 | 功能 |
---|---|
NOW() | 当前日期时间 |
CURDATE() | 当前日期 |
CURTIME() | 当前时间 |
YEAR(date) | 年份 |
MONTH(date) | 月份 |
DAY(date) | 日期 |
DATE_ADD(date,INTERVAL expr(目标时间) type(时间单位)) | 日期相加 |
DATE_SUB(date,INTERVAL expr type) | 日期相减 |
DATEDIFF(date1,date2) | 日期相减(天数) |
TIMEDIFF(time1,time2) | 时间相减(天数) |
SELECT NOW()
//当前日期时间SELECT CURDATE()
//当前日期SELECT CURTIME()
//当前时间SELECT YEAR(NOW())
//当前年份SELECT DATE_ADD(NOW(),INTERVAL 70 DAY)
//当前日期加1年SELECT DATE_SUB(NOW(),INTERVAL 1 YEAR)
//当前日期减1年SELECT DATEDIFF('2020-1-1','2021-1-1')
//日期相减(天数)SELECT TIMEDIFF('10:00:00','9:00:00')
//时间相减(天数)SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')
//格式化日期时间SELECT DATE_FORMAT(NOW(),'%Y-%m-%d')
//格式化日期SELECT name,DATEDIFF(NOW(),birth) FROM people WHERE datediff(NOW(),birth)>60
//查询年龄大于60岁的人
流程函数
函数 | 功能 |
---|---|
IF(expr,v1,v2) | 如果expr为真,返回v1,否则返回v2 |
IFNULL(expr,v1) | 如果expr不为空,返回expr,否则返回v1 |
CASE WHEN expr THEN v1 WHEN expr THEN v2 ELSE v3 END | 如果expr为真,返回v1,如果expr为假,返回v2,否则返回v3 |
CASE expr WHEN v1 THEN r1 ELSE r2 END | 如果expr=v1, 返回r1, 否则返回r2 |
SELECT IF(FALSE,'OK','ERROR')
//返回ERRORSELECT IFNULL('OK','ERROR')
//返回OKSELECT IFNULL(NULL,'ERROR')
//返回ERRORSELECT CASE 1 WHEN 1 THEN 'OK' ELSE 'ERROR' END
//返回OKSELECT CASE 2 WHEN 1 THEN 'OK' ELSE 'ERROR' END
//返回ERROR
1 | SELECT |
1 | SELECT |
约束
约束 | 说明 |
---|---|
PRIMARY KEY | 主键,唯一且非空 |
NOT NULL | 非空 |
UNIQUE | 唯一 |
CHECK(表达式) | 检查约束 |
DEFAULT 值 | 默认值 |
FOREIGN KEY | 外键 |
其他
- CREATE INDEX - 创建索引(搜索键)
1 | CREATE INDEX index_name |
CREATE INDEX idx_name ON Websites (name)
//在Websites表的name字段创建索引CREATE INDEX idx_url ON Websites (url)
//在Websites表的url字段创建索引
- DROP INDEX - 删除索引
1 | DROP INDEX index_name |
DROP INDEX idx_name ON Websites
//删除Websites表的name字段索引DROP INDEX idx_url ON Websites
//删除Websites表的url字段索引
HAVING - 用于对分组后的结果集进行筛选
JOIN - 用于将两个或多个表的记录结合起来
1 | SELECT column_name(s) |
- LEFT JOIN - 左连接
1 | SELECT column_name(s) |
- RIGHT JOIN - 右连接
1 | SELECT column_name(s) |
- FULL JOIN - 全连接
1 | SELECT column_name(s) |
- UNION - 用于合并两个或多个 SELECT 语句的结果集
1 | SELECT column_name(s) FROM table_name1 |
参考
https://www.runoob.com/sql/sql-tutorial.html
https://www.runoob.com/mysql/mysql-tutorial.html
未完待续…