MySQL基础知识
常见数据库软件
Oracle:大型系统
MySQL:web应用最多,最高支持千万级别 的并发访问
DB2:银行系统使用最多
SQLServer:C#、.net常用
数据库的基本概念
- 数据库用于存储和管理数据 的仓库
- 特点
持久存储数据库,数据库是文件系统
方便存储和管理数据
使用了同意方式操作的数据库
MySQL目录基本介绍
安装目录
bin
二进制可执行文件
mysql用于登录服务器
data
数据文件
include
C语言头文件
lib
mysql需要的jar包,库文件
share
数据库错误文件
my.ini
修改数据库的核心配置文件
数据目录
数据库
文件夹
SQL的基本概念
- SQL:结构化查询语言,可以操作所有关系型数据库,每一种数据库操作的方式,存在不一样的差异。
- Oracle、MySQL、SQL server
SQL通用语法
- 单行、多行书写,不区分大小写,关键字大写
- 注释:
单行注释:-- 注释 ,#注释
多行注释:/注释/
SQL分类
-
DDL
操作数据库和表
create、drop、alter等
CREATE TABLE VIEW INDEX SYN CLUSTER -
DML
操作数据库记录
insert、update、add等 -
DQL
查询数据库记录
select、from、where等 -
DCL
授权
grant、revoke、rollback、commit、autocommit等
DDL
一般操作表结构和数据库结构
alter、modify、change、create、add、drop、show crate、character set
操作数据库
-
创建
创建数据库 create database 数据库名称 创建数据库的同时判断数据库存在则不创建 create database if not exists 数据库名称 创建数据库的同时指定字符集 create database 数据库名称 character set gbk 创建数据库判断是否存在并且指定字符集 create database if not exists 数据库名称 character set gbk
-
查看
查看所有数据库名称 show databases; 查看某个数据库的创建语句 show create database mysql; 查询当前正在使用的数据库名称 select database();
-
默认表
information_schema:存放视图 mysql:数据库核心表服务 performance_schema:数据库性能 test:测试使用
-
修改
修改数据库字符集 alter database 数据库名称 character set 字符集名称
-
删除
删除数据库 drop database 数据库名称 判断数据库存在则删除: drop database if exists 数据库名称 使用数据库 use 数据库名称
操作表
-
创建
1、普通创建 create table 表名字 ( 列名1 数据类型 束 , .......... ); 2、创建前判断表是否存在 列名1 数据类型 束 , .......... );
-
查询
查看数据库中所有表的名称 show tables; 查看表的创建语句 show create table 表名; 查看表结构 desc 表名称
-
修改
修改表名 alter table 表名 rename 新表名 修改表的字符集 alter table 表名character set 字符集名称 alter table new_student character set utf8; 添加列 alter table 表名 add 列名 数据类型 修改列名称/类型 alter table 表名 change 旧字段 新字段 类型 alter table 表名 modify 字段 数据类型 alter table 表名 add 字段名 列名 alert table 表名 rename 新的表名 删除列 alert table 表名 drop 列名
-
删除
存在就删除 drop table if exists 表名 直接删除 dorp table 表名
-
复制表
create table 复制后的表 like 原表
DML&DQL&DDL 阶段复习一
操作数据库
操作数据库和表的记录,并非结构
1、创建
创建数据库
create database 数据库名称
创建数据库的同时判断数据库存在则不创建
create database if not exists 数据库名称
创建数据库的同时指定字符集
create database 数据库名称 character set gbk
创建数据库判断是否存在并且指定字符集
create databases if not exists 数据库名 CHARACTER set 字符集;
2、查看
查看所有数据库名称:
show databases;
查看某个数据库的创建语句
show create database mysql;
3、默认表
information_schema:存放视图
mysql:数据库核心表服务
performance_schema:数据库性能
test:测试使用
4、修改
修改数据库字符集
alter database 数据库名称 character set 字符集名称
5、删除
删除数据库
drop database 数据库名称
判断数据库存在则删除:
drop database if exists 数据库名称
操作表
1、创建
1)直接创建
create table 表名字 (
列名1 数据类型 约束 ,
..........
);
如:
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
commit;
2)创建前先判断
create table if not exists 表名字 (
列名1 数据类型 约束 ,
..........
);
create table if not exists student(
id int(3) auto_increment primary key,
name varchar(20),
age int(3),
sex varchar(2),
address varchar(100),
math double(4,1),
engelish double(4,1)
);
COMMIT;
2、查看
查看数据库中所有表的名称
show tables;
查看表的创建语句
show create table 表名;
查看表结构
desc 表名称
desc student;
3、修改
修改表名
alter table 表名 rename 新表名
修改表的字符集
alter table 表名character set 字符集名称;
注意:创建时间戳类型,必须是数据库为空没有任何数据情况下,才有效。
alter table stu modify insert_time timestamp default CURRENT_TIMESTAMP not null;
alter table new_student character set utf8;
修改列名称/类型
alter table 表名 change 旧字段 新字段 类型
alter table 表名 modify 字段 数据类型
alter table 表名 rename 新的表名
alter table student add insert_time TIMESTAMP default CURRENT_TIMESTAMP not null;
commit;
4、添加
添加列
alter table 表名 add 列名 数据类型
5、删除
删除列
alter table 表名 drop 列名
表存在就删除
drop table if exists 表名
直接删除表
drop table 表名
6、复制表
create table 复制后的表 like 原表
DML 操作表记录
1、 添加
缺省值的时候为空填写: NULL
可以缺省值: NSERT INTO 表名 列名 1,列名2 列名..VALUES ( value1, value2, value3,....);
不可以缺省值: INSERT INTO 表名 VALUES( value1, value2, value3,....);
添加单条记录
insert into stu(id,name,age,score,birthday) values (17,'小乔',25,null,null);
批量插入
insert into stu(id,name,age,score,birthday)
values (18,'打击',25,99.0,'2021-06-09'),
(19,'庄周',25,99.0,'2021-06-09'),
(20,'大桥',25,99.0,'2021-06-09'),
(21,'亚瑟',25,99.0,'2021-06-09'),
(22,'鲁班',25,99.0,'2021-06-09');
批量插入
insert into student (name,age,sex,address,math,engelish)
values ('何*松',15,'女','广西桂平',60,100),
('何*星',16,'男','广西柳州',70,80),
('李*英',19,'女','广西桂平',69,59.3),
('黄*停',58,'女','广西桂平',100,100),
('覃*星',15,'男','广西南宁',70,30.1),
('钱*波',18,'男','浙江省绍兴市',80,60),
('闫*宝',19,'男','北京五环',69,99.0),
('何*',20,'男','湖南省怀化市',80,78);
commit;
插入空值
insert into student (name,age,sex,address,math,engelish) values ('张*',28,'男','湖南省常德市',20,null);
commit;
2、删除
删除某一条记录
delete from 表名 where 条件=值;
commit;
删除所有记录,逐条删除,效率低
delete form 表名;
commit;
删除所有记录,删除表数据并创建一个新的一摸一的表及其结构,效率高
truncate table 表名;
truncate table student;
commit;
3、修改
修改表中某一条记录
pdate stu set 列名=值 where id=18;
修改表中所有记录
update stu set 列名=值;
修改其中两个记录
update stu set 列名=值,列名n=值n where id=18;
DQL 查询表记录
1、查询语法综合
select 字段列表 from 表名 列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定;
2、基础查询
查询全部
select * from 表名
select * from student;
多个字段查询
select 字段1,字段2.... from 表名;
select name,address from student;
去除重复
select distinct 字段1,字段2.... from 表名;
select distinct address,name from student;
计算表
select 字段1,字段2,(字段1+字段2) from 表名;
select id ID ,name 姓名,math 数学,engelish 英语, (math+engelish) 总分 from student;
null值参与计算
语法:ifnull(需要判断的字段,如果判断的字段为空就填充0)
select 字段1,字段2,(字段1+ifnull(字段2,0)) from 表名;
select id ID ,name 姓名,math 数学,engelish 英语, (math+ifnull(engelish,0)) 总分 from student;
起别名
select name 别名 from 表名;
select name 姓名,sex 性别,address 地址 from student;
条件查询
-
语法:where子句后跟条件
-
运算符
>,<,<=,>=,<>、between...and、in(集合)、is null 、is not null、and,&&、or,||、not,!
-
模糊查询
like
‘_’:任意单个字符
%:任意多个字符
[ ]:在范围内的
[^ ]:不在范围内的
注意:符号之间都可以混合使用
查询语句练习笔记
查询年龄大于20岁
select * from student where age>20;
查询年龄等于20岁
select * from student where age=20;
查询年龄不等于20岁
select * from student where age !=20;
select * from student where age <>20;
查询年龄大于等于20小于等于30岁的
select * from student where age >=20 and age <=30;
select * from student where age between 20 and 30;
查询20岁,19岁,58岁的信息
select * from student where age in(20,19,58);
select * from student where age = 20 or age = 19 or age = 58;
查询英语成绩为空的
select * from student where engelish is null;
查询英语成绩不为空的
select * from student where engelish IS NOT NULL;
模糊查询练习笔记
查询班姓李的学生
select * from student where name like '李%'
查询第二个字为泽的学生
select * from student where name like '_泽%';
查询姓名为三个字的学生
select * from student where name like '___';
查询姓名中包含何的人
select * from student where name like '%何%';