数据库笔记链接
1.数据库的基础数据类型
1.1字符类型
char类型:固定长度的内容,效率高。存储空间范围(1-2000)字节。
varchar类型:动态长度的字符类型,存储空间范围(1-4000)字节。
1.2数值类型
1.3日期类型
2.SQL基础语句
2.1 DDL-------------数据定义语言
2.1.1 create --- 创建语句
(1)创建数据库
1 | create database 数据库名;
(2)创建表
1 | create table 表名 (字段 字段类型);
例如创建一个员工类的信息表
create table emp(
id int comment '编号',
workno varchar(10) comment '工号',
name varchar(10) comment '姓名',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
idcrard char(18) comment '身份证号',
entrydate date comment '入职时间'
) comment '员工信息表'; -- 创建表
-- comment + 文字信息是属于注释,在查看表结构的时候会一起输出
2.1.2 alter --- 表操作语句
添加字段
alter table 表名 add 字段名 数据类型 [comment 注释][约束];
修改数据类型
alter table 表名 modify 字段名 新数据类型;
修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 数据类型 [comment 注释][约束];
修改表名
alter table 旧表名 rename to 新表名;
删除表
drop table [if exists] 表名;
删除指定表,并重新创建该表
truncate table 表名;
2.1.3 drop -- 删除语句
删除数据库或表
drop database 数据库名;
drop table 表名;
2.1.4其他操作
使用数据库
use 数据库名;
查询数据库有那些表
select database();
查询创建表的语句
show catate table 表名;
2.2 DML-------------数据操纵语言
2.2.1insert --- 插入语句
insert into 表名(字段名1, 字段名2...) values(值1,值2...),(值1,值2...);
insert into 表名(不指定字段名) values(所以字段值);
2.2.2update --- 更新(修改)语句
update 表名 set 字段1 = 值1, 字段2 = 值2 [where 条件]; -- 在不加where的情况下是全部修改
2.2.3delete --- 删除语句
delete from 表名 [where 条件];
2.3 DQL-------------数据查询语言
查询关键字select
(1)基本查询信息
select 字段1,字段2... from 表名;
-- 查询所有字段
select * from 表名;
-- 对于查询的信息设置别名
select 字段名1 as 别名1, 字段2 as 别名2... from 表名; -- 也可以不加as,加上明显易懂
-- 去除重复记录
select distinct 字段列表 from 表名; -- 查询多个字段时仅删除所以信息都相等的两条信息
(2)条件查询(where)
select 字段列表 from 表名 where 条件列表;
(3)聚合函数
select 聚合函数(字段列表) from 表名;
-- 例如求student表中学生的平均年龄
selsect avg(age) from student;
-- 求最大年龄
select max(age) from student;
-- 统计学生数量
select count(*) from student;
-- 使用聚合函数时是不统计null的
-- 与前面所说内容结合
select avg(age) from student where class = '大数据3班';
-- 即计算大数据3班中同学的平均年龄
(4)分组查询(group by 、 having)
select 字段列表[聚合函数] from 表名 [where 条件] group by 分组字段名 [having 分组过后的过滤条件]
--> where 和 having的区别
--> 1.执行时机不同:where是分组之间进行过滤筛选, 不满足where条件就不参与分组; 而having是分组之后进行过滤;
--> 判断条件不同:where不能对聚合函数进行判断, 而having可以;
--> 例如查询学生男女数量
select count(*) from student group by gender;
--> 按性别分别,查询男女生评价年龄
select avg(age) from student group by gender;
--> 查询年龄小于20岁的学生,按班级分组,获取学生数量大于等于10的班级
select class, count(*) from student where age < 20 group by class having count(*) >= 10;
(5)排序查询(order by)
select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2...;
--> 排序方式
--> asc 升序(默认)
--> desc 降序
--> 如果是多字段排序,当第一个字段值相同时才会根据第二个字段进行排序。
--> 即前面的字段排好序之后再根据后面的字段排序。
--> 例如:根据年龄对学生升序排序
select * from students order by age asc;
--> 倒序 select * from students order by age desc;
-- 根据年龄对学生升序排序,再按照班级进行降序排序
select * from students order by age asc, class desc;
(6)分页查询(LIMIT)
select 字段列表 from 表名 LIMIT 起始索引, 需要查询的记录条数;
--> 起始索引从0开始, 起始索引 = (查询页码 - 1) * 每页查询记录条数。
--> 分页查询是数据库的方言, 不同的数据库有不同的实现, MySQL中的是LIMIT。
--> 查询第一页的数据起始索引0可以省略, 直接简写成limit 10;
2.4 DCL-------------数据控制语言
(1)查询用户
use mysql; --> 使用数据库
select * from user; --> 查询所有的账号密码
(2)创建用户
create user '用户名'@'主机名' IDENTIFIED BY '密码';
(3)修改用户密码
alter user '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
(4)删除用户
drop user '用户名'@'主机名';
例:
-- 创建用户 itcast,只能在当前主机localhost访问,密码123456
create user 'itcast'@'localhost' identified by '123456';
--创建用户itcast 可以在任意主机访问,密码123456
create user 'itcast'@'%' identified by '123456'; --> %是占位符,可以指定任意数据匹配
-- 修改itcast的密码为1234
alter user 'itcast'@'locast' identified with mysql_native_password by '1234';
-- 删除itcast@localhost用户
drop user 'itcast'@'localhost';
(5)权限控制
-- 查询某个账号的权限
show grants for '用户名'@'主机名';
-- 授予权限
grant 权限列表 on 数据库名,表名 to '用户名'@'主机名'; -- 可以替换成*表示全部;
-- 撤销权限
revoke 权限列表 on 数据库名,表名 from '用户名'@'主机名';
例:
-- itcast表示主机, student 表示数据库
-- 查询
show grants for 'itcast'@'localhost';
-- 授予权限
grant all on * student.* to 'itcast'@'localhost'; -- 给这个用户的授予student数据库所有表的所有权限
-- 撤销权限
revoke all on student.* from 'itcast'@'localhost'; -- 撤销这个用户在student数据库所有表的所有权限