MySQL基础知识点
数据库基本概念
数据库:信息存储的仓库,包括⼀系列的关系措施!
表:⼀个数据库中可以有若⼲张表(形式上你可以看出我们⽇常⽣活中建⽴的表)
字段:表⾥⾯的信息会分若⼲个栏⽬来存,这些栏⽬呢,我们在数据库技术中叫"字段",栏⽬⾥⾯存的具体信息叫"字段值"
记录:⼀条信息我们叫⼀条记录
⼀个数据库管理系统中可以建⽴若⼲个数据库,每个数据库中⼜可以建⽴若⼲张表,每张表中可以有若⼲条记录。
MySQL⽀持的数据类型
数值类型
整数类型
tinyint、smallint、mediumint、int和bigint
zerofill属性
配合int(数字)来⽤,表⽰显⽰的时候⼀个显⽰宽度
主键
主键可以唯⼀标识某条记录的⼀个字段或者多个字段
create table 表名(字段名称 类型 primary key,…);
create table 表名(字段名称1 类型,…,primary key(字段名称1));
删除:
alter table 表名 drop primary key;
注意:如果字段具有auto_increment属性必须先删除auto_increment属性
⼩数的表⽰
①浮点数
单精度(float):单精度的浮点数精确到⼤约7位⼩数位(整数部分加上⼩数部分的位数)
双精度精度(double):双精度的浮点数精确到⼤约15位⼩数位(整数部分加上⼩数部分的位数)
②定点数
decimal(7,2)
⽇期类型
DATETIME是常⽤的⽇期类型
create table t1(dt datetime);
insert into t1 values(now());
字符串类型
CHAR(M) M为0~255之间的整数,表⽰可以存M个字符(不管是中⽂还是英⽂字符总共个数是M个就OK)
VARCHAR(M) M为0~65535之间的整数,表⽰可以存M个字符,具体M最⼤多⼤和字符集有密切关系
注意varchar列的最⼤的存储空间是65,532字节,如果是英⽂字符集(⼀个英⽂字符占1个字节)就是可以放65532个英⽂字符。⾃⼰在实际开发的过程中M设置的值,应该从⾃⼰的实际需求去考虑,⽽不是最⼤能存多少个字符,因为超过最⼤能设定的字符数会⾃动报错或者警告!
TINYTEXT 允许长度0~255字符
TEXT 允许长度0~65535字符
MEDIUMTEXT 允许长度0~16,777,215字符
LONGTEXT 允许长度0~4,294,967,295字符
注意点:
char与varchar列的区别
char类型的字符所占的存储空间是固定,不管你⽤的时候存了⼏个字符,它所占的空间都是你当初设定的字符空间。⽐如char(255) 哪怕你存的只是1个a,那么它也是站255个字符长度的空间!
varchar列所占的存储空间是可变的,根据存⼊的字符长度来确定实际占多少的空间! varchar(255) 实际所占的空间就是实际字符的长度+1个字节!varchar(超过255) 实际所占的空间就是实际字符的长度+2个字节!
python多线程gil锁
昵称代码转化在检索时,char列删除尾部的空格,⽽varchar则保留这些空格。
选择:由于char是固定长度,所以它的处理速度⽐varchar快,但是缺点是浪费存储空间。所以对于那些长度变化不⼤的数据可以选择此列enum类型
create table t1(flag enum(‘a’,‘b’,‘c’,‘d’));
insert into t1 values(‘a’),(‘a’),(‘f’);
set类型
⾥⾯可以包含0~64个成员
create table t1(flag set(‘a’,‘b’,‘c’,‘d’));
insert into t1 values(‘a,b’),(‘a,d,a’);
Mysql的使⽤⼊门
SQL分类
DDL(Data Definition Languages)语句
数据定义语句,通过这类语⾔可以对数据库进⾏创建删除更改
DML(Data Manipulation Language)语句
数据操纵语句,⽤于添加、删除、更新和查询数据库记录并检查数据完整性
DCL(Data Control Language)语句ssm框架制作红文化网站
数据控制语句,通过此类语句可以对数据库的相关权限进⾏设置
DDL语句
对数据库内部的对象进⾏创建、删除、修改等操作的语⾔,DDL语句更多的是由数据库管理员(DBA)使⽤,开发⼈员⼀般很少使⽤
动态英文登录mysql之后就可以使⽤sql语句对数据库进⾏各种操作啦!
show databases; 查看数据库列表
创建数据库
create database 数据库名;
选择要操作的数据库:USE 数据库; 对于要操作的数据库我们需要使⽤use来选择⼀下!
查看数据库中所有的数据表show tables;
删除数据库
drop database 数据库名称;
创建表
创建表
create table 表名(字段1名 字段1类型 列的约束条件,字段2名 字段2类型 列的约束条件,…);
创建完表之后可以查看表的定义
desc 表名;
查看创建表的SQL语句
show create table 表名 \G
\G选项使得记录能够按照字段竖向排列,以便更好地显⽰内容较长的记录,\G后⾯⽆需再加分号
删除表
drop table 表名;
修改表
修改表的字段类型
alter table 表名 modify [column] 字段定义 [first|after 字段名];
增加表字段
alter table 表名 add [column] 字段定义 [first|after 字段名];
删除表字段
alter table 表名 drop [column] 字段名;
字段改名
alter table 表名 change [column] 旧的字段名 字段定义 [first|after 字段名];
注:change与modify都可以修改表的定义,不同的是change后⾯需要接两次列名,不⽅便,但是优点是change可以修改字段名称
修改字段排列排序
前⾯介绍的字段增加和修改语法(add/change/modify)中,都有⼀个可选项first|after 字段名,这个选择可 以⽤来修改字段在表中的位置新增的字段默认是加载在表中最后位置,⽽change/modify 默认都不会改变字段的位置
alter table t1 modify id2 tinyint after id1;
注意:change/first|after 字段名 这些关键字都是属于MySQL在标准SQL上的扩展,在其他的数据库上不⼀定适⽤
更改表名
alter table 表名 rename [to] 新的表名;
DML语句
插⼊记录
insert into 表名(字段1,字段2,字段3,…,字段n) values(值1,值2,值3,…,值n);
也可以不⽤指定字段名,但是values后⾯的顺序应该和字段的排序⼀致
⼀次性插⼊多条数据
insert into 表名(字段1,字段2,字段3,…,字段n) values
(值1,值2,值3,…,值n),
(值1,值2,值3,…,值n),
(值1,值2,值3,…,值n);
更新记录
更新⼀个表
update 表名 set 字段1=值1,字段2=值2,…字段n=值n [where 条件];
更新多个表中的数据
mysql入门基础教程update 表1,表2,…表n set 表1.字段1=表达式1,表n.字段n=表达式n [where 条件];
注:多表更新更多的⽤在根据⼀个表的字段来动态的更新另外⼀个表的字段
简单实例:
update t1,t2 set t1.age=2000,t2.age=3000 where t1.id=1 and t2.id=1;
删除记录
删除表单中的数据
delete from 表名 [where 条件];
删除多个表中的数据
delete 表1,表2,…表n from 表1,表2,…表n [where 条件];
不管是单表还是多表,不加where条件将会把表中的所有记录删除,所以操作时⼀定要⼩⼼。查询记录
查询 select * from 表名;
查询不重复的记录
SELECT distinct field1,field2 FROM 表名;
只要field1,field2任何⼀个字段有不同就会被选择!
⼀般使⽤distinct,只筛选⼀个字段!
条件查询
注:条件字段⽐较符号:
=,<,>,>=,<=,!=等⽐较运算符
多个条件之间可以使⽤or and等
where 后⾯接条件
select * from 表名 where 条件
排序和限制
排序:
asc:由低到⾼,也是默认值
select * from employee order by salary asc;
desc:由⾼到底
select * from employee order by salary desc;
多个字段排序
select * from employee order by salary desc,id desc;
限制:
在语句的最后⾯ 加上limit 数字1,数字2 来进⾏查询数量的限制。
limit 数字1,数字2 数字1代表从第⼏条记录开启取(是从0开始的),数字2代表取⼏条!
聚合
sum求和
select sum(字段名) from 表名;
count记录总数
select count(|字段名) from 表名;
max最⼤值
select max(字段名) from 表名;
min最⼩值
select min(字段名) from 表名;
GROUP BY分类聚合
select department,sum(salary) from employee group by department;
WITH ROLLUP分类聚合后的结果进⾏再汇总
select sum(salary) from employee group by department with rollup;
HAVING
注意:having和where的区别在于,having是对聚合后的结果进⾏条件过滤,⽽where是在聚合前就对记录进⾏过滤,应该尽可能的对记录进⾏先过滤!
select sum(salary) from employee group by department having sum(salary)>1000;
在⼀起使⽤:select sum(id),max(id),min(id),count(*) from a1;
>表连接
需求:显⽰多个表中的字段的时候即可使⽤表连接
连接分类
内连接:选取两张表中相互匹配的记录
外连接:不仅仅选取两张相互匹配的记录,并且会选出其他不匹配的记录
举例:
内连接:select 表.字段,… from 表1名,表2名,… where [匹配的条件⽐如 表1.字段=表2.字段];
select 语句可以给字段起别名!直接写在需要查询显⽰的字段的后⾯就ok
给表起别名
外连接redis分布式锁和zk锁的区别
1)左连接
概念:包含左边表中的所有记录(包括右表中没有和它匹配的记录)
select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
2)右连接
概念:包含右边表中的所有记录(包括左表中没有和它匹配的记录)
左连接和右连接是可以相互转换的!
⼦查询
需求:⼀个查询需要另外⼀个查询的结果参与的时候
⽤于⼦查询的关键字:
in
语法:select * from employee where id in(select eid from employee_late);
in 在…⾥⾯
注意点 in后⾯的⼦语句必须只返回⼀个字段
若查询结果唯⼀(只有⼀条)可以使⽤=代替in
not in
与in相反
exists
语法:select语句 where exists(select 语句);
exists:后⾯那个⼦语句有没有查询出记录来,如果查询出记录来返回true,否则就是false
并且查询出来的记录的具体的值是NULL也是没有关系,也是返回true.
not exits
与exists相反
1)select * from emp where deptno in(select deptno from dept);
2)若查询结果唯⼀可以使⽤=代替in
select * from emp where deptno=(select deptno from dept limit 1);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论