MySQL数据库
1. 什么是数据库?
答:数据库是以一定方式存储在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
2. 数据库的分类?具体含义?常见的数据库?
答:关系型数据库和非关系型数据库
关系数据库:是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用的实质是装载着数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存取或重新召集而不需要重新组织数据库表格。
非关系型数据库:是个轻量、开源、不兼容SQL 功能的关系型数据库,NOSQL主要是指I非关系型、分布式、不提供ACID (数据库事务处理的四个本要素)的数据库设计模式。
常见的数据库: oracle、db2、sqlserver、sybase、mysql
3. MySQL数据库服务器、数据库和表的关系?
答: 所谓数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。
数据库服务器、数据库和表的关系如图所示:
4. MySQL数据库服务器下载和安装?【解决MySQL安装到最后一步未响应的三种方法】
答: https://downloads.mysql.com/archives/community/
MySQL安装与配置详情见CSDN MySQL安装与配置。
这种情况一般是你以前安装过MySQL数据库服务项被占用了。
解决方法:
1、卸载MySQL
2、删除安装目录及数据存放目录
3、在注册表(regedit)查询mysql,全部删除,
注意的是注册表 cmd -> regedit
1.HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL 目录
2.HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL 目录
3.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL 目录
4.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl001\Services\MYSQL 目录
5.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl002\Services\MYSQL 目录
6.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MYSQL 目录
4、在c盘查询MySQL,全部删除;一般是在ProgramData文件夹下(该文件是隐藏的,需要设置为显示隐藏文件)和winbdows文件夹下
4、重新安装就好了
5.SQL语言
1.基本数据库操作语句
答: DDL (数据定义语句)
数据定义语言 - Data Definition Language
用来定义数据库的对象,如数据表、视图、索引等
DML (数据操纵语句)
数据处理语言 - Data Manipulation Language
在数据库表中更新,增加和删除记录
如 update、insert、delete — 增删改
DCL (数据控制语句)
数据控制语言 – Data Control Language
指用于设置用户权限和控制事务语句
如grant、revoke、if…else、while、begin transaction
DQL (数据查询语句)
数据查询语言 – Data Query Language
Select
2.MySQL常用数据类型
答: #字符串型 VARCHAR、CHAR
#数值型TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
#逻辑性 BIT(0/1)
#日期型DATE、TIME、DATETIME、TIMESTAMP
#大数据类型BLOB、TEXT(一般不使用)
3.MySQL定义表的字段的约束
答: 定义约束可以保证数据的有效性和完整性
定义主键约束:primark key 不允许为空,不允许重复
主键自动增长:auto_increment(主键多为自动增长类型)
定义唯一约束:unique 不能重复
定义非空约束:not null 不允许为空
4.基本数据库表操作语句
答: 4.1、查看数据库服务器上的现有数据库
show databases;
4.2、选中自己需要使用的数据库
use test;
4.3.查看被选中的数据库中有没有数据表
show tables;
4.4.删除已选中的数据库
drop database test;
4.5.创建一个属于自己的数据库
create database test;
5.INSERT 语句向表中插入数据
答: create table t_student(
stuid int primary key auto_increment,
stuname varchar(20)unique,
stuage int not null,
stusex bit,
stuheight double,
stugister datetime
);
为指定列添加数据
insert into t_student(stuname,stuage,stusex)values(‘张三’,23,1);
为全列添加数据
insert into t_student values(null,‘李四’,24,0,178.5,‘2020-07-29’);
6.update语句修改表中数据
答: update t_student set stuheight=180.5;
update t_student set stuage=11,stuheight=178.8,stugister=‘2020-05-21’ where stuname=‘张三’;
update t_student set stuage=12,stuname=‘李四儿’,stusex=1,stuheight=188 where stuid=2;
7.delete语句删除表中数据
答: delete from t_student where stuid=1;
delete from t_student where stuid=2 and stuname=‘李四’;
delete from t_student where stuid=3 or stuname=‘李三’;
6.select语句
6.1.基本select语句
查询所有数据
select * from t_student;
查询指定列的数据
select * from t_student where stuname=‘张三’;
在where子句中经常使用的运算符
例如:
使用where子句,进行过滤查询
1.比较运算符 > < >= <= == <>
between low[小/低] and hei[大/高] 查询【小/低】到【大/高】之间的数据
in(集合数据值) 查询在in集合中的数据
like ‘zhang%’ / like ‘%san’ / like ‘%zi%’ 模糊查询
is null 查询为空的数据
2.逻辑运算符 {or[逻辑或] and [逻辑与]} 可以链接多个查询条件
not 非
< >= <= == <>
查询年龄大于30的数据记录
select * from t_student where stuage > 30;
between low[小/低] and hei[大/高]
查询年龄在25至30之间数据记录
select * from t_student where stuage between 25 and 30;
in(集合数据值) 查询在in集合中的数据
#查询编号在(2,5,8)集合中的数据记录
select * from t_student where stuid in(2,5,8);
like ‘zhang%’ / like ‘%san’ / like ‘%zi%’ 模糊查询
查询姓zhang的学生信息
select * from t_student where stuname like ‘zhang%’;
查询叫si的学生信息
select * from t_student where stuname like ‘%si’;
查询包含java的学生信息
select * from t_student where stuname like ‘%java%’;
is null 查询为空的数据
#查询姓名为null的数据
select * from t_student where stuname is null;
or[逻辑或]
查询编号为2 或者 姓名是wangwu 或者 年龄为27的数据
select * from t_student where stuid=2 or stuname=‘wangwu’ or stuage=27;
and [逻辑与]
查询编号为2 并且 姓名是wangwu 并且 年龄为27的数据
select * from t_student where stuid=2 and stuname=‘wangwu’ and stuage=27;
not 非
select * from t_student where not(stuage>25);
6.2.多表查询
1.1 表与表之间的关系
一对一(主键关联、外键关联)
--创建用户信息表
create table t_user(
u_id int primary key auto_increment,
u_name varchar(20),
u_age int,
u_sex bit,
u_address varchar(30),
foreign key t_user(u_id) references t_card(c_id)
);
--创建用户省份证信息表
create table t_card(
c_id int primary key auto_increment,
c_number varchar(18),
c_arg varchar(10),
c_year int
);
--向用户省份证信息表中添加测试数据
insert into t_card values(null,'123456789012345678','陕西.西安',10);
insert into t_card values(null,'098765432112345678','陕西.铜川',10);
--向用户信息表中添加测试数据
insert into t_user values(null,'zhangsan',23,true,'长安县');
insert into t_user values(null,'lisi',24,false,'雁塔区');
--创建用户信息表
create table t_user(
u_id int primary key auto_increment,
u_name varchar(20),
u_age int,
u_sex bit,
u_address varchar(30),
card_id int unique,
foreign key t_user(card_id) references t_card(c_id)
);
--创建用户省份证信息表
create table t_card(
c_id int primary key auto_increment,
c_number varchar(18),
c_arg varchar(10),
c_year int
);
--向用户省份证信息表中添加测试数据
insert into t_card values(null,'123456789012345678','陕西.西安',10);
insert into t_card values(null,'098765432112345678','陕西.铜川',10);
--向用户信息表中添加测试数据
insert into t_user values(null,'zhangsan',23,true,'长安县',1);
insert into t_user values(null,'lisi',24,false,'雁塔区',2);
一对多(外键设计在多方维护)
--注意:外键要设计在多方维护
--创建一个班级表
create table t_class(
c_id int primary key auto_increment,
c_number varchar(10),
c_name varchar(10)
);
--向班级表添加测试数据
insert into t_class values(null,'J20180903','javaEE');
insert into t_class values(null,'A20181010','Android');
insert into t_class values(null,'I20181111','IOS');
--创建学生表
create table t_student(
s_id int primary key auto_increment,
s_name varchar(20),
s_age int,
s_sex bit,
s_address varchar(30),
class_id int,
foreign key t_student(class_id) references t_class(c_id)
);
--向学生表添加测试数据
insert into t_student values(null,'zhangsan',23,true,'西安',1);
insert into t_student values(null,'lisi',24,false,'北京',2);
insert into t_student values(null,'wangwu',25,true,'上海',3);
insert into t_student values(null,'zhangsansan',26,true,'西安南',1);
insert into t_student values(null,'lisisi',27,false,'北京北',2);
insert into t_student values(null,'wangwuwu',28,true,'上海东',3);
多对多(需要一个中间表维护关联关系,保存不同表的主键)
--注意:需要有一个中间表来维护关联关系,保存的是不同表的主键
--创建角色表
create table t_role(
r_id int primary key auto_increment,
r_name varchar(10),
r_desc varchar(30)
);
--创建项目组表
create table t_group(
g_id int primary key auto_increment,
g_name varchar(20),
g_desc varchar(30)
);
--创建中间表维护关联关系
create table t_rolegroup(
z_id int primary key auto_increment,
role_id int,
group_id int
);
--通过修改表结构的方式添加外键
alter table t_rolegroup add constraint fk1 foreign key (role_id) references t_role(r_id);
alter table t_rolegroup add constraint fk2 foreign key (group_id) references t_group(g_id);
--向角色表中添加测试数据
insert into t_role values(null,'java程序员','负责开发java程序');
insert into t_role values(null,'测试员','负责测试程序');
--向项目组表中添加测试数据
insert into t_group values(null,'CRM组','负责开发CRM系统');
insert into t_group values(null,'ERP组','负责开发ERP系统');
--向中间表中添加测试数据
insert into t_rolegroup values(null,1,1);
insert into t_rolegroup values(null,1,2);
insert into t_rolegroup values(null,2,1);
insert into t_rolegroup values(null,2,2);
1.2 外键的定义
定义外键约束
foreign key
foreign key(ordersid) references orders(id)
1.3 子查询
多表查询——子查询[在一个大的查询语句中包含着一个小查询语句。
查询年龄大于平均年龄的学生信息
select avg(s_age) from t_student;
select * from t_student where s_age > 25.5;
子查询
select * from t_student where s_age > (select avg(s_age) from t_student);
7.联合查询
内连接查询 【inner join】
左连接查询 【left join】 左外连接查询 【left outer join】
右连接查询 【right join】 右外连接查询 【right outer join】
--创建一个班级表
create table t_class(
c_id int primary key auto_increment,
c_number varchar(10),
c_name varchar(10)
);
--向班级表添加测试数据
insert into t_class values(null,'J20180903','javaEE');
insert into t_class values(null,'A20181010','Android');
insert into t_class values(null,'I20181111','IOS');
--创建学生表
create table t_student(
s_id int primary key auto_increment,
s_name varchar(20),
s_age int,
s_sex bit,
s_address varchar(30),
class_id int,
foreign key t_student(class_id) references t_class(c_id)
);
--向学生表添加测试数据
insert into t_student values(null,'zhangsan',23,true,'西安',1);
insert into t_student values(null,'lisi',24,false,'北京',2);
insert into t_student values(null,'wangwu',25,true,'上海',3);
insert into t_student values(null,'zhangsansan',26,true,'西安南',1);
insert into t_student values(null,'lisisi',27,false,'北京北',2);
insert into t_student values(null,'wangwuwu',28,true,'上海东',3);
--查询姓名是zhangsna的地址和班级名称
select 学生表.s_name,学生表.s_address,班级表.c_name
from t_student as 学生表
inner join
t_class as 班级表
on 学生表.class_id = 班级表.c_id
where 学生表.s_name='zhangsna';
--根据班级编号“I20181111”的所有学生信息
select 学生表.s_id ,
学生表.s_name,
学生表.s_age,
学生表.s_sex,
学生表.s_address
from t_student as 学生表
left join
t_class as 班级表
on 学生表.class_id = 班级表.c_id
where 班级表.c_number='I20181111';
--查询姓名是lisi的所有信息包括班级信息
select 学生表.s_id ,
学生表.s_name,
学生表.s_age,
学生表.s_sex,
学生表.s_address,
班级表.c_id,
班级表.c_number,
班级表.c_name
from t_student as 学生表
right join
t_class as 班级表
on 学生表.class_id = 班级表.c_id
where 学生表.s_name='lisi';
内连接与左连接和右连接查询的区别
–内连接:显示左边右边共有的
–左连接:左边有的,右边没有的为null
–右连接:右边有的,左边没有的为null
语法结构:
select [col1,col2…coln来自多张表【最好使用别名】]
from table1
inner join/
left outer join/left join/
right outer join/right join
table2
on table1.col = table2.col
where 查询条件