一、一些命令
service mysqld start服务器端开启(需要切换到管理员状态)
mysql -u root -p(-u后跟用户名 -p后跟密码)
show databases;打印库的目录
use库名; 选择库
show tables;打印表的目录
desc表名; 查看表的字段信息
select user,host,password from user;
system clear;清屏
二、SQL结构化查询语言
1、DDL 数据库定义语言
针对结构(库、表)的增删改查 create drop alter show
有关库的增删改查
(1)创建库
create database [if not exists] 库名;
避免在创建中因为库重名而导致客户端中断的错误。如果不存在则创建,如果存在就不再创建
(2)删除库
drop database [if exists] 库名;
(3)查看库
show create database 库名;
有关表的增删改查
(1)创建表
例如创建一个学生表:
学生表
学号
姓名
年龄
性别
约束
(约束包含有:主键、外键、唯一、非空、默认 )
Stu
id varchar(10) primary key
name varchar(10) not null
age int
sex enum("man","woman") default "man"
创建表stu
create table stu(
id varchar(10) primary key COMMENT "学生学号",
name varchar(10) not null COMMENT "学生姓名",
age int COMMENT "学生年龄",
sex enum("man","woman") default "man" COMMENT "学生性别"
);
表中应该包含有:字段名称、字段类型、字段约束、字段注释
char(10) 与varchar(10)的区别:
"lisi" char(10) 10 固长
varchar(10) 5 变长
(2)删除表
drop table stu;
(3)修改表
1.修改字段类型 modify
alter table stu modify name varchar(20);
2.修改字段名称 change
alter table stu change id sid varchar(10);
3.添加新的字段 add first 或者after
alter table stu add score float;
alter table stu add score1 float after id;
4.删除一个字段 drop
alter table stu drop score;
5.修改表名 rename
alter table stu rename student;
(4)查看表
show create table表名;//查看表的创建信息
desc 表名 ;//查看表的字段信息
2、DML 数据操作语言 针对数据的增删改查
(1)插入数据 insert
"001", "zhangsan", 19, "man"
"002", "lisi", 20, "woman"
"003", "wangwu", 18, "man"
"004", "zhaoliu",17, "woman"
"005", "maqi", 21, "man"
insert into stu values("001", "zhangsan", 19, "man");
或者insert into stu(id,name,age,sex) values("001", "zhangsan", 19, "man"),(.......);
insert into stu(id,name,sex) values("002","lisi","woman"),(........),(.......);
a.小批量的插入 replace
insert into stu values("003", "wangwu", 18, "man"),("004", "zhaoliu",17, "woman"),("005", "maqi", 21, "man");
b.大批量插入 load source
insert replace
insert id primary key "001"
"001","gaoxin",20,"woman"; X
replace类似于delete+insert insert
"001","gaoxin",20,"woman"; V
(2)删除数据
delete from stu;删除stu中所有数据
delete from stu where name = "zhangsan";
(3)修改数据
update stu set age = 19;修改stu中的所有年龄为19
update stu set age = 19 where id = "002";
(4)查询数据
单表查询
a.普通查询
select * from stu; *代表所有 //查询stu表中的所有内容
select * from stu where id = "001"; //查询stu表中id为001的学生的所有数据
select id,name,age from stu; //查询stu中的 所有学生的id,name,age
b.去重查询 distinct
select distinct age from stu;
c.排序查询 order by asc升序 desc 降序
select distinct age from stu order by age asc;
d.分组查询 group by
select id,SUM(score) as all_score //as后加名称 as可省略,as就是起个别名
from result
group by id; //按照学生的id分组,查询他们的成绩和
少用全连接 c.联合查询 union自带去重unionall不去重再创建一个teacher表,如图selectid,name,age,sexfromstuunionselecttid,tname,t
ectname,scorefrom(selectid,namefromstuwhereage<18)a //从这个子查询把左表的范围缩小leftjoin //左外连接查询(selectid,sc
多表查询
再创建一个表result,下图上方时stu学生表,下方是result学生成绩表
义解析,解析完成后传输给SQL优化器进行优化,生成一个执行计划。从MySQL中自带的缓存开始查询,如果查找到了,则缓存通过SQLAPI传递给连接池返回给客户端;如果没有查找到,则通过SET从底层磁盘开
a.等值查询 笛卡尔乘积 穷举-效率太低 一般不用
例如:查询年龄未满18周岁的学生的不及格成绩
select name,score
from stu,result
where stu.id = result.id and age < 18 and score < 60;
b.连接查询
先缩小范围,再进行查询
1.外连接查询
1.1左外连接查询 (用得最多)
范围缩小后,左表中的数据必须全部存在,右表如果没有这个数据就补NULL
select name,score
from
(select id,name from stu where age < 18) a //从这个子查询把左表的范围缩小
left join //左外连接查询
(select id,score from result where score < 60) b //从这个子查询把右表的范围缩小
on a.id = b.id; //通过这个条件将左右表匹配
再向stu表中插入一条数据学生编号006,小于18岁,但是他在成绩表中没有数据
当再一次进行查询时,如下图显示出了"kaixin" NULL 。这就是范围缩小后,左表中的数据必须全部存在,右表如果没有这个数据就补NULL。
select name,score
from
(select id,name from stu where age < 18) a
left join
(select id,score from result where score < 60) b
on a.id = b.id
where score is not null; //分数不为空
1.2右外连接查询
:redo.log undo.log三、MySQL1、存储引擎 一个数据文件的存取机制 插件 存储引擎不一样,则存取机制也不一样MyISAM InnoDB MEMORY版本5.5以下默认的是My
范围缩小后,右表中的数据必须全部存在,左表如果没有这个数据就补NULL
select name,score
from
(select id,name from stu where age < 18) a
right join //右外连接查询
(select id,score from result where score < 60) b
on a.id = b.id;
select name,score
from
(select id,name from stu where age < 18) a
right join
(select id,score from result where score < 60) b
on a.id = b.id
where name is not null; //名字不为空
少用全连接 c.联合查询 union自带去重unionall不去重再创建一个teacher表,如图selectid,name,age,sexfromstuunionselecttid,tname,t
ectname,scorefrom(selectid,namefromstuwhereage<18)a //从这个子查询把左表的范围缩小leftjoin //左外连接查询(selectid,sc
1.3全连接查询
机制掌握SQLServer2005的身份验证模式理解数据库用户帐户的基本概念理解角色的概念3.实验步骤:按实验内容要求完成各项操作根据题目要求给出解决方案提交实验报告4.实验内容:定义登录l
保证左右两边数据都存在
表中没有数据当再一次进行查询时,如下图显示出了"kaixin"NULL。这就是范围缩小后,左表中的数据必须全部存在,右表如果没有这个数据就补NULL。selectname,scorefrom(sele
select name,score
from
(select id,name from stu where age < 18) a
full join
(select id,score from result where score < 60) b
on a.id = b.id;
2.内连接查询
testusetage=19whereid="002";(4)查询数据单表查询a.普通查询select*fromstu; *代表所有 //查询stu表中的所有内容select*fromstuwhere
只匹配满足条件的,只要不满足就不要了
select name,score
from
(select id,name from stu where age < 18) a
inner join
(select id,score from result where score < 60) b
on a.id = b.id;
用的频率:左外连接、内连接、右外连接、很少用全连接
c.联合查询union 自带去重
union all 不去重
再创建一个teacher表,如图
select id,name,age,sex from stu
union
select tid,tname,tage,tsex from teacher;
3、DCL 数据库控制语言 针对权限管理
create user "cy1706"@localhost identified by "123"; //创建本机下的用户cy1706 密码123
退出 Mysql 用exit 或者 quit
%代表远程
(1)授权 grant
grant 操作 on 库 to 用户;
grant select on CY1706.* to cy1706; //授予cy1706用户 查看CY1706库所有内容的权限
flush privileges; //刷新权限
(2)回收权限 revoke
revoke 操作 on 库 from 用户;
revoke select on CY1706.* from cy1706; //回收cy1706用户 查看CY1706库所有内容的权限
谁赋予的权限,谁可以回收,不允许出现反祖的现象
root赋予所有权限给u1,u1 赋予所有权限给u2,u2赋予所有权限给u3,u3不可以回收u2的权限。谁赋予的权限,谁可以回收,不允许出现反祖的现象。
MySQL下的日志文件:redo.log undo.log
三、MySQL
1、存储引擎 一个数据文件的存取机制 插件 存储引擎不一样,则存取机制也不一样
,则存取机制也不一样MyISAM InnoDB MEMORY版本5.5以下默认的是MyISAM存储引擎,版本5.5以上认的是InnoDB存储引擎showengines;//显示存储引擎2、索引3、
MyISAM InnoDB MEMORY
版本5.5以下默认的是MyISAM存储引擎,版本5.5以上认的是InnoDB存储引擎
show engines; //显示存储引擎
2、索引
该包含有:字段名称、字段类型、字段约束、字段注释char(10)与varchar(10)的区别: "lisi" char(10) 10 固长 varchar
3、事务
池中一个进程与他连接。连接之后通过SQLAPI传输给SQL解析器进行语法、词法、语义解析,解析完成后传输给SQL优化器进行优化,生成一个执行计划。从MySQL中自带的缓存开始查询,如果查找到了,则缓存
A 原子性
C 一致性
I 隔离性
D 持久性
客户端向服务器端发送一个指令,MySQL服务端的连接池中一个进程与他连接。连接之后通过SQL API传输给SQL解析器进行语法、词法、语义解析,解析完成后传输给SQL优化器进行优化,生成一个执行计划。从MySQL中自带的缓存开始查询,如果查找到了,则缓存通过SQL API传递给连接池返回给客户端;如果没有查找到,则通过SET从底层磁盘开始查询,查找到了返回给SQL API。每一次的活动都会有log日志来记录