MYSQL
定义:用来存储和管理数据的仓库
数据库的发展历程
没有数据库,使用磁盘文件存储数据->层次结构模型数据库->网状结构模型数据库_>关系结构模型数据库(使用二维表格来存储数据)->关系-对象模型数据库
MySQL就是关系型数据库
基本语法:
语法要求:
-
SQL语句可以单行或多行书写,以分号结尾;
-
可以用空格和缩进来来增强语句的可读性;
-
关键字不区别大小写,建议使用大写;
DDL(数据定义语言)
对表进行操作
创建:CREATE
CREATE TABLE IF NOT EXISTS `STUDENT`;
删除:DROP
DROP TABLE `STUDENT`
改动:AlTER
ALTER TABLE `STUDENT` DROP PRIMARY KEY;
DMl(数据操作语言)
对字段操作
更新:UPDATE
UPDATE `表名` SET 字段名 = 值,字段名 = 值......[WHERE 条件语句]
UPDATE `studenttable` SET name = '张三' WHERE name = '李四'
插入:INSERT
INSERT [INTO] `表名` (字段列表) VALUES (值列表)
INSERT INTO `studenttable` (name,sid,gender) VALUES ('王五','2120','男');
删除:DELETE
DELETE FROM `表名` [WHERE 条件语句] DCL(数据控制语言)
DELETE FROM `scoretable` WHERE sid = '2120'
对用户操作
创建:CREATE
CREATE USER 用户名@地址 IDENTIFIED BY '密码';
CREATE USER ADMIN@LOCALHOST IDENTIFIED BY '1332620674'
授权:GRANT
GRANT 权限1, … , 权限n ON 数据库.* TO 用户名;
GRANT ALL ON ESA.* TO ADMIN@LOCALHOST
撤销权限:INVOKE
REVOKE权限1, … , 权限n ON 数据库.* FORM 用户名;
REVOKE DELETE,ALTER,UPDATE ON ESA.* FROM ADMIN@LOCALHOST
DQL(数据查询语言,重点)
主体:select 字段列表 from 表名
SELECT `StudentName` FROM `studenttable`
条件语句:Where
SELECT * FROM `studenttable` WHERE `Gender` = '男';
分组字段:GROUP BY
SELECT * FROM `studenttable` GROUP BY StudentID;
分组条件:HAVING(一般是在统计之后的筛选,在group by之后)
SELECT * FROM `studenttable` HAVING Nation ='汉';
排序字段:ORDER BY(降序/升序:DESC/ASC)
SELECT * FROM `studenttable` WHERE Gender ='女"ORDER BY BirthDay ;
偏移量,每页数量:LIMIT
SELECT * FROM `Studenttable` LIMIT 0,5;
where和having 的区别:
where是筛选分组前的数据,having是筛选分组后的数据
having后可以使用聚合函数(比如count(),sum(),max(),min(),avg()),where不行
完整性约束
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确、有效性和完整性。
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 限制该字段的数据不能为null | NOT NULL |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
唯一约束 | 保证该字段的所有数据都是唯一、不重复的 | UNIQUE |
默认约束 | 保存数据时,如果未指定该字段的值,则采用默认值 | DEFAULT |
外键约束 | 用来让两张表的数据之间建立连接,保证数据的一致性和完整性 | FOREIGN KEY |
检查约束(8.0.16版本之后) | 保证字段值满足某一个条件 | CHECK |
多表查询
联合查询
UNION:去除重复记录
SELECT * FROM t1 UNION SELECT * FROM t2;
UNION ALL:不去除重复记录
SELECT * FROM t1 UNION ALL SELECT * FROM t2。
连接查询
1.直接连接查询:直接在两张表中查询,可能出现不需要的结果
SELECT emp.ename,emp.sal,emp.comm,dept.dname FROM emp,dept WHERE emp.deptno=dept.deptno;
2.内连接查询:查询结果必须满足条件,去除空值
SELECT * FROM emp e INNER JOIN dept d ON e.deptno=d.deptno;
3.外连接查询:左外连接和右外连接
--左外连接
SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;
--右外连接
SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;