MySQL详解

Posted Mr_ZCheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL详解相关的知识,希望对你有一定的参考价值。

mysql中的数据类型

1.数值

类型大小范围范围用途
TINYINT1字节-27~ 27 -10~28 -1小整数
SMALLINT2字节-215~ 215 -10~216 -1大整数
MEDIUMINT3字节-223~ 223 -10~224 -1大整数
INT4字节-231 ~ 231 -10~ 232 -1大整数
BIGINT8字节-263~ 263 -10~264 -1极大整数
FLOAT4字节单精度浮点数
DOUBLE8字节双精度浮点数
DECIMAL小数值

DECIMAL(总位数,小数位) FLOAT(总位数,小数位) DOUBLE(总位数,小数位)

​ 例如decimal(7,2),整数占五位,小数占两位

2.日期/时间

类型大小范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3‘-838:59:59’/‘838:59:59’HH–MM-SS时间值或持续时间
YEAR11901/2155YYYY年份
DataTime81000-01-01 00:00:00
9999-12-31 23:59:59
YYYY-MM-DD
HH:MM:SS
混合日期和时间值
TIMESTAMP81970-01-01 00:00:00/2037某时YYYYMMDDHHMMSS混合日期和时间值,时间戳

3.字符串(字符)类型

类型大小(字节)用途
CHAR0-255定长字符串
VARCHAR0-65535变长字符串
TINYBLOB0-255不超过255字符二进制字符串
TINYTEXT0-255短文本字符串
BLOB0-65535二进制长文本数据
TEXT0-65535长文本数据
MEDIUMBLOB0-16777215二进制形式中等长度文本数据
MEDIUMTEXT0-16777215中等长度文本数据
LONGBLOB0-4294967295二进制形式极大文本数据
LONBTEXT0-4294967295极大文本数据

区别:

char(字符串长度) 定长        varchar(字符串长度) 变长

​ 设定多少长度,就会全部占满    以实际长度占用空间

数据库操作

1.查看现有的数据库

show databases;


2.创建数据库

create databases 数据库名字;


3.删除数据库

drop database 数据库名字;

表的操作

在工具中,“打开表”–>看表内容
     “设计表”–>看表结构

0.选择数据库操作
	use 数据库名;

1.创建表
	create table 表名(
		属性名1 数据类型 [约束条件],
//		姓名 varchar(10) not null,
	属性名2 数据类型 [约束条件],
	属性名3 数据类型 [约束条件]
	);

2.删除表
	drop table 表名;

3.修改表
	3.1添加列
		alter table 表名 add 属性名 数据类型;
//		alter table 学生表 add 专业 carchar(10);
	
	3.2删除列
		alter table 表名 drop 属性名;
//		alter table 学生表 drop 成绩;

	3.3修改列的数据类型
		alter table 表名 modify 属性名 新数据类型;
//		alter table 学生表 modify 成绩 float(4,1);
	
	3.4修改列名
		alter table 表名 change 旧字段名 新字段名 数据类型;
//		alter table 学生表 change 姓名 学生名 数据类型;
	
4.显示表结构
	desc 表名;

给表关联约束

实体完整性约束

在一个表中,找到一个列,该列做到唯一区分效果









主键约束 primary key





创建

 创建表的同时关联约束

//方式一
create table student(
	id int primary key,
	name varchar(5),
	age int
);

//方式二
create table student(
	id int,
	name varchar(5),
	age int,
	constraint 主键约束的名字(PK_列名)  primary key(id)
);

//方式三
create table student(
	id int,
	name varchar(5),
	age int,
	primary key(id)
);

修改表的同时关联约束

//方式一
alter table student add constraint 主键约束的名字 primary key(列名);

//方式二
alter table 表名 add primary key(列名);

//方式三
alter table 表名 modify 列名 数据类型 primary key;

删除主键约束

alter table 表名 drop primary key;

唯一约束 unique

保证是唯一的,不能重复,但是可以为空
一个表中可以有多个唯一约束
设置一个唯一约束会默认给一个索引
若没有给唯一约束起名,默认和列名一致

 创建

创建表的同时关联约束

//方式一
create table student(
	学号 int unique,
	姓名 varchar(5),
	年龄 int,
	课程号 varchar(10) unique
);

//方式二
create table student(
	学号 int,
	姓名 varchar(5),
	年龄 int,
	课程号 varchar(10),
	constraint UN_学号 unique(学号),
	constraint UN_课程号 unique(课程号)
);

 修改表的同时关联约束

alter table student add unique(学号);

删除唯一约束

alter table student drop index 学号(唯一约束的名字);

自动增长列 auto_increment

创建

 创建表的同时关联约束

create table student(
	学号 int auto_increment,
	姓名 varchar(5),
	年龄 int,
	课程号 varchar(10) 
);

 修改表的同时关联约束

alter table student modify 性别 varchar(3) default '男';

删除非空约束

alter table sudent modify 姓名 varchar(5);

外键约束 foreign key

针对两个表,加强表与表之间联系
一张表中可以有多个外键约束
主表想要删除被从表引用的数据,会删除失败

外键约束建立在从表中,拿上从表中的某个列参照引用主表的某个列
要求主表必须要有主键约束或者唯一约束
参照引用的列可以不一致,但数据类型和内容必须保持一致 

创建

 创建表的同时关联约束

create table 主表(
	列名1 数据类型 primary key,
	列名2 数据类型
);

create table 从表(
	列名1 数据类型,
	列名2 数据类型,
	列名3 数据类型,
	constraint 外键约束的名字(FK_列名) foreign key(从表列名1) references (主表列名1)
);

修改表的同时关联约束

alter table 从表 add constraint 外键约束名 foreign key(从表列名) references (主表列名);

删除外键约束

alter table 从表 drop foreign key 外键约束名;

下篇
数据的操作

包括三条DML语句 INSERT、UPDATE、DELETE
一条SQL语句 SELECT

 增 insert

如果插入的值是字符串类型或者时间日期类型,需要 单引号

1.格式一
insert into 表名(列名1,列名2,列名3) values(值1,值2,值3);

2.格式二
insert into 表名 values(值1,值2,值3);

3.格式三
insert into 表名 values(值1,值2,值3),(值4,值5,值6);

4.格式四
insert into 表名 set 列名1 = 值1,列名2 = 值2,列名3 = 值3;

删 delete

 删除数据时,要考虑外键的影响

1.格式一	-- 删除表中所有数据
delete from 表名;

2.格式二
delete from 表名 where 删除条件;
	2.1多个条件同时满足
	delete from 表名 where 条件1 and 条件2...;
	
	2.2多个条件满足一个
	delete from 表名 where 条件1 or 条件2...;

改 update

1.格式一
update 表名 set 列名=值;

2.格式二
update 表名 set 列名1=值1,列名2=值2...;

3.格式三	有条件的更新
update 表名 set 列名1=值1,列名2=值2... where 条件;
-- update student set age=age+1 where sex='男';

查 select

查询语句的顺序
select 列名|*
 from 表名
 [where 查询条件(不能是聚合函数)]
 [group by 分组依据列 [having 分组条件]]
 [order by 排序依据列 [asc/desc]]


注: []表示可有可无,
  asc升序 desc降序排列

 无条件的查询

select * from 表名;
-- select子句	查询哪些列的内容
-- from子句	从哪个表中查数据

2.去重查询
select distinct 列名 from 表名;
-- select distinct 籍贯 from student;

3.别名查询
-- 针对查询的结果,另起标题名字
	3.1格式一
	select 列名1 '别名1',列名2 '别名2'... from 表名;
	
	3.2格式二
	select 列名1 as '别名1',列名2 as '别名2'... from 表名;
	
4.在指定行数查看	limit
select * from 表名 limit [开始的位置(可不写)],查询的行数;
-- 开始位置数字=行数位置-1

有条件的查询

1.比较运算符条件

运算符含义
=等于
>大于
<小于
>=大于等于
<=小于等于
<>不等于
!=不等于
select * from 表名 where 列名 != 值;
-- select * from student where sex != "男";

2.逻辑运算符条件

运算符含义
and连接多个条件,同时满足
or连接多个条件,满足其中一个
select * from 表名 where 列名1 != 值1 and 列名2 > 值2;
-- select * from student where sex != "男" and id > 5;

4.列表搜索条件

运算符含义
in (值1,值2,值3)在给定值中
not in (值1,值2,值3)不在给定值中
select * from 表名 where 列名1 in (值1,值2,值3) ;
-- select * from student where id in (2,3,4,5);

5.like关键字搜索

通配符含义
%表示0个或多个字符
_表示一个字符
5.1要模板相关数据
select * from 表名 where 列名 like '字符模板';

5.2不要模板相关数据
select * from 表名 where 列名 not like '字符模板';
  
字符模板:王%		王_

6.空值查询操作

is null为空
is not null不为空
6.1为空
select * from 表名 where 列名 is null;

6.2不为空
select * from 表名 where 列名 is not null;

查询结果分组 group by

针对查询出来的结果,按照某个列来进行划分组

1.无条件
select 列名,聚合函数 from 表名 group by 列名;
-- 每个专业多少学生
-- select 专业,count(*) '人数'
-- from 学生表
-- group by 专业;

2.有条件
select 列名,聚合函数 from 表名 group by 列名 having 分组条件;
-- 学生超过十人的专业
-- select 专业,count(*) '人数'
-- from 学生表
-- group by 专业;
-- having count(*)>10

 

查询结果排序 order by

针对查询出来的结果, 按照某个列进行排序操作

select * from 表名 order by 列名;

1.升序	默认
	select * from 表名 order by 列名 asc;

2.降序
	select * from 表名 order by 列名 desc;

3.二级排序
	select * from 表名 order by 列名1 desc,列名2 asc;

 

聚合函数

特别强调 where后面不能写聚合函数

-- sum(列名)	avg(列名)	max(列名)	min(列名)
   select sum(列名) '总和' from 表名;
   select avg(列名) '平均' from 表名;
   select max(列名) '最大' from 表名;
   select min(列名) '最小' from 表名;

 特别强调 除了count(*)外,其他聚合函数都忽略空值

 

--	统计元组的个数
    select count(*) '元组数' from 表名;

--	统计该列值的个数
    select count(列名) '值的个数' from 表名;
    
-- 	去重统计
  	select count(distinct 列名) '去重个数' from 表名

四类函数

字符串函数

char_length字符串字符长度
length字符串字节长度
mid字符串截取
1.字符长度
select 列名,char_length(列名) '字符长度' from 表名;

2.字节长度
-- 一个汉字占3个字节
select 列名,length(列名) '字节长度' from 表名;

3.字符串截取
-- mid(操作的字符串,截取的开始位置,截取字符长度)
select 列名,mid(列名,2,2) '截取' from 表名;

数学函数

round四舍五入
least取最小数字
greatest取最大数字
1.1保留整数    -- round(数字)	其实是round(数字,0)
	-- 平均成绩四舍五入
	select round(avg(grade)) '平均成绩' from student;

1.2保留小数    -- round(数字,保留小数位)
	select round(3345.26723,2);
	--	结果是3345.27

日期时间函数

now数据库服务器当前日期时间
current_date数据库服务器当前日期
current_time数据库服务器当前时间
to_days日期转换成天数
dayofyear该年已过的天数
week当前是第几周

控制流函数

1.if(布尔表达式,参数1,参数2);
-- select if(条件,"男","女") from student;

2.ifnull(参数1,参数2)
--	参数一不为空则返回参数一,否则返回参数二
3.if 条件 then 执行语句
  elseif 条件 then 执行语句
  else 执行语句 end if

以上是关于MySQL详解的主要内容,如果未能解决你的问题,请参考以下文章

部分代码片段

linux中怎么查看mysql数据库版本

14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段

Python中verbaim标签使用详解

从mysql的片段中加载ListView

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段