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 '用户名@主机名';