mysql

发布时间 2023-12-21 15:54:53作者: Wang_JC

MYSQL

1.安装

2.用法

  • sql语句可单行或多行,以分号结尾;
  • MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
  • 单行注释: -- 注释内容 或 #注释内容(MySQL 特有)
  • 多行注释: /* 注释 */

3.mysql数据类型

数值:

  • tinyint:1个字节(小整数类型)

  • int:4个字节(大整数类型)

  • double:浮点类型(总长度,小数点后保留位数)

日期:

  • date:日期值(只保留年月)
  • datetime:混合日期和时间值(年月日时分秒)

字符串:

  • char:定长字符串(如果储存数据字符不足10个,也会占10个空间)
  • varchar:变长自字符串(如果储存数据字符不足10个,那么是几个占几个空间)
需求:设计一张学生表,请注重数据类型、长度的合理性
	1. 编号
	2. 姓名,姓名最长不超过10个汉字
	3. 性别,因为取值只有两种可能,因此最多一个汉字
	4. 生日,取值为年月日
	5. 入学成绩,小数点后保留两位
	6. 邮件地址,最大长度不超过 64
	7. 家庭联系电话,不一定是手机号码,可能会出现 - 等字符
	8. 学生状态(用数字表示,正常、休学、毕业...)
create table student(
	id int,
    name varchar(10),
    birthday date,
    score double(5,2),
    email varchar(64),
    tel varchar(15),
    status tinyint
);

4.分类使用

1.DDL:操作数据库,表

操作库

查询所有数据库:show databases;
创建数据库(如果存在数据库,忽略该操作):create database if not exists 库名;
删除数据库:drop database if exists 库名;
修改数据库名:alter database  旧库名 rename to 新库名;
使用数据库:use 库名;

操作表

查看当前数据库:select database;
查询所有表名:show tables;
查询所有表结构:desc 表名;
创建表:create table if not exists 表名(
	字段名1	数据类型1,
	字段名2	数据类型2
	);
删除表:drop table if exists 表名;
修改表:
	修改表名:alter table 旧表名 rename to 新表名;
	添加列:alter table 表名 add 列名 数据类型;
	添加多列:alter table 表名 add 列名1 数据类型1,add 列名2 数据类型2,add 列名3 数据类型3;
	修改数据类型:alter table 表名 modify 列名 新数据类型;
	修改列名和数据类型:alter table 表名 change 旧列名 新列名 数据类型;
	删除列alter table 表名 drop 列名;

2.DML:对表中数据增删改查

添加数据:
	给指定列添加数据:insert into 表名(列名1,列名2,列名3) values(值1,值2,值3); 
	给全部列添加数据:insert into 表名 values(值1,值2,值3,值4);
	批量添加数据:
	insert into 表名(列名1,列名2,列名3) values (值1,值2,值3),(值1,值2,值3),(值1,值2,值3);
	insert into 表名 values (值1,值2,值3,值4),(值1,值2,值3,值4),(值1,值2,值3,值4);
删除数据:
delete from 表名 [where 条件];
修改数据:
update 表名 set 列名1=值1,列名2=值2,列名3=值3[where 条件]; 
查询数据:
select * from 表名

3.DQL:对数据进行查询操作

简单查询

简单查询:
select 字段名1,字段名2 from 表名;
去重简单查询:
select distinct 字段名1 from 表名;
去重,起别名简单查询:
select distinct 字段名1 as 别名 from 表名;
select distinct 字段名1 别名 from 表名;

条件查询

select 字段名1 from 表名 where 条件;
	条件举例:
		age>20;
		age<=20;
		age>=20 && age<=30;等同 age>=20 and age<=30;等同 age between 20 and 30;
		age !=20;等同 age<>20;
		age=20 or age=30;等同age in (20,30);
		age is null;
		age is not null;

模糊查询

关键字:like
_:代表单个任意字符;
%:代表任意个数字符;
select 字段名1,字段名2,字段名3 from 表名 where 字段名1 like '%w_c%';

排序查询

按字段1升序:
select 字段名1,字段名2 from 表名 order by 字段名1;
按字段1降序:
select 字段名1,字段名2 from 表名 order by 字段名1 desc;
按字段1降序,如果字段1一样,再按字段2升序:
select 字段名1,字段名2,字段名3 from 表名 order by 字段名1 desc,字段名2 asc;

聚合函数

注意:null值不参与聚合运算

select 聚合函数名(列名) from 表名;
	聚合函数举例:
	count(列名)	--一般使用count(*)统计个数,因为null不进行运算
	max(列名)
	min(列名)
	sum(列名)
	avg(列名)
	

分组查询

注意:

​ 分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义

​ having可以对聚合函数进行过滤,where不能。

select 分组字段名,聚合函数 from 表名 [where 分组前的限定] group by 分组字段 [having 分组后的条件限定]
举例:查询男同学和女同学各自的语文平均分,以及各自人数,要求:分数低于60分的不参与分组,分组之后人数大于10个的
select sex,avg(chinese),count(*) from student where score>=60 group by sex having count(*)>10;

分页查询

select 字段名 from 表名 limit 起始索引,查询条数;
案例:
查询第一页的3条数据:
select 字段名 from 表名 limit 0,3; 
查询第2页的3条数据:
select 字段名 from 表名 limit 3,3; 
查询第3页的3条数据:
select 字段名 from 表名 limit 6,3; 
注意:起始索引=(当前页码-1) * 每页显示的条数

4.DCL:定义访问权限和安全级别及创建用户

授权用户权限:
1.授权select 权限:
grant select on 数据库名.表名 to '用户名@主机名';
2.授权select,update,insert权限:
grant select,insert,update on 数据库名.表名 to '用户名@主机名';
3.授权所有权限:
grant all privileges on 数据库名.* to '用户名@主机名';
撤销用户权限:
1.撤销select 权限:
revoke select on 数据库名.表名 to '用户名@主机名';
2.撤销所有权限:
revoke all privileges on 数据库名.* to '用户名@主机名';
显示用户权限:
show grant from '用户名@主机名';

5.约束