做毕设网站,永久个人自助建站,怎么做游戏网站的宣传图片,青岛做网站的公司哪家好一点文章目录 DDL#xff08;数据定义语言#xff09;数据库操作表操作 DML#xff08;数据操作语言#xff09;添加数据注意事项 更新和删除数据 DQL#xff08;数据查询语言#xff09;基础查询条件查询聚合查询#xff08;聚合函数#xff09;分组查询排序查询分页查询D… 文章目录 DDL数据定义语言数据库操作表操作 DML数据操作语言添加数据注意事项 更新和删除数据 DQL数据查询语言基础查询条件查询聚合查询聚合函数分组查询排序查询分页查询DQL 执行顺序 DCL管理用户注意事项 权限控制注意事项 MySQL 通用语法分类
DDL: 数据定义语言用来 定义数据库对象数据库、表、字段DML: 数据操作语言用来对数据库表中的数据进行增删改DQL: 数据查询语言用来 查询 数据库中表的记录DCL: 数据控制语言用来创建数据库用户、控制数据库的控制权限 DDL数据定义语言 数据库操作
查询所有数据库SHOW DATABASES;查询当前数据库SELECT DATABASE();创建数据库CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ];
CREATE DATABASE test_snow DEFAULT CHARSET utf8mb4;删除数据库DROP DATABASE [ IF EXISTS ] 数据库名;使用数据库USE 数据库名;
注意事项 UTF8字符集长度为3字节有些符号占4字节所以推荐用utf8mb4字符集 表操作
查询当前数据库所有表SHOW TABLES;查询表结构DESC 表名;查询指定表的建表语句SHOW CREATE TABLE 表名;
创建表
CREATE TABLE 表名(字段1 字段1类型 [COMMENT 字段1注释],字段2 字段2类型 [COMMENT 字段2注释],字段3 字段3类型 [COMMENT 字段3注释],...字段n 字段n类型 [COMMENT 字段n注释]
)[ COMMENT 表注释 ];最后一个字段后面没有逗号
添加字段 ADD
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
ALTER TABLE emp ADD nickname varchar(20) COMMENT 昵称;// 在 字段A 后面/前面 添加一个新的字段 nickname
ALTER TABLE emp ADD nickname varchar(20) COMMENT 昵称 [AFTER/BEFORE] 字段A ;修改数据类型 MODIFY
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);修改字段名和字段类型 CHANGE
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];// 例将emp表的nickname字段修改为username类型为varchar(30)
ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT 昵称;删除字段
ALTER TABLE 表名 DROP 字段名;修改表名
ALTER TABLE 表名 RENAME TO 新表名删除表
DROP TABLE [IF EXISTS] 表名;删除表并重新创建该表
TRUNCATE TABLE 表名;DML数据操作语言 添加数据 指定字段INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);全部字段INSERT INTO 表名 VALUES (值1, 值2, ...); 批量添加数据INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...); 将查询结果作为参数插入表中
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES SELECT 字段名1, 字段名2, ... FROM 表名 WHERE ....注意事项 字符串和日期类型数据应该包含在引号中插入的数据大小应该在字段的规定范围内 更新和删除数据
修改数据UPDATE 表名 SET 字段名1 值1, 字段名2 值2, ... [ WHERE 条件 ];
UPDATE emp SET name Jack WHERE id 1;删除数据DELETE FROM 表名 [ WHERE 条件 ]; DQL数据查询语言
语法(注意语法顺序不是执行顺序)
SELECT字段列表
FROM表名字段
WHERE条件列表
GROUP BY分组字段列表
HAVING分组后的条件列表
ORDER BY排序字段列表
LIMIT分页参数基础查询
查询多个字段
SELECT 字段1, 字段2, 字段3, ... FROM 表名;
SELECT * FROM 表名;查询并设置别名
SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;
SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;去除重复记录去重
SELECT DISTINCT 字段列表 FROM 表名;不能部分使用 DISTINCT , DISTINCT 关键字作用于所有的列不仅仅是跟在其后的那一列。
转义查询参数与关键字冲突的情况下使用
SELECT * FROM 表名 WHERE name LIKE /_张三 ESCAPE /; // 例如 / 之后的_不作为通配符条件查询
语法SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件
比较运算符功能大于大于等于小于小于等于等于 或 !不等于BETWEEN … AND …在某个范围内闭合区间IN(…)在in之后的列表中的值多选一LIKE 占位符模糊匹配_匹配单个字符%匹配任意个字符IS NULL是NULL
逻辑运算符功能AND 或 并且多个条件同时成立OR 或 ||或者多个条件任意一个成立NOT 或 !非不是
例子
-- 年龄等于30
select * from employee where age 30;
-- 年龄小于30
select * from employee where age 30;
-- 小于等于
select * from employee where age 30;
-- 没有身份证
select * from employee where idcard is null or idcard ;
-- 有身份证
select * from employee where idcard is not null;
-- 不等于
select * from employee where age ! 30;
-- 年龄在20到30之间
select * from employee where age between 20 and 30;
select * from employee where age 20 and age 30;
-- 下面语句不报错但查不到任何信息
select * from employee where age between 30 and 20;
-- 性别为女且年龄小于30
select * from employee where age 30 and gender 女;
-- 年龄等于25或30或35
select * from employee where age 25 or age 30 or age 35;
select * from employee where age in (25, 30, 35);
-- 姓名为两个字
select * from employee where name like __;
-- 身份证最后为X
select * from employee where idcard like %X;注意 为空用 IS NULL 不能用 null 不为空用 IS NOT NULL 聚合查询聚合函数
常见聚合函数
函数功能count统计数量max最大值min最小值avg平均值sum求和
语法SELECT 聚合函数(字段列表) FROM 表名;
SELECT count(id) from employee where workaddress 广东省;分组函数 **AVG(), MAX(), MIN(), SUM()** 会忽略 NULL 值, NULL 值是不参与运算的。举例说明如上图四个人 总分 99 98 100 0 297那平均分就是 297/4 咯最低分是赵六 0 分咯我们看到 与我们想的不一样这是因为聚合函数在运算过程中是忽略 NULL 值的。但是 业务要求我们如果缺考的同学的分数按0算则应该按照如下语句
除此之外 COUNT(列) 也一样如果 COUNT(列) 中的列为空也是会被忽略的。例如我们想知道 user 表中总共有几个人就不能用如下语句
SELECT COUNT(score) FROM user;**而应该用 COUNT(不为NULL的列) **
SELECT COUNT(1) FROM user;分组查询
语法SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后的过滤条件 ];
where 和 having 的区别
执行时机不同where是分组之前进行过滤不满足where条件不参与分组having是分组后对结果进行过滤。判断条件不同where不能对聚合函数进行判断而having可以。
例子
-- 根据性别分组统计男性和女性数量只显示分组数量不显示哪个是男哪个是女
select count(*) from employee group by gender;
-- 根据性别分组统计男性和女性数量
select gender, count(*) from employee group by gender;
-- 根据性别分组统计男性和女性的平均年龄
select gender, avg(age) from employee group by gender;
-- 年龄小于45并根据工作地址分组
select workaddress, count(*) from employee where age 45 group by workaddress;
-- 年龄小于45并根据工作地址分组获取员工数量大于等于3的工作地址
select workaddress, count(*) address_count from employee where age 45 group by workaddress having address_count 3;注意事项 执行顺序where 聚合函数 having分组之后查询的字段一般为聚合函数和分组字段查询其他字段无任何意义 排序查询
语法SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;
排序方式
ASC: 升序默认DESC: 降序
例子
-- 根据年龄升序排序
SELECT * FROM employee ORDER BY age ASC;
SELECT * FROM employee ORDER BY age;
-- 两字段排序根据年龄升序排序入职时间降序排序
SELECT * FROM employee ORDER BY age ASC, entrydate DESC;注意事项如果是多字段排序当第一个字段值相同时才会根据第二个字段进行排序 分页查询
语法SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
例子
-- 查询第一页数据展示10条
SELECT * FROM employee LIMIT 0, 10;
-- 查询第二页
SELECT * FROM employee LIMIT 10, 10;注意事项 起始索引从0开始起始索引 查询页码 - 1 * 每页显示记录数分页查询是数据库的方言不同数据库有不同实现MySQL是LIMIT如果查询的是第一页数据起始索引可以省略直接简写 LIMIT 10 DQL 执行顺序
FROM - WHERE - GROUP BY - HAVING -SELECT - ORDER BY - LIMIT所以 ORDER BY 后面是可以跟别名的但是 GROUP BY 后面不能跟。 DCL 管理用户
查询用户
USE mysql;
SELECT * FROM user;创建用户:CREATE USER 用户名主机名 IDENTIFIED BY 密码;
修改用户密码ALTER USER 用户名主机名 IDENTIFIED WITH mysql_native_password BY 新密码;
删除用户DROP USER 用户名主机名;
例子
-- 创建用户test只能在当前主机localhost访问
create user testlocalhost identified by 123456;
-- 创建用户test能在任意主机访问
create user test% identified by 123456;
create user test identified by 123456;
-- 修改密码
alter user testlocalhost identified with mysql_native_password by 1234;
-- 删除用户
drop user testlocalhost;注意事项 主机名可以使用 % 通配 权限控制
常用权限
权限说明ALL, ALL PRIVILEGES所有权限SELECT查询数据INSERT插入数据UPDATE修改数据DELETE删除数据ALTER修改表DROP删除数据库/表/视图CREATE创建数据库/表
更多权限请看权限一览表
查询权限SHOW GRANTS FOR 用户名主机名;
授予权限GRANT 权限列表 ON 数据库名.表名 TO 用户名主机名;
撤销权限REVOKE 权限列表 ON 数据库名.表名 FROM 用户名主机名; 注意事项 多个权限用逗号分隔授权时数据库名和表名可以用 * 进行通配代表所有