第二阶段 MySql

安装

安装网址:MySQL :: Download MySQL Community Server (Archived Versions)

新建配置文件:

[mysql]
default-character-set=utf8

[mysqld]
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

初始化MySQL以及启动服务:

启动MySQL

net start mysql//开启服务
net stop  mysql//关闭服务

如果在开启mysql服务时报了这个错:

发现系统错误2,系统找不到指定的文件。

则参考此博文解决:

mysql 启动报错--发现系统错误2,系统找不到指定的文件。_Marvel__Dead的博客-CSDN博客

  • MySQL参数:

mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认为127.0.0.1)-P端口号

关系型数据库

关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的二维表组成的数据库

  • 优点:

(1)都是使用表结构,格式一致,易于维护

(2)使用通用的SQL语言操作,使用方便,可用于复杂查询

(3)数据存在磁盘中,安全

SQL

  • 结构化查询语言,一门操作关系型数据库的编程语言

  • 定义操作所有关系型数据库的统一标准

  • 对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”。

SQL通用语法:

(1)SQL语句可以单行或多行书写,以分号结尾

(2)MySQL数据库的SQL语句不区分大小写,关键字建议使用大写

(3)注释规定

  • 单行注释:①-- 注意一定要加空格,②#

  • 多行注释:/* */

SQL分类:

DDL:数据定义语言,用来定义数据库对象:数据库,表,列等(操作数据库,表)

DML:数据操作语言,用来对数据库中表的数据进行增删改(操作表中的数据)

DQL:数据查询语言,用来查询数据库中表的记录(操作表中的数据)

DCL:数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户(对数据库进行权限控制)

//小练习,创建一个学生表:
 create table student(
    -> id int,
    -> name varchar(10),
    -> gender char(1),
    -> birthday date,
    -> score double(5,2),
    -> email varchar(64),
    -> tel varchar(15),
    -> status tinyint
    -> );

DML

--查询所有数据
select * from stu;

--给指定列添加数据:INSERT INTO 表名(列名1,列名2...)VALUES(值1,值2..)
INSERT INTO stu (id,name) VALUES (1,'张三');

--给所有列添加数据:
INSERT INTO stu (id,name,gender,birthday,score,emile,tel,status) VALUES(1,'李四','男','1999-09-21',99.99,'123.tx.com','123444444',1);

--给所有列添加数据:(简化版)就是没有表中的具体属性也可以(不建议省略)
INSERT INTO stu VALUES(1,'小四','男','1999-09-21',99.99,'123.tx.com','123444444',1);

--修改数据 :将张三的性别改为女
UPDATE stu SET gender = '女' WHERE name = '张三';

--把张三的生日修改一下
UPDATE stu SET birthday = '2001-01-01' WHERE name = '张三';
--注意!!!:如果UPDATE语句后没有写WHERE条件,则会把表中所有的数据都修改

--删除数据 DELETE FROM 表名 (WHERE 条件)
DELETE FROM stu WHERE name = '小四';
--同理,如果不加条件,则表中的数据都会被删除

DQL

  • 创建一个表:

--单表查询

DROP TABLE IF EXISTS stu;
CREATE TABLE IF NOT EXISTS stu(
id INT, -- 编号
name VARCHAR(10),  -- 姓名
age INT, -- 年龄
sex CHAR(1),   -- 性别
address VARCHAR(2), -- 住址 
math DOUBLE(5,2), -- 数学成绩
english DOUBLE(5,2), -- 英语成绩
hire_date DATE -- 入学日期
);

INSERT INTO stu(id,name,age,sex,address,math,english,hire_date)
VALUES
(1,'马运',55,'男','杭州',66,78,'1995-09-01'),
(2,'马画藤',65,'女','广州',87,54,'1998-09-01'),
(3,'马斯克',43,'女','深圳',75,32,'1999-09-01'),
(4,'柳白',65,'女','北京',65,76,'1993-09-01'),
(5,'柳青',43,'男','西安',54,23,'1992-09-01'),
(6,'刘德话',34,'男','北京',67,87,'1998-09-01'),
(7,'张学右',22,'女','深圳',65,43,'1999-09-01'),
(8,'德玛西亚',18,'男','上海',56,23,'2000-09-01');

 基础查询

--基础查询==============
-- 查询name,age的数据
SELECT name,age from stu;
-- 查询地址列信息
SELECT id,address from stu;
-- 去除重复记录
SELECT DISTINCT address from stu;
-- 查询姓名,数学,英语成绩
SELECT name,math,english from stu;
-- 给查询条件添加一个别名
SELECT name as 姓名,math as 数学成绩,english as 英语成绩 from stu;

条件查询

-- 条件查询
-- 查询年龄小于40的学生
SELECT 	name,age FROM stu WHERE age < 40;
-- 查询年龄大于等于20岁的学生
SELECT name,age,address FROM stu WHERE age >= 20;
-- 查询年龄大于20并且小于30岁的学生
SELECT name,age,address FROM stu WHERE age >= 20 AND age < 30;
SELECT name,age,math FROM stu WHERE age BETWEEN 20 AND 30; 
-- 查询入学日期在95到20年间的学生
SELECT id,name,hire_date FROM stu WHERE hire_date BETWEEN '1995-09-01' AND '2000-09-01';
-- 查询年龄等于18岁的学生 , 这里要注意和Java不同的是等于用一个=表示就可以
SELECT name FROM stu WHERE age = 18;
-- 查询年龄不等于18的学生
SELECT name,id FROM stu WHERE age != 18; 
-- 在sql中<>也表示不等的意思
SELECT name,id FROM stu WHERE age <> 18; 
-- 查询年龄等于18岁 或者 年龄等于20 或者 年龄等于22岁的学生
SELECT id,name,age FROM stu WHERE age = 18 OR age = 20 OR age = 22;
-- 或者简化版
SELECT id,name,age FROM stu WHERE age IN (18,20,22);
-- 查询英语成绩为null的学生
-- 注意!!!null值的比较不能使用 = != ,需要使用 is 或者 is not 来进行比较
SELECT id,name,english FROM stu WHERE english is null;

-- 模糊查询
/*
通配符:
(1)_:代表单个任意字符
(2)%:代表任意个个数字符*/
-- 查询姓 马 的学生
SELECT name,age,address FROM stu WHERE name like '马%';
-- 查询第二个字是‘画’的学生
SELECT id,name,age FROM stu WHERE name like '_画%';
-- 查询名字中包含'德'的学院信息
SELECT id,name,age FROM stu WHERE name LIKE '%德%';

 排序查询

-- 排序查询(默认升序)
SELECT id,name,age FROM stu ORDER BY age asc;
-- 查询学生信息,按照数学成绩降序排列
SELECT id,name,math FROM stu ORDER BY math desc;
-- 查询学生信息,按照数学成绩降序排列,如果数学成绩一样则按照英语成绩排列
SELECT id,name,math,english FROM stu ORDER BY math desc,english asc;

分组查询

-- 统计班上学生的总数
SELECT COUNT(id) FROM stu; -- count统计的值不能为null
-- 求数学成绩的最高分
SELECT MAX(math) FROM stu;
-- 求数学成绩的最低分
SELECT MIN(math) FROM stu;
-- 求数学成绩的总和
SELECT SUM(math) FROM stu;
-- 求数学成绩的平均值
SELECT AVG(MATH) FROM stu;

-- 分别查询男、女同学的数学平均分
SELECT sex,avg(math) FROM stu GROUP BY sex;
-- 分别查询男、女同学的数学平均分及其各自的人数
SELECT sex,count(*),avg(math) FROM stu GROUP BY sex;
-- 分别查询男、女同学的数学平均分及其各自的人数,要求:分数不高于60的不参与分组
SELECT sex,count(*),avg(math) FROM stu WHERE math > 60 GROUP BY sex;
-- 分别查询男、女同学的数学平均分及其各自的人数,要求:分数不高于60的不参与分组,只要分组后人数大于2的数据
SELECT sex,count(*),avg(math) FROM stu WHERE math > 60 GROUP BY sex HAVING COUNT(*) > 2;

 分页查询

-- 分页查询
-- 从 0 开始查询,查三条数据
SELECT id,name,age FROM stu LIMIT 0 , 3;
-- 每页三条数据,显示第一页的数据
SELECT id,name,age FROM stu LIMIT 0 , 3;
-- 显示第二页的数据
select id,name,age FROM stu LIMIT 3 , 3;
-- 显示第三页的数据
SELECT id,name,age FROM stu LIMIT 6 , 3;
-- 起始索引 => (当前页码 - 1)* 每页要查询的信息条数 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值