以下是本篇文章正文内容
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
示例:
--------注释内容
or
#注释内容
示例:
/* 注释内容 */
①查询
SHOW DATABASES;
②创建
创建数据库
CREATE DATABASE 数据库名称;
判断是否存在数据库,不存在则创建
CREATE DATABASE IF NOT EXISTS 数据库名称;
③删除
删除数据库
DROP DATABASE 数据库名称;
判断是否存在,存在就删除
DROP DATABASE IF EXISTS 数据库名称;
④使用数据库
查看当前使用的数据库
SELECT DATABASE();
使用数据库
USE 数据库名称
①查询
查询当前数据下所有表名称
SHOW TABLES;
查询表的结构
DESC 表名称;
②创建
创建表 (最后一行末尾,不能加逗号)
CREATE TABLE 表名{
字段名1 数据类型1,
字段名2 数据类型2
};
③删除
删除表
DROP TABLE 表名;
删除表时判断表在不在
DROP TABLE IF EXISTS 表名;
④修改表
修改表名
ALTER TABLE 表名 RENAME TO 新的表名;
添加一列
ALTER TABLE 表名 ADD 列名 数据类型;
修改数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;
修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
删除列
ALTER TABLE 表名 DROP 列名;
①添加
1)给指定列添加数据
INSERT INTO 表名(列名1,列2,..)VALUES (值1,值2,....);
2)给全部列添加数据
INSERT INTO 表名 VALUES (值1,值2,.....);
3) 批量添加数据
INSET INTO 表名 (列名1,列名2,....)VALUES (值1,值2,....), (值1,值2,....);
INSET INTO 表名 VALUES (值1,值2,....), (值1,值2,....),.....;
②修改
1) 修改表数据
UPDATE 表名 SET 列名1=值1,列名2=值2,...[WHERE 条件];
(如果不加条件,则将所有数据都修改)
③删除
1) 删除数据
DELETE FROM 表名 [WHERE 条件]; WHERE NAME='往';
1.基础查询 SELECT
1.查询多个字段
SELECT 字段列表 FROM 表名;
select name,age from stu;
SELECT * FROM 表名; --查询所有数据
select * from stu;
2.去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
select distince address from stu;
3.起别名
AS:
select name,math as 数学成绩,english as 英语成绩 from stu ;
2.条件查询 WHERE
1.条件查询语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
2.条件
< 小于 > 大于 =等于 >= 大于或等于 <= 小于或等于 != 不等于
BETWEEN....AND.... 在某个范围内 ,都包含
SELECT * FROM stu WHERE age BETWEEN 20 AND 30;
SELECT * FROM stu WHERE date BETWEEN '1990' AND '2000';
IN(....) 多选.....
LIKE 占位符 (模糊查询 _单个任意字符 %多个任意字符)
SELECT * FROM stu WHERE name like '马%'; 查询第一个字是马的名字
SELECT *FROM stu WHERE name like '_花%'; 查询第二个字是花的名字
SELECT * FROM stu WHERE name like '%马%'; 查询名字包含马的名字
IS NULL 为空
SELECT * FROM stu WHERE english = null;
IS NOT NULL 不为空
AND 或 && 并且
OR 或 || 或
NOT 或 ! 非
3.排序查询 ORDER BY:
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2[排序方式2],.....
排序方式: 升序排序 ASC(默认值)
降序排序 DESC
SELECT * from stu ORDER BY age ASC; ---年龄升序排序
SELECT * from stu ORDER BY math DESC; ----数学成绩降序排列
SELECT * from stu ORDER BY math DESC,English ASC;
按照数学成绩排序,如果数学成绩一样,再按照英语成绩升序排序
将一列数据作为一个整体,进行纵向计算。 数据不能为空。
SELECT 聚合函数名(列名) FROM 表
SELECT avg(math) FROM stu;
聚合函数: count(列名) 统计数量
max(列名) 最大值
min(列名) 最小值
sum(列名) 求和
avg(列名) 平均值
SELECT 字段列表
FROM 表名 [WHERE 分组前条件限定]
GROUP BY 分组字段名 [HAVING 分组后条件过滤]
查询男同学和女同学各自的数学平均分。
SELECT sex,avg(math)
FROM stu
GROUP BY sex;
查询男同学和女同学各自的数学平均分,各自的人数。
SELECT sex,avg(math) ,count(*)
FROM stu
GROUP BY sex;
查询男同学和女同学各自的数学平均分,各自的人数。要求:分数低于70分不参与分组
SELECT sex,avg(math) ,count(*)
FROM stu WHERE math>70
GROUP BY sex;
查询男同学和女同学各自的数学平均分,各自的人数。要求:分数低于70分不参与分组,分组之后人数大于2个的
SELECT sex,avg(math) ,count(*)
FROM stu WHERE math>70
GROUP BY sex having count(*)>2;
where 和 having 的区别
where 分组之前进行限定 having 分组之后进行过滤
where 不能对聚合函数进行判断 having可以
5.分页查询(LIMIT)
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目录;
起始索引:从0开始
计算公式:起始索引={当前页码-1} * 每页显示的条数
从0开始查询,查询3条数据
SELECT *FROM stu limit 0,3;
每页显示3条数据,查询第一页的数据
SELECT * FROM stu limit 0,3;
每页显示3条数据,查询第2页的数据
SELECT * FROM stu limit 1 ,3;
每页显示3条数据,查询第3页的数据
SELECT * FROM stu limit 2 ,3;
概念:
约束是作用域表中列上的规则,用于限制加入表的数据
约束的存在保证了数据库中数据的准确性,有效性和完整性
非空约束:保证列中所有数据不能用null值
NOT NULL
--建立员工表
CREATE TABLE emp(
id INT PRIMARY KEY ,-----员工ID,主键且自增长
Ename VARCHAR(50) NOT NULL UNIQUE ,---员工姓名,非空且唯一
Joindate DATE NOT NULL, --入职日期,非空
Salary DOUBLE(7,2) NOT NULL ,---工资,非空
Bouns DOUBLE(7,2) DEFAULT 0,--奖金,如果没有奖金默认为0
);
唯一约束:保证列中所有数据各不相同
UNIQUE 默认为0 UNIQUE 0
主键约束:主键是一行数据的唯一标识,要求非空白且唯一
PRIMARY KEY
默认约束:保存数据时,未指定值则采用默认值
DEFAULT
检查约束:保证列中的值满足某一条件
CHECK
MySQL不支持,不讲
外键约束:外键用来让两个数据之间建立连接,保证数据的一致性和完整性
FOREIGN KEY
(1) 添加约束 先创建主表,再创建从表。 先添加主表数据,再添加从表数据。
先删除从表数据,再删除主表数据。
//创建表时添加外键约束
CREATE TABLE 表名(
列名 数据类型
…..
[CONSTRAINT] [外键名称] FOREIGN KEY(外键名列) REFERENCES 主表(主表列名)
Id nit primary key auto_increment,
Name varchar(20),
Age int;
Dep_id int;
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dep(id);
(2) 删除约束 外键在哪个表,修改哪个表
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
Alter table emp dorp foreign key fk_emp_dept;
(3) 建完表后添加外键
Alter table emp
add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);
概念
建立数据库中的表结构记忆表与表之间的关联关系的过程。
有什么表表有什么字段,表和表之间的关系。
步骤
①需求分析 数据?数据属性?数据与属性的特点?
②逻辑分析 通过ER图对数据库进行逻辑建模
③物理分析 更具数据库滋生特点把逻辑设计转换为物理设计
④维护设计 对新的需求进行建表 表优化
表关系
一对一: 人与身份证
用户和用户详情
用于表的拆分,一张表经常用,一张不经常用,用于提升查询性能。
实现方式:在任意s放加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)
一对多(多对一): 部门与员工
一个部门对应多个员工,一个员工对应一个部门
实现方式:在多的一方建立外键,指向一的一方的主键
员工表建立外键,指向部门表的主键。
多对多: 商品和订单
一个商品对应多个订单,一个订单包含多个商品
实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。
概念:
从多张表查询数据
① 连接查询
1. 内连接: 相当于查询A表 和B表交集数据
查询语法:
//隐式内连接
SELECT 字段列表 FROM 表1,表2…..WHERE 条件;
SELECT * from emp ,dept where emp.dep_id = dept.id;
SELECT emp.name,gender,dept.dname from emp,dept where emp.dep_id=dept.did;
//显示内连接 INNER 可写可不写
SELECT 字段列表 FROM 表1 (INNER) JOIN 表2 ON 条件;
2.外连接:
左外连接:相当于查询A表所有数据和交集的数据
SELECT 字段列表 FROM 表1 LEFT (OUTER) JOIN 表2 ON 条件;
右外连接:相当于查询B表所有数据和交集的数据
SELECT 字段列表 FROM 表1 RIGHT (OUTER)JOIN 表2 ON 条件;
②子查询
查询中嵌套查询
1) 单行单列 作为条件中,使用= < > !=等条件进行判断
SELECT 字段列表 FROM 表 WHERE 字段名 = (子查询);
2) 多行单列 作为条件值,使用in等关键字进行条件判断
SELECT 字段列表 FROM WHERE 字段名 in (子查询);
3) 多行多列 作为虚拟表
SELECT 字段列表 FROM (子查询) where 条件;
SELECT emp.ename, emp.salary, t2.grade
以上就是今天要讲的内容,本文仅仅简单介绍MySQL的使用,只作为个人方便使用查询。