vlambda博客
学习文章列表

3数据库管理系统mysql操作基础

-datagrip连接工具使用

数据库管理系统

https://www.mysqlzh.com/

  1. 数据库类型:(了解)

关系型数据库--数据最终存储在磁盘

sql server #收费

oracle #收费

mysql mariadb #开源免费的

postgresql   #免费的

非关系型数据库--

缓存数据库--数据存储在内存上

mongodb #海量的数据 ,文档型

redis #键值型

搜索引擎--

elasticsearch #分词搜索殷勤

  1. 安装运行:(了解

service mysqld status

                       

           3数据库管理系统mysql操作基础            

  1. 连接:(熟练

datagrip安装

           3数据库管理系统mysql操作基础                        3数据库管理系统mysql操作基础                        3数据库管理系统mysql操作基础                        3数据库管理系统mysql操作基础                        3数据库管理系统mysql操作基础                        3数据库管理系统mysql操作基础            

           3数据库管理系统mysql操作基础            

mysql启动

service mysqld start  #启动mysqld服务

service  mysqld status  #查看mysqld服务运行状态

netstat -aon | grep 3306  #查看mysqld运行端口

服务防火墙添加3306

firewall-cmd --add-port=3306/tcp  --permanent

service firewalld restart

datagrip连接            3数据库管理系统mysql操作基础                        3数据库管理系统mysql操作基础                        3数据库管理系统mysql操作基础            

  1. datagrip使用过程(熟练

           3数据库管理系统mysql操作基础            

  1. MYSQL数据库sql语法(熟悉

  • 类别

ddl 操作库结构表结构的---create 、drop、alter...(熟悉

dcl 操作权限、事务控制 ---- grant、commit、roll back、save point....(了解

dml 操作数据的增删改----insert 、 delete、update(熟练)

固定字符串char 与 可变字符串varchar的区别::固定字符串分配的实际空间是固定的,可变字符串是由实际的字符数确定,比如,声明了char(8),那么如果你写入不足8个字符,也会实际分配8个字符的实际空间,声明的是varchar(8),写入不足8个字符,分配空间依据实际字符数确定

dql 操作数据查-----select(精通

  • DDL语句(创表熟悉,其它了解

#数据库


CREATE DATABASE `数据库名` CHARACTER SET `utf8`;

创建库

DROP DATABASE `数据库名`;

删除库

SHOW DATABASES;

查库

use `数据库名2`

切换数据库



#数据表


CREATE TABLE `表名`( 列名  数据类型 , 列名  数据类型);

创表

CREATE TABLE `表名`( 列名  数据类型  not null);

设置非空属性后,必须手工插入数据

CREATE TABLE `表名`( 列名  数据类型  uniqe key);

唯一键,列中的数据不能重复

CREATE TABLE `表名`( 列名  数据类型 , uniqe key( 列名));

CREATE TABLE `表名`( 列名  数据类型 not null  uniqe key);

非空且唯一

CREATE TABLE `表名`( 列名  数据类型 primary key);

主键(主码)非空且唯一

CREATE TABLE `表名`( 列名  数据类型 DEFAULT 1);

设置默认值

# 设置备注

create table demo08(

   d1 int not null default 1 COMMENT '编号',

   d2 int primary key comment '年龄'

) COMMENT = '这是演示comment的表';

备注说明下

# 设置字符集

create table demo12(

   d1 int not null default 1 COMMENT '编号',

   d2 int primary key comment '年龄'

) engine = 'myisam' COMMENT = '这是演示comment的表' charset = 'utf8';

设置字符集

# 复合主键

create table demo13(

   i1 int,

   i2 int,

   primary key (i1,i2)

);

复合主键

# 外键 ,demo15的列i2里的数据参照表demo16中的列d2

create table demo15(

   i1 int,

   i2 int,

   foreign key (i2) references demo16(d2)

);

create table demo16(

   d1 int,

   d2 int primary key

);

外键

DESC 表名;

DESCRIBE 表名;

查看表结构

ALTER TABLE 表名 MODIFY 列名 数据类型;

修改表结构总的列,更换数据类型、约束

ALTER TABLE 表名 MODIFY 列名 数据类型 , MODIFY 列名 数据类型;


ALTER TABLE 表名 DROP 列名;

删除列

ALTER TABLE 表名 ADD 列名 数据类型;

增加列

# 改表名

ALTER TABLE demo18 rename to demo181;






  • DML语句(熟练

# 变量

set @x=1;   -- 定义一个变量@x,初始值为1

select @x;  -- 查询变量@x的值

select @y;  -- 查询变量@y的值,默认为空null

set @u:=2;  -- 原版的赋值运算符


# 运算符

select 1=2; -- 预期 0

select 1=1; -- 预期 1

select 1!=1; -- 预期 0

select 1 <>1;   -- 预期0

select not 1=1; -- 预期0

select 1=1 and 2=1; -- 预期0

select 1=1 or 2=1; -- 预期1


# dml -- 修改update set

UPDATE demo181 SET d2=4 ; -- 变更列里所有数据

UPDATE demo181 set d2=6 , d1=4; -- 变更列d2中的数据都为6,变更列d1的数据都为4

UPDATE demo181 SET d1=3 WHERE d2=2; -- 过滤出列d2的数据为2的所有行,变更前面的行对应的列d1的数据为3

改表数据

# dml -- 删除 delete truncate

truncate table demo181;         -- 清空

delete from demo181;            -- 清空表数据

delete from demo181 where d1=1; -- 删除列d1=1的数据行

删除表数据

insert into stu_info values

                           (1011,'郭靖','男','1',1353424221,'北京市海淀区','[email protected]',123456789012345678),

                           (1011,'李文才','男','1',1353444221,'北京市海淀区','[email protected]',123456789012345678),

                           (1011,'李梅','男','1',1353422221,'北京市海淀区','[email protected]',123456789012345678)

;

插入3条数据

# 关闭自动提交

set autocommit = 0;

insert into account values (6,'林九',5000.00);

delete  from account where id = 4;

# 事务提交

update account set money = -1 where id = 4;

commit ;

# 事务回滚

rollback ;

事务

锁::表锁、行锁、记录锁、临界锁

  • DQL语句(精通

# dql::查询所有列

SELECT * FROM student;

SELECT Student.* FROM student;

# dql:: 查询指定列

SELECT StudentNo,LoginPwd,Phone from student;

select Student.StudentNo,Student.LoginPwd,Student.Phone from student;

# dql:: 起别名

select StudentNo as 学生号,LoginPwd as 登录密码,Phone 手机号 from student;

select StudentNo,LoginPwd,phone from student as 学生表;

select StudentNo,LoginPwd,phone from student  学生表;

# dql::select运算

select StudentNo+1, 1+1,version() from student;

# dql:: select后边分支

# 新增1列,判断studentno的数据如果是1002就插入1003,否则就插入1001

select *, case when StudentNo=1002 then 1003 else 1001 end as 新增列 from student;

#dql::select distinct

#去重

select distinct * from goods;

select all * from goods;

#dql::where过滤

select all * from goods where goods_id >3;

select * from goods where goods_id >=10 and goods_id <=20;

select * from goods where goods_id between 10 and 20; -- 等价于上述语句闭区间

select * from goods where goods_id < 10 or goods_id >20;

select * from goods where not goods_id between 10 and 20;

select * from goods where goods_id = 2 or goods_id =4 or goods_id =6;

select * from goods where goods_id in (2,4,6);-- 等价于上边的多个or=

# is null  is not null

select null;

select 0=null;

select ''=null;     -- 预期 null

select null=null;   -- 预期 null

select null is null;-- 预期 1

select 0 is null;   -- 预期 0

select '' is null; -- 预期 0

select not 0 is null; -- 预期 1

select 0 is not null; -- 预期 1

# where过滤 -模糊过滤 like_表示任意的一个字符,%表示任意长度的任意字符

select * from goods where goods_name like '%诺基亚%';-- 包含诺基亚的

select * from goods where goods_name like '诺基亚___';-- 诺基亚开头,后边有3个字符长度

# dql::排序order by

select * from goods order by goods_id;-- 依据列goods_id升序排列,

select * from goods order by goods_id asc;-- 依据列goods_id升序排列,

select * from goods order by goods_id desc;-- 依据列goods_id升序排列,

select * from goods where goods_name like '%诺基亚%' order by goods_id;-- 过滤后排序


# 分组函数

SELECT VERSION();

SELECT CURRENT_DATE();

SELECT CURRENT_TIME();

SELECT COUNT(1999);

SELECT goods_sn, COUNT(goods_sn) FROM goods; -- 查询结果表中的数据行条数

SELECT SUM(goods_id) FROM goods;    -- 查询结果表中的某列的数据总和

SELECT SUM(goods_id+1) FROM goods;

SELECT MAX(market_price) FROM goods;-- 查询结果表中市场价格最高的

set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

show variables like '%sql_mode%';

# 需求::统计·不同栏目的商品数量

SELECT COUNT(*) FROM goods WHERE cat_id =0;-- 0号栏目商品数量

SELECT COUNT(*) FROM goods WHERE cat_id =1;-- 1号栏目商品数量

SELECT COUNT(*) FROM goods WHERE cat_id =2;-- 2号栏目商品数量

SELECT COUNT(*) FROM goods WHERE cat_id =3;-- 3号栏目商品数量

SELECT COUNT(*) FROM goods WHERE cat_id =4;-- 4号栏目商品数量

SELECT COUNT(*) FROM goods WHERE cat_id =5;-- 5号栏目商品数量

# dql::联合查询union union all

(SELECT cat_id, COUNT(*) FROM goods WHERE cat_id =0) union all

(SELECT cat_id,COUNT(*) FROM goods WHERE cat_id =1) union all

(SELECT cat_id,COUNT(*) FROM goods WHERE cat_id =2) union all

(SELECT cat_id, COUNT(*) FROM goods WHERE cat_id =3) union all

(SELECT cat_id, COUNT(*) FROM goods WHERE cat_id =4) union all

(SELECT cat_id, COUNT(*) FROM goods WHERE cat_id =5);-- 5号栏目商品数量

# dql:: 分组查询group by

select cat_id,count(*) from goods group by cat_id;

SELECT cat_id,count(*) FROM goods WHERE 1=1 GROUP BY cat_id HAVING count(*)>10; -- 分组后统计大于10的行

# dql:: 分页查询limit

SELECT * FROM goods limit 10;

SELECT * FROM goods LIMIT 0,10;

SELECT * FROM goods LIMIT 1,10;

# dql::

SELECT * FROM goods WHERE 1=1 GROUP BY cat_id HAVING COUNT(*)>1 ORDER BY cat_id LIMIT 10;

分组联合

-- 笛卡尔积,不同表间数据行条数组合

SELECT student.studentno,result.StudentNo FROM student,result ;

# 再次过滤后,等值内连接

SELECT s.studentno,r.StudentNo FROM student s,result r where s.StudentNo = r.StudentNo;

SELECT s.StudentNo ,r.StudentNo from student s inner join result r on s.StudentNo=r.StudentNo;

# 需求::郭靖分数

SELECT result.StudentNo,StudentName,StudentResult

FROM demo.Student INNER JOIN result ON result.StudentNo=Student.StudentNo

WHERE StudentName='郭靖';

select StudentNo from demo.Student where StudentName = '郭靖';

# dql::嵌套查询

select StudentNo,StudentResult from result where StudentNo = (select StudentNo from demo.Student where StudentName = '郭靖');

select StudentNo,StudentResult from result where StudentNo in (select StudentNo from demo.Student where StudentName = '郭靖');

select StudentNo,StudentResult from result where exists (select * from demo.Student s where s.StudentName = '郭靖' and s.StudentNo = result.StudentNo);

连接查询

嵌套查询

#索引

CREATE TABLE index01(

   id1 int primary key ,   -- 主键,主键索引,

   id2 int unique key, -- 唯一键,唯一索引

   id3 int ,

   key k1 (id3)-- 普通键,常规索引

);

#查看表中声明的索引

show index from index01;

CREATE TABLE index02(

   id int

);

#修改表添加常规索引

ALTER TABLE index02 ADD INDEX key2(id);

#索引执行计划--explain

explain (select StudentNo,StudentResult from result where exists (select * from demo.Student s where s.StudentName = '郭靖' and s.StudentNo = result.StudentNo));

索引(了解









多子句执行顺序

                       

连接查询关系图解

                           




























A表




B表





a1

a2



b1

b2

b3



1

a2



1

1

b3



2

a2



2

2

b09o



3

a2


























inner join内连接A.a1 = B.b2















A表


B表







a1

a2

b1

b2

b3





1

a2

1

1

b3





2

a2

2

2

b09o














left outter join左外连接 A.a1  = B.b2














A表


B表







a1

a2

b1

b2

b3





1

a2

1

1

b3





2

a2

2

2

b09o





3

a2

















right outter join右外连接  A.a1 = B.b2














A表


B表







a1

a2

b1

b2

b3





1

a2

1

1

b3





2

a2

2

2

b09o