MySQL
Windows安装
-
下载mysql包链接
-
配置环境变量(路径根据自己的更改)
-
新建一个MYSQL_HOME变量为D:\mysql8.0.28
在Path中添加%MYSQL_HOME%\bin
-
-
生成data文件(路径根据自己的更改)
D:\mysql8.0.28\bin> mysqld --initialize-insecure --user=mysql
-
安装MySQL
D:\mysql8.0.28\bin>mysqld -install
-
启动服务
D:\mysql8.0.28\bin>net start MySQL MySQL 服务正在启动 . MySQL 服务已经启动成功。
-
登录MySQL
D:\mysql8.0.28\bin>mysql -uroot -p Enter password: #首次登录无密码直接回车即可
-
设置(修改)root用户密码
mysql> use mysql Database changed mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '000000';
Query OK, 0 rows affected (0.00 sec)
mysql变量
mysql常用命令
退出mysql
mysql> exit
查看mysql中有哪些数据库
mysql> show databases;
选择使用数据库
mysql> use test;
创建数据库
mysql> create database cstest ;
查询数据库中的表
mysql> show tables;
导入数据库
mysql> sourve 路径
查看mysql数据库的版本号
mysql> select version0;
查看当前所在的数据库
mysql> select database();
查看创建表的语句
SHOW CREATE table student;
查看创建视图的语句
SHOW CREATE VIEW v_student;
查看所有表
show tables;
查看表的信息以及参数解释
show TABLE STATUS like 'student';
SQL语句分类
DQL:
数据查询语言(凡是带有select关键字的都是查询语句
select.....)
查看数据库表中的所有字段数据
mysql> select * form emp;#emp为表名
查询表的一个字段数据
select 字段名 form 表名;
查询多个字段使用逗号隔开
select 字段名,字段名 form 表名;
只看表的结构
mysql> desc 表名;
SELECT
按条件查询 WHERE
select 字段名 form 表名
where 条件; #条件例如(sal = 500)
# 字段名为* 则列出所有字段
#多个字段名 用逗号隔开
给查询的列起别名 AS
注意:只是将显示的结果显示别名
select 字段名 as 字段别名 form dept;
#起别名如果有空格 则用单 引号括起来
#as可以省略
都有哪些条件?
= 等于 =!(<>)不等于 <=小于等于 >大于 >=大于等于
between....AND 范围查询(类似于 ">= 且 <=")
XOR 异或
模糊查询 LIKE
select sName,sex,deptName from student
where sName like '杨__'
select sName, sNo,deptName from student
where sName like '%维%'
#"_"用于匹配任意一个字符
#"%"用户匹配0个或任意多个字符
判断空值(null)
select * from student
where remark is null; #remark 为字段名
对查询结果进行排序 ORDER BY
普通排序
select * from student
ORDER BY birthday DESC;
#DESC 为降序 ASC为升序
#排序可以对多个字段进行,如下(字段之间用逗号隔开)
select * from student
ORDER BY deptName ASC , birthday DESC
转换字符集排序 convert
select * from student
order by convert(deptName using gbk)ASC;
#将字段名为deptName的数据转换成gbk字符 进行排序
限制查询返回记录行数 LIMIT
select * from student
ORDER BY birthday ASC
LIMIT 5
limit 6 , 5
#6表示初始位置,5为限制返回的行数
过滤查询的重复记录 DISTINCT
SELECT DISTINCT deptName from student;
多表连接查询
下列语句中stu.deptid=dept.id是查询条件
内连接多表查询
SELECT * FROM stu
INNER JOIN dept ON stu.deptid=dept.id
#也可以使用别名
select COUNT(grade) 学生人数,AVG(grade) 平均数,max(grade) 最高分,min(grade) 最低分 FROM student stu
inner join score s on s.sId=stu.id
inner join course c on c.id=s.cId and c.cNo="01001"
外连接多表查询
左外连接
select * FROM stu as s
left join dept as d ON s.deptid=d.id····················
右外连接
select * FROM stu as s
RIGHT join dept as d ON s.deptid=d.id
高级查询
avg() 求平均数
max() 求最大数
min() 求最小数
sum() 求总和
count(*) 统计记录总数
count(字段名) 统计非空字段值的记录总数
count(dintinct 字段名) 统计去除字段重复值非空字段值的记录总数
分组汇总
select id,avg(grade) form stu
group by sid
#可以使用having对汇总的数据进行筛选
select cNo 课程编号,cName 课程名称,COUNT(cId) 选修次数,avg(grade) 平均分 FROM score
inner join course c on c.id=score.cId
GROUP BY cId
HAVING 选修次数 > 1
ORDER BY 选修次数 DESC
子查询的返回值为单列单值的嵌套查询
#较为简单语句
select * FROM student
WHERE sex=(
SELECT sex FROM student
WHERE sNo="1309122501"
)
#较为复杂语句
SELECT * FROM student stu
inner join score s on s.sId=stu.id
inner join course c on c.id= s.cId
WHERE c.cNo="01001" AND grade = (
SELECT max(grade) from score s
join course c on c.id= s.cId AND c.cNo="01001"
)
子查询的返回值为单列多值的嵌套查询
单列多值则用关键字IN 或 NOT IN
select * from student stu
where id IN (
select sId FROM score s
join course c on c.cNo='01001' AND s.cId=c.id
)
DML:
数据操作语言(凡是对表当中的数据进行增删改的都是DML)
insert 增
delete 删
update 改
这个是操作表中的数据data
INSERT
增加字段数据
INSERT INTO seller(saleNo, saleName, sex, birthday, hireDate, address, telephone)
VALUES ('S01', '王强', '男', '1975-12-08', '2002-05-01', '蓝色港湾42-12', '0519-85150900'),
('S02', '付芳芳', '女', '1982-02-19', '2008-08-14', '燕阳花园53-4', '0519-85150901'),
('S03', '李芳', '女', '1983-08-30', '2008-04-01', '富都小区252-16', '0519-85150902');
查询另一个表并导入表中数据
insert INTO stu2(sNo, sName, sex, birthday, deptName)
SELECT sNo, sName, sex, birthday, deptName FROM student
WHERE sex = "女"
DELETE
删除字段数据 DELETE
DELETE FROM student
WHERE sNo=1308013102;
UPDATE
修改表字段数据 SET
UPDATE customer
SET address='晋陵北路150号', zipCode=213012
WHERE customerNo='C04';
查询批量修改数据
UPDATE score
SET grade=grade*0.95
WHERE sId IN (
SELECT id FROM student
WHERE deptName="软件131"
)
#查询的主表与子表不能一样,如果要一样的话如下写法(双层子查询)
UPDATE score
SET grade=grade*0.95
WHERE grade in (
SELECT grade FROM (SELECT grade FROM score
JOIN student stu ON stu.id=sId AND stu.deptName="软件131") AS temp
)
DDL:
数据定义语言
凡是带有create、drop、alter的都是DDL
DDL主要操作的是表的结构。不是表中的数据
create:新建,等同于增
drop:删除
alter:修改
这个增删改和DML不同,这个主要是对表结构进行操作
切换数据库 use
use sales
CREATE
添加表
create database test
default character set utf8
default collate utf8_general_ci;
添加表并添加字段
CREATE TABLE seller(
id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY key,
saleNo VARCHAR(20) NOT NULL,
saleName CHAR(10) NOT NULL,
sex CHAR(10) NOT NULL,
birthday DATE NOT null,
hireDate DATE NOT NULL,
address VARCHAR(30) not null,
telephone VARCHAR(20) NOT NULL
);
#AUTO_INCREMENT 自动递进
#UNSIGNED 无符号
#PRIMARY key 主键
#也可以添加外键
CREATE TABLE student(
id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY,
name VARCHAR(10) NOT NULL,
sex VARCHAR(5) NOT NULL,
did INT UNSIGNED NOT NULL,
FOREIGN KEY(did) REFERENCES dept(id)
ON UPDATE CASCADE ON DELETE CASCADE
);
创建视图
create view v_stu_grade as
SELECT sNo,sName,sex,deptName,cName,grade FROM student stu
JOIN score s on s.sId=stu.id
JOIN course c ON c.id=s.cId
with CHECK OPTION;
with local check option
#local是修改检测选项 选项有:
LOCAL #只检查视图中的限制
CASCADED #检查表中的限制
空白 #不检查限制
安全性:
只允许创建者修改视图
修改视图
CREATE OR REPLACE # 或者换成ALTER
VIEW v_2
as
select 语句
添加索引方法一
CREATE UNIQUE INDEX ix1
ON seller(saleNo)
#添加ix1索引并应用在seller表中的saleNo字段中
复制表
create table newStudent
AS
SELECT sNo as stuNo,sName as stuName,sex,birthday,deptName FROM student
WHERE sex="女"
创建储存过程
存储过程可以调用存储函数,存储函数不能调用存储过程 (可以理解为 存储过程为私有函数,存储函数为公有函数)
CREATE PROCEDURE p_4(in var1 INT, OUT var2 INT)
BEGIN
declare c int; #添加一个局部变量
SET var1 = 10; #修改变量值
SELECT var1 INTO var2;
END
#SELECT var1 INTO var2; 将输出值传给var2变量
#in 输入变量 out 输出变量(传出变量)INT 变量数据类型
创建存储函数
CREATE function fun_sum(n FLOAT)
RETURNS FLOAT
DETERMINISTIC
BEGIN
DECLARE sums FLOAT DEFAULT 0;
DECLARE i INT DEFAULT 1;
WHILE i <= n DO
SET sums = sums+(1/i);
SET i = i + 1;
END WHILE;
RETURN sums;
END;
流程控制语句
IF语句
#语法一
if 条件表达式 then
执行语句
else
执行语句
end if;
#语法二
if 条件表达式 then
执行语句
elseif
执行语句
end if;
#语法三
if 条件表达式 then
执行语句
end if;
CASE语法
类似于三元计算
CASE
WHEN 条件表达式 THEN 结果
WHEN 条件表达式 THEN 结果
......
ELSE 结果
END CASE AS 别名
WHILE语句
类型与for循环
WHILE 条件表达式 DO
执行语句
END WHILE;
REPEAT语句
REPEAT
执行语句
UNTIL 条件表达式
END REPEAT;
#当条件表达式成立 循环
LOOP语句和LEAVE语句
LOOP必须要和LEAVE配合使用,不然会是死循环
[label:]LOOP
执行语句
if 条件表达式 then
LEAVE [label];
end if;
END LOOP [label]
ITERATE语句
ITERATE语句用于跳出循环,ITERATE后面的语句不再执行
ITERATE [lable];
游标
声明游标
DECLARE <游标名称> CURSOR FOR <select语句>
例,如下:
DECLARE curName CURSOR FOR
SELECT sName FROM student
JOIN score s ON s.sId=student.id
JOIN course c ON s.cId=c.id AND c.cNo=cNos;
打开游标
OPEN <游标名称>
读取游标
FETCH <游标名称> INTO <变量1>[,<变量2>] #[]中的可省略
绑定游标结束标志
DECLARE CONTINUE HANDLER FOR NOT found <sql语句>
例如下:
DECLARE CONTINUE HANDLER FOR NOT found set done = TRUE;
关闭游标
CLOSE <游标名称>
DROP
删除表
drop TABLE student;
删除索引
DROP INDEX ix4 ON customer;
#把customer中ix4索引删除
删除视图
drop view v_2
ALTER
修改表的字符集(这里修改的是gb2312)
alter database test
default character set gb2312;
添加字段 add
ALTER table student
add entryDate DATE AFTER birthday;
#在birthday后面添加一个字段entryDate
修改字段数据类型 MODIFY
ALTER TABLE student
MODIFY entryDate TIMESTAMP;
#将entryDate的数据类型修改成TIMESTAMP
修改字段名 CHANGE
alter TABLE student
CHANGE entryDate rxDate DATETIME
#修改字段名entryDate为rxDate 并将数据类型修改成DATETIME
删除字段 DROP
alter table student
DROP rxDate;
添加字段默认值
ALTER TABLE seller
ALTER sex SET DEFAULT '男';
#将sex字段的默认值设置为“男”
添加索引方法二
ALTER TABLE seller
ADD UNIQUE ix1(saleNo),
ADD INDEX ix2(saleName);
#添加一个UNIQUE唯一索引 应用在saleNo字段上
#UNIQUE唯一索引
#INDEX 普通缩影
添加复合索引
ALTER TABLE orderdetail
ADD UNIQUE ix6(orderId,productId);
#添加一个ix6唯一复合索引
添加外键约束 FOREIGN KEY
ALTER TABLE orders
ADD CONSTRAINT fk_2
FOREIGN KEY (customerId) REFERENCES customer(id)
ON UPDATE RESTRICT ON DELETE RESTRICT;
#orders 为表名
#customerId是外键 customer中id字段为主键
# RESTRICT 意思是不执行任何操作
# CASCADE 级联 更新或删除父表中的行,子表也随之更新或者删除
#ON UPDATE RESTRICT 修改数据时操作
#ON DELETE RESTRICT; 删除数据时操作
删除外键约束
ALTER TABLE orders
drop foreign key fk_2;
#删除外键约束fk_2
修改视图
ALTER
VIEW v_2
as
select 语句 #如下
#select `student`.`id` AS `vid` from `student`
TCL:
事务控制语言
包括:
事务开始:begin; 事务提交:commit;
事务回滚:rollback;
事务开始
begin;
事务提交
commit;
事务回滚
rollback;
DCL:
数据控制原因
例如:授权grant、撤销权限revoke....
查看用户权限
#查看cs5用户权限
show grants for cs5@localhost;
授权GRANT
给用户授权
grant all on *.* to cs4@localhost //给用户授权所有表的所有权限
grant select on stuinfo.* to cs4@localhost //给cs4用户授权在stuinfo数据库中所有表的select查询权限
撤销权限REVOKE
//撤销用户cs4对stuinfo中所有表的查询权限
revoke select on stuinfo.* from cs4@localhost
创建用户
create user mysqld_monitor@localhost identified by "123456"
文章评论