当前位置:   article > 正文

数据库快速掌握_like '?梅%

like '?梅%

##数据库
*数据库的基本概念:
1.数据库的英文单词:DataBase 简称:DB
2.什么是数据库:用于存储和管理数据的仓库。
3.数据库的特点:1.持久化存储数据的。其实数据库就是一个文件系统
2.方便存储的管理数据。
3.是用来同一的方式操作数据库—SQL
4.常见的数据库软件:oracle :收费的大型数据库 oracle公司
MySQL :开源的免费的数据库 oracle公司
Microsoft SQL server:
*MySQL数据库软件
1.安装:
参见《MySQL基础.pdf》
2.卸载:
1.去MySQL的安装目录找到my.ini文件
复制datadir=“C:/ProgramData/MySql/”
2.卸载MySQL
3.删除C:/ProgramData目录下的MySQL文件夹
3.配置:
*MySQL服务启动
1.手动
2.cmd–>services.msc打开服务的窗口
3.使用管理员打开cmd
net start mysql:启动MySQL的服务
net stop mysql:关闭MySQL服务
*MySQL登录
1.mysql -uroot -proot
2.mysql -hip -uroot -p连接目标的密码
3.mysql --host=ip --user=root --password=连接目标的密码
*MySQL退出
1.exit
2.quit
*MySQL目录结构
1.MySQL的安装目录
配置文件my.ini
2.MySQL的数据目录
数据库:文件夹
表:文件
数据:数据
##SQL
1.什么是SQL:Structured Query Language:结构化查询语言
其实就是定义了操作所有的关系型数据库的规则。
每一种数据库操作的方式存在不一样的地方,称为“方言”。
2.SQL通用语法:
1.SQL语言可以单行或多行书写,以分号结尾。
2.可使用空格和锁紧来增强语句的可读性。
3.MySQL数据库的SQL语言不区分大小写,关键字使用大写。
4.三种注释:
*单行注释:-- 注释内容 或 # 注释内容(MySQL特有)
多行注释:/ 注释 */
3.SQL分类:
1.DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。
关键字:create,drop,alter等
2.DML(Data Manipulation Language)数据操作语言
用来对数据库中的表数据进行增删改。
关键字:insert,delete,update等
3.DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)
关键字:select,where等
4.DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。
关键字:GRANT,REVOKE等
2.R(Retrieve):查询
*查询所有数据库的名称;
*show databases;
*查询某个数据库的字符集:查询某个数据库的创建语句
show create database 数据库名称;
3.U(Update):修改
*修改数据库的字符集:
alter database 数据库名称 character set 字符集名称;
4.D(Delete):删除
*删除数据库:
drop database 数据库名称;
*判断数据库存在,再删除;
drop database if exists 数据库名称
5.使用数据库
*查询当前正在使用的数据库名称
select database();
*使用数据库:
use 数据库名称
2.操作表
1.C(Create):创建
1>.语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
。。。
列名n 数据类型n
);*注意:最后一列,不需要加逗号
数据类型:
1.int:整数类型
*age int,
2.double:小数类型
*score double(5,2)
3.date:日期,只包含年月日,yyy-MM-dd
4.datetime:日期,包含年月日时分秒 yyy-MM-dd HH:mm:ss
5.timestamp:时间错类型 包含年月日时分秒 yyy-MM-dd HH:mm:ss
*如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6.varchar:字符串类型
*name varchar(20):姓名最大20字符
2>.创建表:
create table student(
id int,
name varchar(20),
age int,
score double(4,1),
brithday date,
insert_time timestamp
);
3>.复制表:
create table 表名 like 被复制的表名;
2.R(Retrieve):查询
*查询某个数据库中所有的表名称
show tables;
*查询表结构:
desc 表名;
3.U(Update):修改
1>.修改表名
alter table 表名 rename to 新的表名;
2>.修改表的字符集
alter table 表名 character set字符集名称;
3>.添加一列
alter table 表名 add 列名 数据类型;
4>.修改列名称 类型
alter table 表名 change 列名称 修改新列名 新数据类型;
alter table 表名 modify 列名 新数据类型
5>.删除列
alter table 表名 drop 列名
4.D(Delete):删除
drop table;
drop table if exists 表名;
##DDL:操作数据库、表
1.操作数据库:CRUD
1.C(Create):创建
*创建数据库:
create database 数据库名称
*创建数据库,判断不存在,再创建:
create database if not exists 数据库名称
*创建数据库,并指定字符集:
create database 数据库名称 character set 字符集名;
*创建db4,判断是否存在,并指定字符集为gbk
create database ifnot exists db4 character set gbk;

##客户端图形化工具:SQLYog
##DML:增删改表中的数据
1.添加数据:
*语法:insert into 表名(列名1,列名2,…列名n) values(值1,值2,…值n);
*注意:1.列名和值要一一对应。
2.如果表名后不定义列名,则默认给所有列添加值
insert into 表名 values(值1,值2,…值n);
3.除了数字类型,其它类型需要使用引号(单双都可以)引起来
2.删除数据:
*语法:delete from 表名 [where 条件];
*注意:1.如果不加条件,则删除表中所有记录。
2.如果要删除所有记录:
1.delete from 表名;–不推荐使用。又多少记录就会执行多少次删除操作
2.TRUNCATE TABLE 表名;–推荐使用,效率高,先删除表,再创建一张一模一样的表
3.修改数据:
*语法:update 表名 set 列名1=值1,列名2=值2,…[where 条件];
注意:如果不加任何条件,则表中所有的记录全部修改。
##DQL:查询表中的记录
select * from 表名
1.语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
2.基础查询
1.多个字段的查询
select 字段名1,字段名2,… from 表名;
注意:如果查询所有字段,则可以使用
来替代字段列表
2.去除重复
select distinct 列名 from 表名;
select distinct 列名1,列名2 from 表名;
3.计算列:
一般可以使用四则运算计算一些列的值。(一般只会进行数值型计算)
ifnull(表达式1,表达式2):null参与运算,计算结果为null
表达式1:哪个字段需要判断是否为null
如果该字段为null后的替换值
4.起别名:
as:as也可以省略
–数学加英语成绩的总分,英语为null则为0,起别名为总分
SELECT NAME, math,english,math+IFNULL(english,0) AS 总分 FROM student;
3.条件查询:
1.where子句后跟条件
2.运算符
>,<,>=,<=,=,!=,<>不等于
&&或and或between…and
or或||或in(20,22,23);
not或!
is null和is not null
–英语成绩是null的,则select * from student where English is null
like(模糊查询):
占位符:
:单个任意字符
%:多个任意字符
–第一个字是小
SELECT * FROM student WHERE NAME LIKE ‘小%’;
–第二个字是梅
SELECT * FROM student WHERE NAME LIKE '梅%’;
–三个名字
SELECT * FROM student WHERE NAME LIKE '
_’;
–包含梅字
SELECT * FROM student WHERE NAME LIKE ‘%梅%’;
4.排序查询
*语法:order by 子句
order by 排序字段1,排序字段2,…排序方式1,排序方式2…
*排序方式:
ASC:升序(默认)
DESC:降序
SELECT * FROM student ORDER BY math ASC;–升序
SELECT * FROM student ORDER BY math DESC;–降序
*注意:如果有多个排序条件,则当前边的条件值已验视,才会判断第二条件。
5.聚合函数:将一列数据作为一个整体,进行纵向计算
1.count:计算个数 select count(name) from student;
2.max:计算最大值 select max(math) from student;
3.min:计算最小值 select min(math) from student;
4.sum:计算和 select sum(math) from student;
5.avg:计算平均值 select avg(math) from student;
*注意:聚合函数的计算,排除null值
解决方案:
1.选择不包含非空的列(主键)进行计算
2.ifnull函数
6.分组查询:
1.语法:group by 分组字段;
–按性别分组,查询男,女的数学平均分
select sex,avg(math) from student group by sex;
2.注意:
1.分组之后查询的字段,分组字段,聚合函数
2.where和having的区别?
where在分组之前进行限定,如果不满足条件,则不参与分组。
having在分组之后进行限定,如果不满足结果,则不会被查询出来
where后不可以跟聚合函数,having可以进行聚合函数的判断
7.分页查询:
1.语法:limit 开始的索引,每页查询的条数;
select * from student limit 0,3 --第1页显示3条记录
select * from student limit 3,3 --第1页显示3条记录
2.公式:开始的索引=(当前的页码-1)*每页显示的条数
3.limit是一个mysql的“方言”

##约束:
*概念:对表中的数据进行限定,保证数据的正确性,有效性,完整性。
*分类:
1.主键约束:primary key 非空且唯一
1>创建表时,添加主键约束
create table 表名(
id int primary key --给ID添加主键约束
);
2>创建表后,添加主键约束
alter table stu modify id int primary key;
3>删除主键
alter table stu drop primary key;
4>自动增长:
*概念:如果某一列是数值类型的,使用auto_increment 可以完成值的自动增长
*1>创建表时,添加自动增长
create table 表名(
ID int primary key auto_increment,
);
*2>创建表后,添加自动增长
alter table stu modify id int primary key auto_increment;
*3>删除自动增长
alter table stu modify id int;(删除了自动增长,没有删除主键)
4>注意:代表非空并且唯一
一张表只能有一个字段为主键
主键就是表中记录的唯一标识
2.非空约束:not null 值不能为空
1>创建表时添加约束
create table 表名(
name varchar(20)not null
);
2>创建表后,添加约束
alter table stu modify name varchar(20) not null;
3>删除非空约束
alter table stu modify name varchar(20);
3.唯一约束:unique 值不能重复
1>创建表时,添加唯一约束
create table 表名(
phone_number varchar(20) unique
);
2>创建表后,添加唯一约束
alter table stu modify phone_number varchar(20) unique;
2>删除唯一约束
alter table stu drop index phone_number;
3>注意:唯一约束限定的列的值可以有多个null
4.外键约束:foreign key 让表与表产生关系,从而保证数据的正确性
1>创建表时,添加外键约束
create table 表名(

外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
– constraint emp_dept_fk foreign key (dep_id) references department(id),
);
2>创建表后,添加外键约束
alter table 表名 add constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
alter table stu add constraint emp_dept_fk foreign key (dep_id) references department(id);
3>删除外键约束
alter table 表名 drop foreign key 外键名称;
– alter table employee drop foreign key emp_dept_fk;
4>级联操作
*添加级联操作
alter table 表名 add constraint 外键名称 foreign key (外键列名称)
references 主表名称(主表列名称)on update cascade on delete cascade
*分类:
1>级联更新 on update cascade
2>级联删除 on delete cascade

##数据库的设计
1.多表之间的关系
1.分类:
1.一对一:人和身份证,一个人只有一个身份证,一个身份证只能有一个人
2.一对多(多对一):部门和员工,一个部门有多个员工,一个员工只能对应一个部门
3.多对多:学生和课程,一个学生可以选择很多门课程,一个课程也可以被很多学生选择
2.实现关系:
1.一对多(多对一):部门和员工
在多的一方建立外键,指向一的一方的主键
2.多对多:学生和课程
需要借助第三张中间表,中间表至少包含两个字段,
这两个字段作为第三张表的外键,分别指向两张表的主键
3.一对一:学生和身份证
可以在任意一方添加唯一外键指向另一方的主键
2.数据库设计的范式
*概念:设计数据库是,需要遵循的一些规范,要遵循后边的范式要求,必须先尊徐前边的所有范式要求
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被
称为不同的范式,各种范式呈递次规范,越高的范式数据库的冗余越小
*分类:1.第一范式:每一列都是不可分割的原子数据项
存在问题:1.存在非常严重的数据冗余
2.数据添加存在问题,
3.数据删除存在问题
2.第二范式:在1NF的基础上,非码属性必须完全依赖于码
(在1NF基础上消除非主属性对主码的部分函数依赖)
函数依赖:
完全函数依赖:
部分函数依赖:
传递函数依赖:
码:如果在一张表中,一个属性或属性组,被其他所有属性完全依赖
3.第三范式:在2NF的基础上,任何非主属性不依赖于其他非主属性
(在2NF基础上消除传递依赖)
##数据库的备份和还原
1.命令行:
*语法:
*备份:mysqlump -u用户名 -p密码 > 保存路径
*还原:1.登录数据库
2.创建数据库
3.使用数据库
4.执行文件,source 文件路径
2.图形化工具

##多表查询
*查询语法:
select
列名列表
from
表名列表
where…
*笛卡尔积:有两个集合A,B,取这两个集合的所有组成情况
要完成多表查询,要消除无用的数据
*多表查询的分类:
1.内连接查询:
1.隐式内连接:
select
t1.name,
t1.sex,
t2.name
from
emp t1,
dept t2
where
t1.‘dept_id’=t2.‘id’;
2.显式内连接:
*语法:select 字段列表 from 表名1 inner join 表名2 on 条件
select * from emp inner join dept on emp.‘dept_id’=dept.‘id’
3.内连接的思路:
1.从哪些表中查询数据
2.条件是什么
3.查询哪些字段
2.外连接查询:
1.左外连接:
语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;
select t1.
,t2.‘name’ from emp t1 left join dept t2 on t1.‘dept_id’=t2.‘id’;
*查询的是左表所有数据以及其交集部分
2.右外连接:
语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;
select t1.
,t2.‘name’ from emp t1 right join dept t2 on t1.‘dept_id’=t2.‘id’;
3.子查询:
*概念:查询中嵌套查询,称嵌套查询为子查询
*语法:select * from emp where emp.‘salary’ = (select max(salary) from emp);
*子查询不同情况:
1.子查询的结果是单行单列的
*子查询作为条件,使用运算符去判断.>,<等
select * from emp where emp.salary < (select avg(salary) from emp);
2.子查询的结果是多行单列的
*子查询作为条件,使用运算符in来判断
select * from emp where dept_id in (select id from dept where name ='财务部’or name=‘市场部’);
3.子查询的结果是多行多列的
*子查询可以作为一张虚拟表参与查询
select * from dept t1,(select * from emp where emp.‘join.date’>‘2011-11-11’) t2
where t1.id = t2.dept id;

##事务
1.事务的基本介绍:
1.概念:如果一个包含多个步骤的业务操作,被事务管理,那么,这些操作要么同时成功,要么同时失败
2.操作:1.开启事务:start transaction
2.回滚事务:rollback
3.提交事务:commit
3.MySQL中事务默认自动提交:
事务提交的两种方式:
手动:mysql就是自动提交
一条DML语句会自动提交一次事务
自动:需要先开启事务
修改事务的默认提交方式:
查看事务的默认提交方式:select @@autocommit;-- 1 代表自动提交,0 代表手动提交
修改默认提交方式:set @@autocommit = 0;–修改为手动提交
2.事务的四大特征:
*原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
*持久性:当事务提交或回滚后,数据会持久化的保存数据
*隔离性:多个事务之间,相互独立
*一致性:事务操作前后数据总量不变。
3.事务的隔离级别:
*概念:多个事务之间是相互独立的,但是如果多个事务操作同一批数据,则会引发一些问题
设置不同的隔离级别就可以解决这些问题。
*存在问题:
1.脏读:一个事务读取到另一个事务中没有提交的数据
2.不可重复读(虚读):在同一个事务中,两次读取到的数据不一样
3.幻读:一个事务操作数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
*隔离级别:
1.read uncommitted:读未提交
产生问题:脏读,不可重复读,幻读
2.read committed:读已提交
产生问题:不可重复读,幻读
3.repeatable read :可重复读
产生问题:幻读
4.serializable:串行化
可以解决所有问题
*注意:隔离级别从小到大安全性越来越高,但效率越来越低
*数据库查询隔离级别:select @@tx_isolation
*数据库设置隔离级别:set global transaction isolation level 级别字符串
##DCL:
*SQL分类:
1.DDL:操作数据库和表
2.DML: 增删改表中的数据
3.DQL: 查询表中数据
4.DCL: 管理用户,授权
*DBL: 数据库管理员
*DCL:管理用户,授权
1.管理用户:
1.添加用户:
create user ‘用户名’@‘主机’ identified by ‘密码’;
2.删除用户:
drop user’用户名’@‘主机’ ;
3.修改用户密码:
1>.update user set password = password(‘新密码’) where user =‘用户名’;
2>.set password for ‘用户名’@‘主机名’=password(‘新密码’);
mysql忘记了root的密码?
1.管理员身份cmd–>net stop mysql 停止mysql服务
2.启动无验证方式启动mysql服务:mysqld --skip-grant-table
3.打开新的cmd窗口直接输入mysql命令,敲回车,即可登录
4.use mysql
5.update user set password = password(‘新密码’) where user =‘用户名’;
6.关闭两个窗口
7.打开任务管理器,手动结束mysqld.exe的进程
8.启动mysql服务
9.使用新密码登录
4.查询用户:
use mysql;
select * from user;
2.授权管理:
1.查询权限:show grants for ‘用户名’@‘主机’ ;
2.授予权限:grant 权限列表 on 数据库.表名 to’用户名’@‘主机’;
所有通配符:grant all on . to ‘用户名’@‘主机’;
3.撤销权限:revoke 权限列表 on 数据库.表名 from’用户名’@‘主机’;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/1019000
推荐阅读
相关标签
  

闽ICP备14008679号