目录

一、数据库的安装与启动

1.mysql数据库安装

2.Mysql启动

3.Mysql 客户端连接

二、数据库的DDL基础操作(数据库对象增删改查)

1. Mysql数据模型

2.mysql通用语法

3.Sql分类

4.Ddl语句

5.Ddl -表操作-查询

6.Ddl -表操作-创建

7.Ddl -表操作-数据类型

8.ddl -表操作-修改

三、数据库的DML基础操作(数据库数据增删改查)

1.dml-添加数据

2.Dml-修改数据

3.Dml-删除数据

四、数据库的DQL基础操作(数据库数据查询)

1.dql-语法

2.dql-基本查询

3.Dql-条件查询

4.Dql-聚合函数

5.dql-分组查询

6.Dql-排序查询

7.Dql-分页查询

8.综合案例

9.Dql-执行顺序

五、数据库的DCL基础操作(数据库用户管理)

1.dcl-介绍

2.dcl-管理用户

3.Dcl-权限控制


一、数据库的安装与启动

1.mysql数据库安装

Mysql社区版

2.Mysql启动

启动:mysql start 数据库安装名字 如:mysql80

暂停:mysql stop 数据库安装名字 如:mysql80

服务:services.msc

3.Mysql 客户端连接

Mysql 自带数据库连接

Cmd连接:Mysql [-h 127.0.0.1] [-p 3306] -u root -p    -h 指定服务器ip -p 指定端口号 -u 用户名 -p 指定密码

二、数据库的DDL基础操作(数据库对象增删改查)

1. Mysql数据模型

数据库

2.mysql通用语法

Sql语句可以单行或多行书写,以分号结尾。

Sql语句可以使用空格/缩进来增强语句的可读性。

Mysql数据库的sql语句不区分大小写,关键词建议使用大写。

注释:单行注释:-- 注释内容或#注释内容(mysql特有) 多行注释:/*注释内容*/

3.Sql分类

Ddl 数据定义语言,用来定义数据库对象(数据库,表,字段)

Dml 数据操作语言,用来对数据表中的数据进行增删改

Dql 数据查询语言,用来查询数据库中表的记录

Dcl 数据控制语言,用来创建数据库用户,控制数据库的访问权限。

4.Ddl语句

Ddl -数据库操作

查询所有数据库:show databases;

查询当前数据库:select database();

创建:create database [if not exists] 数据库名 [default charst 字符集] [collate 排序规则];

[if not exists]判断是否存在该数据库名,如果有则不执行,如果无则创建。

[default charst 字符集]指定用utf8编码还是别的编码

删除:drop database [if exists] 数据库名;

使用:use 数据库名;

注意:使用过程中使用use 进入数据库后,前面并不会发生变化,所以当不确定当前在什么数据库中的时候使用查询当前数据库的命令来查询当前数据库是什么数据库。

5.Ddl -表操作-查询

查询当前数据库的所有表:show tables;

查询表结构:desc 表名;

查询指定表的建表语句:show create table 表名;

6.Ddl -表操作-创建

Create table 表名(

字段1 字段1类型[comment 字段1注释],

字段2 字段2类型[comment 字段2注释],

字段3 字段3类型[comment 字段3注释],

.....

字段n 字段n类型[comment 字段n注释]

)[comment 表注释];

注意:[......]可选 最后一个字段后面没逗号

案例:

id

Name

Age

Gender

1

令狐冲

28

2

风清扬

68

3

东方不败

32

操作:

mysql> create table tp_user(

    -> id int comment '编号',  

    -> name varchar(50) comment '姓名',

    -> age int comment '年龄',

    -> gender varchar(50) comment '性别'

-> )comment '用户表';

7.Ddl -表操作-数据类型

mysqlcollate怎么修改_数据库

 案例1:表示年龄,年龄可以使用int,但int占用4个字节,比较大那就可以考虑使用tinyint,tinyint的范围是-128到127,但是年龄没有负的,所以可以考虑无符号,所以最后写应该是age tinyint unsigned。

案例2:表示分数,分数可能是100.0或者88.5,这就需要使用浮点型,score double(4,1),4代表整体长度,如100.0是四位就是4,1代表小数位,如100.0小数位是一位就是1。

mysqlcollate怎么修改_mysqlcollate怎么修改_02

 案例1:二进制多用于存储安装包,音频等,但是不方便管理,通常都是使用文件服务器来存储,所以二进制通常用的也不多。

案例2:在使用char和varchar时都需要在后面添加一个(10)里面的参数表示当前字符串能够存储的最大的长度。Char(10)表示最多能够存储10个字符串,如果超过10个就会报错。Char的性能好,varchar的性能较差,因为varchar在使用的时候需要根据内容来计算长度,所以性能相比char较差。例如:用户名使用varchar 因为用户名是变长的,不好判断,所以 useradd varchar(50)。而性别是固定的男女,所以使用char,gender char(1)。

mysqlcollate怎么修改_sql_03

 案例1:记录生日,使用date,因为生日通常只需要记录年月日。

综合案例:按照需求创建表格,要求设计合理的数据类型及长度。

编号:纯数字

员工工号:字符串类型,长度不超过10位

员工姓名:字符串类型,长度不超过10位

性别:男/女,存储1个汉字

年龄:正常年龄,不可能存在负数

身份证号:18位,身份证中有X这样的字符

入职时间:取年月日

Create table emp(

        id tinyint comment  ‘编号’,

        workno varchar(10) comment  ‘工号’,

        user varchar(10) comment  ‘姓名’,

        gender char(1) comment  ‘性别’,

        age tinyint unsigned comment  ‘年龄’,

        sfz char(18) comment  ‘身份证’,

        time date comment  ‘入职时间’

) comment  ‘员工表’;

8.ddl -表操作-修改

添加字段:alter table 表名 add 字段名 类型(长度)[comment 注释] [约束];

案例:为emp表增加一个新的字段为“昵称”为nicheng,类型为varchar(20)。

操作:alter table emp add nicheng varchar(20);

修改数据类型:alter table表名 modify 字段名 新数据类型(长度);

修改字段名和字段类型:alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];

案例:将emp表格的nicheng字段修改为username,类型为varchar(30)。

操作:alter table emp change nicheng username varchar(30);

删除字段:alter table 表名 drop 字段名;

案例:将emp表中的username删除。

操作:alter table emp drop username;

修改表名:alter table 表名 rename to 新表名;

案例:修改emp表为emplog。

操作:alter table emp rename to emplog;

删除表:drop table [if exists] 表名;

删除指定表并重新创建该表:truncate table 表名;注:相当于删除表中的数据,不删除表。

案例:删除user表。

操作:drop table user;

案例:truncate table emplog;

三、数据库的DML基础操作(数据库数据增删改查)

1.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,...);

注意:插入数据时,指定的字段和值的顺序需要一一对应。

      字符串和日期型数据应该包括在引号中。

      插入的数据大小,应该在字段的规定范围内。

案例1:为heima的指定字段添加数据。注:指定字段是指定某一个字段为其添加数据,顺序需要和字段名一一对应。

操作:insert into emplog(id, workno, user, gender, age, sfz, time) values (1,'1','itcasr','男',10,'123456789012345678','2000-1-1');

案例2:为heima的全部字段添加数据。注:添加全部字段,需要按照字段的顺序一个一个加,且需要一一对应。

操作:insert into emplog values (2,'2','hema','男',20,'123456789012345677','2005-5-5');

案例3:为heima表批量添加数据。注:添加全部字段,需要数据库表中的按照字段的顺序一个一个加,且需要一一对应,多条数据之间需要使用逗号隔开。

操作:insert into emplog values (3,'3','hema0','男',50,'123456789882345677','2005-5-5'),

(4,'4','hem25a','女',20,'123455589012345677','2005-5-5');

2.Dml-修改数据

修改数据:update 表名 set 字段名1 = 值1,字段名2 = 值2,.....[where 条件];

注意:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

案例1:将id为1的数据,将user修改为itheima

操作:update emplog set user = 'itheima' where id = 1;

案例2:将id为1的数据,将user修改为小昭,性别改成女。

操作:update emplog set user = '小昭',gender = '女' where id =

案例3:将所有员工的入职时间修改为2008-01-01。

操作:update emplog set time = '2008-1-1';

3.Dml-删除数据

删除数据:delete from 表名 [where 条件]

注意:delete 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。

Delete语句不能删除某一个字段的值(可以使用update)。

案例1:删除gender为女的员工。

操作:delete from emplog where gender = '女';

案例2:删除所有员工。

操作:delete from emplog;

四、数据库的DQL基础操作(数据库数据查询)

1.dql-语法

Select 字段列表

From 表名列表

Where 条件列表

Group by 分组字段列表

Having 分组后条件列表

Order by 排序字段列表

Limit 分页参数

基本查询

条件查询(where)

聚合函数(count max min avg sum)

分组查询(group by)

排序查询(oroer by)

分页查询 (limit)

2.dql-基本查询

查询多个字段:select 字段1,字段2,... from 表名;

查询所有字段:select * from 表名;

设置别名:select 字段1  [as 别名1],字段2[as 别名2].... from 表名;

去除重复记录:select distinct 字段列表 from 表名;

需求准备:

create table emp(
    id int comment '编号',
    workno varchar(10) comment '工号',
    name   varchar(10) comment '姓名',
    gender char(1) comment '性别',
    age tinyint unsigned comment '年龄',
    idcard char(18) comment ' 身份证号 ',
    workaddress varchar(50) comment '工作地址',
    entydate date comment '入职时间'
)comment '员工表';

insert into emp (id,workno,name,gender,age,idcard,workaddress,entydate)
values (1,'1','卡卡','女',20,'123456789012345678','北京','2000-01-01'),
       (2,'2','张无忌','男',18,'123456789012345670','北京','2005-09-01'),
       (3,'3','韦一笑','男',38,'123456789712345670','上海','2005-08-01'),
       (4,'4','赵敏','女',18,'123456757123845670','北京','2009-12-01'),
       (5,'5','小昭','女',16,'123456769012345678','上海','2007-07-01'),
       (6,'6','杨逍','男',28,'12345678931234567X','北京','2006-01-01'),
       (7,'7','范瑶','男',40,'123456789212345670','北京','2005-05-01'),
       (8,'8','黛绮丝','女',38,'123456157123645670','天津','2015-05-01'),
       (9,'9','范凉凉','女',45,'123156789012345678','北京','2010-04-01'),
       (10,'10','陈友谅','男',53,'123456789012345670','上海','2011-01-01'),
       (11,'11','张士诚','男',55,'123567897123465670','江苏','2015-05-01'),
       (12,'12','常遇春','男',32,'123446757152345670','北京','2004-02-01'),
       (13,'13','张三丰','男',88,'123656789012345678','江苏','2020-11-01'),
       (14,'14','灭绝','女',65,'123456719012345670','西安','2019-05-01'),
       (15,'15','胡青牛','男',70,'12345674971234567X','西安','2018-04-01'),
       (16,'16','周芷若','女',18,null,'北京','2012-06-01');

案例1:查询指定字段 name,workno,age 返回。

操作:select name,workno,age from emp;

案例2:查询所有字段返回。

操作:select * from emp;

案例3:查询所有员工的工作地址,起别名。

操作:select workaddress as '工作地址' from emp;

案例4:查询公司员工的上班地址(不要重复)。

操作:select distinct workaddress from emp;

3.Dql-条件查询

语法:select 字段列表 from 表名 where 条件列表;

条件:

mysqlcollate怎么修改_mysqlcollate怎么修改_04

案例1:查询年龄等于88 的员工。

操作:select * from emp where age = '88';

案例2:查询年龄小于20的员工信息。

操作:select * from emp where age < '20';

案例3:查询年龄小于等于20的员工信息。

操作:select * from emp where age <= '20';

案例4:查询没有身份证号的员工信息。

操作:select * from emp where idcard is null;

案例5:查询有身份证号的员工信息。

操作:select * from emp where idcard is not null;

案例6:查询年龄不等于88的员工信息。

操作:select * from emp where age != '88';

案例7:查询年龄在15岁(包含)到 20岁(包含)之间的员工信息。

操作:select * from emp where age between 15 and 20;

案例8:查询性别为女且年龄小于25岁的员工信息。

操作:select * from emp where gender = '女' && age < 25;

案例9:查询年龄等于18 或20或40的员工信息。

操作1:select * from emp where age = 18 || age = 20 || age = 40;

操作2:select * from emp where age in(18,20,40);

案例10:查询姓名为两个字的员工信息。

操作:select * from emp where name like '__';

案例11:查询身份证最后一位是X的员工信息。

操作1:select * from emp where idcard like '%X';

操作2:select * from emp where idcard like '____________X';  注意17个下划线加上X

4.Dql-聚合函数

介绍:将一列数据作为一个整体,进行纵向计算。

常见的聚合函数:

mysqlcollate怎么修改_mysql_05

语法:select 聚合函数(字段列表)from 表名;

注意:count 不计算nall值。

案例1:统计该企业员工数量

操作:select count(id) from emp;

案例2:统计该企业员工的平均年龄

操作:select avg(age) from emp;

案例3:统计该企业员工的最大年龄

操作:select max(age) from emp;

案例4:统计该企业员工的最小年龄

操作:select min(age) from emp;

案例5:统计西安地区员工的年龄之和

操作:select sum(age) from emp where workaddress = '西安';

5.dql-分组查询

语法:select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];

Where与having区别:

执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。

判断条件不同:where不能对聚合函数进行判断,而having可以

注意:执行顺序:where > 聚合函数 >having。分组之后,查询的字段一般为聚合函数和分组字段,查询其它字段无任何意义。

案例1:根据性别分组,统计男性员工和女性员工的数量

操作:select gender,count(gender) from emp group by gender;

案例2:根据性别分组,统计男性员工和女性员工的平均年龄

操作:select gender,avg(age) from emp group by gender;

案例3:查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址

操作:select workaddress,count(*) from emp where age < 45 group by workaddress having count(*) >= 3;

6.Dql-排序查询

语法:select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2 .....;

排序方式:asc 升序(默认),desc 降序。

注意:如果多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

案例1:根据年龄对公司的员工进行升序排序

操作1:select * from emp order by age asc;

操作2:select * from emp order by age;

案例2:根据入职时间对员工进行降序排序

操作:select * from emp order by entydate desc ;

案例3:根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序

操作:select * from emp order by age asc , entydate desc ;

7.Dql-分页查询

语法:select 字段列表 from 表名 limit 起始索引,查询记录数;

注意:

起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数。

分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。

如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。

案例1:查询第一页员工数据,每页显示10条记录。

操作1:select * from emp limit 0,10;

操作2:select * from emp limit 10;

案例2:查询第二页员工数据,每页显示10条记录。

操作:select * from emp limit 10,20;   注:这里的10是(2-1)*10

8.综合案例

案例1:查询年龄为20,21,22,23岁的员工信息。

操作1:select * from emp where age = 20 or age =21 or age = 22 or age = 23;

操作2:select * from emp where age between 20 and 23;

操作3:select * from emp where age in (20,21,22,23)

案例2:查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工。

操作:select * from emp where gender = '男' and age between 20 and 40 and name like '___';

案例3:统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。

操作:select gender,count(gender) from emp where age<60 group by gender;

案例4:查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。

操作:select name,age from emp where age <= 35 order by age,entydate desc ;

案例5:查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。

操作:select * from emp where gender = '男' and age between 20 and 40 order by age,entydate desc limit 0,5;

9.Dql-执行顺序

Select    字段列表

From     表名列表

Where   条件列表

Group by 分组字段列表           编写顺序

Having   分组后条件列表

Order by 排序字段列表

Limit    分页参数

From     表名列表

Where    条件列表

Group by  分组字段列表

Having   分组后条件列表          执行顺序

Select    字段列表

Order by  排序字段列表

Limit     分页参数

五、数据库的DCL基础操作(数据库用户管理)

1.dcl-介绍

介绍:dcl用来控制数据库用户,控制数据库的访问权限。

2.dcl-管理用户

查询用户:use mysql;select*from user;

创建用户:create user ‘用户名’@‘主机名’ identified by ‘密码’;

修改用户密码:alter user ‘用户名’@‘主机名’identified with mysql_native_password by ‘新密码’;

删除用户:drop user ‘用户名’@‘主机名’;

案例1:创建用户itcast,只能够在当前主机访问,密码是123456;

操作:create user 'itcast'@'localhost' identified by '123456';

案例2:创建用户heima,可以在任意主机访问该数据库,密码是123456;

操作:create user 'heima'@'%' identified by '123456';

案例3:修改用户heima,的访问密码是1234;

操作:alter user 'heima'@'%' identified with mysql_native_password by '1234';

案例4:删除itcast@localhost用户;

操作:drop user 'itcast'@'localhost';

注意:主机名可以使用%通配,这类sql开发人员操作的比较shao,主要是dba使用。

3.Dcl-权限控制

Mysql中定义了很多种权限,但常用的就一下几种:

mysqlcollate怎么修改_mysqlcollate怎么修改_06

查询权限:show grants for ‘用户名’@‘主机名’;

授予权限:grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’;

撤销权限:revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’;

注意:多个权限之间,要用逗号分隔,授权时,数据库名和表名可以使用*进行通配,代表所有

案例1:查询heima的权限。

操作:show grants for 'heima'@'%';

案例2:让heima能够管理heima数据库中的emp表,并授予所有权限。

操作:grant all on heima.emp to 'heima'@'%';

案例3:撤销heima的所有权限。

操作:revoke all on *.* from  'heima'@'%';

后面还将继续更新笔记.....