mysql数据库知识点概述

mysql数据库内容小总结

一、如何链接数据库
1.通过命令本地连接
①本地主机进行连接
mysql -u用户名 -p密码
②通过命令远程连接
mysql -h主机IP地址 -P端口号 -u用户名 -p密码
二、数据类型
1、数值型
①整形(tinyint、smallint、mediumint、int、bigint)

类型 大小
tinyint 1byte
smallint 2byte
mediumint 3byte
int 4byte
bigint 8byte

举例:tinyint(m) unsigned zerofill
解释:m表示数值长度,不影响取值范围
unsigned 无符号类型,影响取值范围,不影响数据长度
zerofill,0填充,一般与m配合使用
②浮点型(float,double)

类型 大小
float 4byte
double 8byte

举例:float(m,z)
解释:m表示数值的总长度
z表示小数点后的小数位长度
③字符型(char、varchar)
举例:char(m)
解释:m表示在内存中要分配的位数
特点:分多少,占多少;
读取速度快,内存利用率不高
当输入的字符长度小于m时,系统会自动在字符后用空格填充,当输出时系统会自动过滤空格;当输入的字符后面含有空格时,输出时,不会原样输出。
举例:varchar(m)
解释:m表示在内存中要分配的位数
特点:用多少,占多少;
读取速度慢,内存利用率高
当输入的字符长度小于m时,系统不会在字符后用空格填充;当输入的字符后面含有空格时,输出时,原样输出
④时间日期(datetime,date,time,year)
datetime格式是日期和时间的组合形式,存储和显示格式为YYYY-MM-DD HH:MM:SS。
取值范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
注:允许使用字符串或着数字进行填写
date格式是日期形式,存储和希纳是格式为YYYY-MM-DD
取值范围:1000-01-01 ~ 9999-12-31
注:允许使用字符串或着数字填写
time格式是时间形式,存储和显示格式为HH-MM-SS
取值范围:-838:59:59~838:59:59
注:小时部分如此大的原因在于TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可能为某个时间过去的时间或者两个时间之间的时间间隔(可以大于24小时,也可以为复制)。
year表示年类型,用于存储和显示的格式为YYYY
范围:
以字符串为例,范围为’1901’~‘2155’
以数字为例,范围为1901~2155
三、约束类型
1、主键约束(不为空且不能重复)主键字段:primary key
举例:
create table student(
sid tinyint(3) unsigned zerofill primary key,
sname char(10))charset utf8;
2、唯一约束(不可重复)唯一键字段:unique
举例:
create table student(
sid tinyint(3) unsigned zerofill primary key,
sname char(10) unique)charset utf8;
3、非空约束(不可为空)非空字段:not null
举例:
create table student(
sid tinyint(3) unsigned primary key,
sname char(10) unique,
sage tinyint(3) unsigned not null
)charset utf8;
4、默认约束(在字段不添加内容时,系统自动为字段添加内容)默认字段:default ‘默认值’
举例:
create table student(
sid tinyint(3) unsigned primary key,
sname char(10) unique,
sage tinyint(3) unsigned not null,
ssex char(6) default ‘男’
)charset utf8;
5.外键约束 (与其他表进行关联,本表字段与其他表主键字段类型保持一致)外键字段:foreign key
举例:
在本表中关联的表为class表,表中主键为cid 数据类型为int(3)
create table student(
sid tinyint(3) unsigned primary key,
sname char(10) unique,
sage tinyint(3) unsigned not null,
ssex char(6) default ‘男’,
classid int(3) not null,
foreign key(classid) references class(cid)
)charset utf8;
注:constraint 外键名称 foreign key(字段名) references 主表名称(主表字段),constraint 外键名称 是给外键取一个名字,不使用时,系统会默认分配一个外键名字。
其中自写外键名称的格式为:主表_从表_fk(主表和从表可以缩写)
四、基本sql语句
基于数据库的sql语句
1.创建库
create dababase 库名;
2.查看当前数据库中有哪些库?
show databases;
3.进入库
use 库名;
4.删除库
drop database 库名;
5.数据库一经创建无法进行修改
基于表的sql
1.创建表
create table 表名(
字段名1 数据类型[约束],
字段名2 数据类型[约束],

数据类型 n 数据类型[约束]
)charset utf8;
2.查看表结构
desc 表名;
3.查看当前库中有哪些表
show tables;
4.插入一条数据
insert into 表名 (字段名列表)values (字段值列表);
5.插入多条数据
insert into 表名 (字段名列表) values(字段值列表);
6.查看表中的数据
select 字段列表 from 表名 where/having 条件表达式;
7.删除表中数据
delete from 表名 where/having 条件表达式;
8.更新表中数据
update 表名 set 字段名=新值 where/having 条件表达式;
注:在查询语句中使用having关键字时,必须使用group by 进行分组。
9.给表重命名
rename table 当前表名 to 新表名;
alter table 当前表名 rename 新表名;
10.删除表
drop table 表名;
11.查看建表语句
show create table 表名
12.删除外键
alter table 表名 drop foreign key 外键名;
注:外键名可以在11条查询语句中进行查询。
13.为已有表添加外键
alter talbe 表名 add foreign key (字段名) references 主表表名(主表字段名);
14.删除已有表主键
alter table 表名 drop primary key;
15.为已有表添加主键
alter table 表名 add primary key(字段名)
五、where条件表达式
1.精准查询
=,>,<,>=,<=,!=(<>)
2.模糊查询
like/not like
通配符:%表示可以进行匹配零到多个字符,下划线(_)只能匹配一个字符
3.区间查询
between…and…
not between…and…
4.逻辑
and/or 当and和or同时出现时,先计算and,后计算or
5.非空运算/空运算
is not null/is null
6.集合运算
in/not in
六、having条件表达式
①having 必须跟在group by 后面
②having 后可以跟聚合函数
七、having和where 的区别
1.where条件表达式是从表中筛选数据
having条件表达式是从查询结果中筛选数据
2.where 条件表达式后,不可以跟聚合函数
having条件表达式后,可以跟聚合函数
3.having子句中可以使用字段别名
where只能使用表中存在的字段
八、聚合函数
1.count
2.sum
3.avg
4.max
5.min
九、分组、排序、去重
group by 字段(一般与聚合函数一起使用)
order by(字段、排列)
distinct 去重
十、单表查询
1、查询<学生信息表>,查询学生"张三"的全部基本信息
select * from xsb where xm=‘张三’;
2、查询<学生信息表>,查询学生"张三"或”李四”的基本信息
select * from xsb where xm=‘张三’ or xm =‘李四’;
3、查询<学生信息表>,查询姓"张")学生的姓名,年龄,班级
select xm,nl,bj from xsb where xm like ‘张%’;
4、查询<学生信息表>,查询姓名中含有"四"字的学生的基本信息
select * from xsb where xm like ‘%四%’;

十一、多表查询
1.嵌套查询(子查询)
根据已知条件,去求我们需要的数据
特点:记录永不增长,逻辑复杂
举例:
student表(sid(char(5))主键,sname(char(15)),ssex(char(6)),sbirth(date),sage(tinyint(3)))
teacher表(tid(char(5))主键,tname(char(15)),tage(tinyint(3)))
score表(scid(char(5))主键,scsid(char(5))外键,sctid(char(5))外键,sc(int(3)))
course表(cid(char(5))主键,cname(varchar(15))唯一约束,teacherid(char(5))外键)
问:查询和“2”号的同学学习的课程完全相同的其他同学学号和姓名;
①从score表中查询学号为2的学生课程的老师编号
select sctid from score where scsid = ‘2’;
②根据①中查询的结果从course表中获取对应的课程编号
select cid from course where teacherid in (①);
③从score表中查询学号为2的学生的学习课程的老师数量
select count(sctid) from score where scsid = ‘2’;
④使用等值连接将四个表进行连接并查询结果
select sid,sname from student,teacher,score,course
where sid = scsid and sctid = tid and tid = teacherid and
cid in (②) and sid != 2
group by sid
having count(sid) = (③);
2.等值连接
select 查询字段 from A,B where A.X = B.X[and + 其他查询条件]
[group by 字段名]
[having 条件表达式]
[order by 字段名 [asc/desc]];
3.内连接
select 查询字段 from A inner join
等值连接与内连接,查询的是两个表中信息对等的数据
4.左外连接(左连接)
select 查询字段 from A left join B on A.X = B.X
[where 条件]
[group by 字段名]
[having 条件表达式]
[order by 字段名]
注:条件根据查询语句,进行适当添加,切不可按部就班地进行套用。
5.右外连接(右连接)
select 查询字段 from A right join B on A.X = B.X
[where 条件]
[group by 字段名]
[having 条件表达式]
[order by 字段名 [asc/desc]];
注:左连接与右连接可以查询出两个表中信息不对等的数据。

你可能感兴趣的:(mysql数据库知识点概述)