MySql数据库(一)

                                       MySql数据库(一)

一、MySql8的安装与启动

   1、MySql的安装:

    ① MySQL8.0.11 Windows zip包下载地址

    ② 下载后解压到自己指定的文件夹并且解压,然后在解压文件夹下创建一个my.ini文件夹,并且在该配置文件中写入以下数据,注意修改安装目录和存放数据的目录改为自己的安装目录:

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir= D:\mysql\mysql-8.0.11-winx64
# 设置mysql数据库的数据的存放目录
datadir= D:\mysql\mysql-8.0.11-winx64\data
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

     ③ 以管理员方式进入cmd --> 进入安装目录下的bin目录输入mysqld install 安装mysql

     ④ 执行mysqld --initialize --console 初始化data目录,执行完成后,会打印 root 用户的初始默认密码(冒号后面):

A temporary password is generated for root@localhost: )CsoiV9(YQm(

    2、MySql的启动:

    ① 进入服务中查找MySql手动启动与停止(先启动才能登陆)

服务

    ②以管理员身份进入cmd,输入命令行的方式(先启动才能登陆):

    启动:net start mysql

    停止:net stop mysql

    ③ 启动之后登陆:

    通过管理员方式cmd --> 进入安装目录下bin目录输入(注意大小写,直接在-p后面加密码不能有空格,也可以不直接加密码) mysql h localhost -P 3306 -u root -p    (省略写法:mysql -u root -p)

    ④ 修改密码(注意最后加分号):

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; 

    ⑤ 退出登录 exit 及版本查询 mysql --version(直接 -V 也可以):

    3、MySql 规范

    ① 不区分大小写,但建议关键字大写、表名、列表小写;

    ② 每条命令以分号结束。

二、数据库基本操作

    1、安装图形化工具如:SQLyog,并创建连接如下:

    连接后(默认4个,第5为后导入的):

    2、数据库基本操作

# 显示所有数据库
SHOW DATABASES;
# 查看数据库里的表
SHOW TABLES FROM world;
# 查看当前所在数据库名称(as 后面为别名)
SELECT DATABASE() AS "当前所在数据库";
# 创建一个yl数据库 (如果数据库存在会报错)
CREATE DATABASE yl;
# 选择数据库  
USE yl; 
# 创建一个text表,两个字段
CREATE TABLE `text`(id INT,`Name` VARCHAR(20));
# 插入数据
INSERT INTO `text` (id, `Name`) VALUE (1, "hyk");
# 查看表结构
DESC `text`;
# 查看表所有数据
SELECT * FROM `text`;
# 修改数据
UPDATE `text` SET `Name`="hsd" WHERE id=1;
# 查看表所有数据
SELECT * FROM `text`;
# 删除数据
DELETE FROM `text` WHERE id=1;
# 删除数据库
# drop database yl;

   3、 数据库查询

   ① 首先下载一个数据库,方便数据库查询学习,导入方法如下:

  ② 基础查询:

# 进入world数据库,查询city表下的单个id字段
USE world;
SELECT ID FROM city;
# 查询多个字段,并且给字段换别称(as可以省略)
# `着重号(数字1旁边)用于区分字段与关键字
SELECT id AS "编号",`Name` AS "名称" FROM city;
# 查询所有字段
SELECT * FROM city;
# 查询常量
SELECT 100 AS "常量";
# 查询表达式
SELECT 100%30 AS "表达式";
# 查询函数
SELECT VERSION() AS "版本号";
# 去重
SELECT DISTINCT CountryCode FROM city;
# +的作用(只有一个作用就是运算符):
SELECT "12"+1 AS "结果12+1";
SELECT "qq"+1 AS "结果0+1";
SELECT NULL + 12 AS "一定为NULL";

    ③条件查询

# 运算符
# < > = != <> <= >=
# 逻辑运算符
# &&(and) ||(or) !(not)
# 进入world数据库,按条件查询city表下的单个id字段
USE world;
SELECT ID FROM city WHERE id <10 OR id >4008;
# 模糊查找
# like、between、in、is Null
# 通配符
# %匹配任意多个字符包含0个
SELECT `Name` FROM city WHERE `Name` LIKE "%a";
# _匹配任意单个字符
SELECT `Name` FROM city WHERE `Name` LIKE "_a%";
# 转义(ESCAPE 定义一个字符为转义字符)
SELECT `Name` FROM city WHERE `Name` LIKE "%\_%";
SELECT `Name` FROM city WHERE `Name` LIKE "%=_%" ESCAPE "=";
# BETWEEN AND 两者之间(与顺序有关,并且包含临界值)
SELECT ID FROM city WHERE ID BETWEEN 100 AND 200;
# in作用相当于CountryCode="AFG",CountryCode="NLD" 不能使用通配符
SELECT DISTINCT CountryCode FROM city WHERE CountryCode IN("AFG","NLD");
# IS NULL(IS NOT NULL) 判断是否为空
SELECT `Name` FROM country WHERE `LifeExpectancy` IS NULL;
# <=> 安全等于 既可以用于数值又可以用于NULL值
SELECT `Name` FROM country WHERE `LifeExpectancy` <=> NULL;

    注:要注意为NULL的情况

    ④ 排序(ASC 为升序,DESC为降序):

# 进入world数据库并且进行升序排序(默认升序)
USE world;
SELECT ID,Population FROM city WHERE ID<30 ORDER BY Population ASC;
# 降序排序
SELECT ID,Population FROM city WHERE ID<30 ORDER BY Population DESC;
# 按字节长度排序
SELECT ID,`Name` FROM city WHERE ID<30 ORDER BY LENGTH(`Name`) ASC;
# 按多条件排序(前面优先)
SELECT CountryCode,Population FROM city WHERE LENGTH(CountryCode)=3 
ORDER BY CountryCode,Population ASC;

三、MySql函数

    1、字符函数

# LENGTH表示字节长度,中文字节数与编码有关,utf-8中文三个字节
USE world;
SELECT LENGTH("123木勿");
# 查询服务端编码
SHOW VARIABLES LIKE "%char%";
# 拼接字符
SELECT CONCAT(ID,"-",`Name`) FROM city;
# LOWER字符小写,UPPER字符大写
SELECT LOWER(`Name`) AS "小写",UPPER(`Name`) AS "大写" FROM city;
# SUBSTR、SUBSTRING截取(有4个重载)
SELECT SUBSTR("中国古典小说的巅峰之作",5); # 从第5个位置开始截
SELECT SUBSTR("中国古典小说的巅峰之作",1,2); # 从第一个位置开始截取两个字符长度
# 首字母大写其余小写
SELECT CONCAT(UPPER(SUBSTR(`Name`,1,1)),LOWER(SUBSTR(`Name`,2))) FROM city;
# INSTR查询字符第一次出现的字符,查找不到返回0
SELECT INSTR("中国古典小说的巅峰之作","小说");
# TRIM去前后空格或者其它字符,不去中间的
SELECT TRIM(" 中 国 古 典 小 说 的 巅 峰 之 作 ");
SELECT TRIM("a" FROM "aa中a国a古a典a小a说a的a巅a峰a之a作aa");
# LPAD左填充 RPAD右填充 用字符填充至至指定字符数,超过会从右截断
SELECT LPAD("中国古典小说的巅峰之作",15,"-");
SELECT RPAD("中国古典小说的巅峰之作",4,"-");
# 替换
SELECT REPLACE("中国古典小说的巅峰之作","巅峰","顶峰");

    2、数学函数

# round 指定位数四舍五入
USE world;
SELECT ROUND(1.222,2) AS "结果";
# CEIL向上取整(x轴正方向)
SELECT CEIL(-1.2) AS "结果";
# TRUNCATE截断
SELECT TRUNCATE(1.222,2) AS "结果";
# TRUNCATE取余(a-a/b*b)
SELECT MOD(10,3) AS "结果";

    3、日期函数

# NOW返回系统当前日期+时间
SELECT NOW() AS "当前日期时间";
# CURDATE返回系统日期
SELECT CURDATE() AS "当前日期";
# CURTIME返回当前时间
SELECT CURTIME() AS "当前时间";
# YEAR年
SELECT YEAR(NOW()) AS "年";
# MONTH月
SELECT MONTH(NOW()) AS "月";
SELECT MONTHNAME(NOW()) AS "月名字";
# DAY日
SELECT DAY(NOW()) AS "日";
# HOUR小时
SELECT HOUR(NOW()) AS "小时";
# MINUTE分钟
SELECT MINUTE(NOW()) AS "分钟";
# SECOND秒钟
SELECT SECOND(NOW()) AS "秒钟";
# STR_TO_DATE字符转日期
SELECT STR_TO_DATE("2018+5-9","%Y+m-%d");
# DATE_FORMAT日期转字符
SELECT DATE_FORMAT(NOW(),"%Y年%m月%d");
# 求时间差
SELECT DATEDIFF(NOW(),"1994-10-22");

    4、其他函数

# 查看MySql版本
SELECT VERSION();
# 查看数据库
SELECT DATABASE();
# 查看当前用户
SELECT USER();

    5、流程控制函数

# IF函数
SELECT ID,`Name`,Population,IF(Population>1000000,"百万级","百万级以下") AS "备注" FROM city;
# case 字段或表达式(省略的话when中可以使用if) when 
SELECT ID,`Name`,Population,
CASE
WHEN Population>1000000 THEN "大"
WHEN Population>100000 THEN "中"
ELSE "小"
END
FROM city;

    6、分组函数

# SUM求和、AVG求平均值、MIN求最小值、MAX求最大值、COUNT计数(全部忽略NULL值)
USE world;
SELECT SUM(Population) AS "求和" FROM city;
SELECT AVG(Population) AS "平均值" FROM city;
SELECT MIN(Population) AS "最小值" FROM city;
SELECT MAX(Population) AS "最大值" FROM city;
SELECT COUNT(Population) AS "计数" FROM city;
# 和DISTINCT搭配使用
SELECT SUM(DISTINCT Population) AS "去重求和" FROM city;
# count(*)计数,不会忽略NULL计数
SELECT COUNT(*) AS "统计总行数" FROM city;

    7、分组查询(能分组前筛选的尽量分组前筛选)

# 分组求平均值
USE world;
SELECT CountryCode,TRUNCATE(AVG(Population),0) FROM city GROUP BY CountryCode;
# 统计每个CountryCode下city数量大于10的,HAVING分组后筛选
SELECT CountryCode,COUNT(*) FROM city GROUP BY CountryCode HAVING COUNT(*)>10;
# 根据城市名字长度分组,并且筛选数量大于100的
SELECT COUNT(*),LENGTH(`Name`) FROM city GROUP BY LENGTH(`Name`) HAVING COUNT(*)>100;
# 计算人口大于5000000的每个CountryCode下不同长度Name的平均人数,并且按平均人口排序
SELECT AVG(Population),CountryCode,LENGTH(`Name`) FROM city
WHERE Population>5000000
GROUP BY CountryCode,LENGTH(`Name`)
ORDER BY AVG(Population) ASC;

四、连接查询(sql92语法)

    1、等值连接

# 两个表连接查询,city表中的面积在country中对应的面积
USE world;
SELECT city.Name,country.SurfaceArea FROM city,country
WHERE city.Name=country.Name;

    2、非等值连接

# 创建一个人口数量划分表(创建后要更新才能看到)
USE world;
CREATE TABLE PopulationGrades(grades VARCHAR(3),MinPop INT,MaxPop INT);
INSERT INTO PopulationGrades VALUES("A",2000000,99999999);
INSERT INTO PopulationGrades VALUES("B",1000000,1999999);
INSERT INTO PopulationGrades VALUES("C",500000,999999);
INSERT INTO PopulationGrades VALUES("D",200000,499999);
INSERT INTO PopulationGrades VALUES("E",0,199999);
# 非等值查询,按人口数量分等级,并且进行筛选、排序
SELECT city.`Name`,city.`Population`, populationgrades.`grades`
FROM  city,PopulationGrades
WHERE city.`Population` BETWEEN PopulationGrades.`MinPop` 
AND PopulationGrades.`MaxPop`
AND LENGTH(`Name`)=4
ORDER BY populationgrades.`grades` ASC;

    3、自连接

    数据库文件

  代码:

# 按员工编号查询员工领导编号
USE myemployees;
SELECT eo.employee_id AS "员工编号",et.employee_id AS "领导编号"
FROM employees AS eo,employees AS et
WHERE et.employee_id=eo.manager_id;

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值