MySQL基本知识详细讲解
时间:2018-11-06
本文章向大家介绍MySQL基本知识实例讲解,主要包括库操作、表操作、数据类型、表关系、记录的增删该查、单表查询、关键字的执行优先级、多表查询、连表操作、子查询等等,需要的朋友可以参考一下
数据库
- 数据库服务器:运行数据库管理软件的计算机
- 数据库管理软件:mysql,oracle,db2,sqlserver
- 库:文件夹
- 表:文件
- 记录:食物一系列典型的特征
- 数据:描述事物特征的符号
- 数据库的分类:
- 关系型:sqllite,db2,oracle,access,sqlserver,mysql,关系型数据库需要有表结构
- 非关系型:mongodb,redis,memcache:key-vavle结构存储
- 统一字符编码
- utf-8
- 初识SQL语句
- DDL语句:
- DML语句:
- DCL语句:
- 操作文件夹(库)
- 增:create database db1 charset utf-8;
- 查:show create database db1;查看所有show databases;
- 改:alter database db1 charset gbk;
- 删:drop database db1;
- 操作文件(表)
- 切换文件夹: use db1;
- 查看当前所在文件夹:select database;
- 增:create table t1(id int,name char);
- 查:show create table t1;查看所有表:show tables;desc t1;
- 改:alter table t1 modify name char(6);
- 删: drop database db1;
- 操作文件内容(记录)
- 增:insert t1(id,name)values(1,'egon'),(2,'egon2');
- 查:select id,name from t1;(必须切换到当前库目录,否则需要增加库前缀)
- 改:updata db1.t1 set name='SB';updata db1.t1 set name='ALEX' where id=1;
- 删:delete from t1;delete from t1 where id =2;
- 操作文件夹(库)
库操作:
- 语法:
操作文件夹(库)
增:create database db1 charset utf-8;
查:show create database db1;查看所有show databases;
改:alter database db1 charset gbk;
删:drop database db1;
表操作:
- 存储引擎就是存储表的类型,查看mysql支持的存储引擎:show engines;
- 指定表类型/存储引擎
create table t1(id int)engine=innodb;
create table t2(id int)engine=memory;
- 增
语法:
create table 表名(字段名 类型[()])
...
数据类型
* 整数类型:
字符类型
枚举类型和集合类型
约束条件not null 与default
* create table t1(id int(11)unsigned);在int确定数据类型后附加的约束条件
* not null:不能为空如果传空了就是默认值default
* create table t2(
id int,
name char(6)
sex enum('male','female')not null default 'male'
);
约束条件unique key:传入的值是唯一的
* create table department(id int,name char(10) unique);
* create table department(id int,name char(10),unique(id),unique(name));
* 联合唯一:create table services(id int,ip char(15),prot int,unique(id),unique(ipprot));
约束条件:primary key
* 约束:not null unique
* 存储引擎(innodb):对于innodb存储引擎来说,一张表内必须有一个主键
* 单列主键
* create table t17(id int primary key,name char(16));
* 复合主键
* create table t18(ip char(15),port int,primary key(ip,port));
约束条件auto_increment:自增
* create table t19(id int primary key auto_increment);在插入字段的时候只需要插入数据,id会自增
* auto_increment步长与起始设置:
* 查看:show variables like 'auto_inc%'
* 设置步长:
* set session auto_increment_increment=5;
* set global auto_increment_increment=5;
* 设置起始偏移量:
* set global auto_increment_offset=3;
* 起始偏移量<=步长
* 使用delete表清空后,会记录上次自增到什么位置,再传值的时候会从上次结束的地方开始
* 使用truncate清空表后不会出现上述情况
约束条件foreign key建立表之间的关系
* 先建被关联的表,并且保证被关联的字段是唯一的,再建关联的表
* create table dep(id int primary key,mame char(16),comment char(6));
* create table emp(id int primaty key,name char(10),sex enum('male','female'),dep_id int,foreign key(dep_id) references dep(id));
* 插入数据:
* 先往被关联的表插入记录
* 再往关联表插入记录
* 删除数据:
* 先删除关联的数据
* 再删除被关联的数据
* 在建立关联表时:在foreign ket加上 on delete cascade与on update cascade 没有逗号
* 尽量不要去建立表关系,为了方便扩展尽量在逻辑层面去设计表关系
表关系之多对一
* 一个表的多条记录对应另外一个表的一条记录
表关系之多对多
* 一个表的一条记录对应另一个表的多条记录,并且另一个表的一条记录对应一个表的多条记录,解决方法是建立一个中间表,存放两个表之间的表关系
表关系一对一
* 一一对应的关系
记录的增删该查
插入数据:
1. 插入完整数据(顺序插入)
语法一:
INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);
语法二:
INSERT INTO 表名 VALUES (值1,值2,值3…值n);
2. 指定字段插入数据
语法:
INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);
3. 插入多条记录
语法:
INSERT INTO 表名 VALUES
(值1,值2,值3…值n),
(值1,值2,值3…值n),
(值1,值2,值3…值n);
4. 插入查询结果
语法:
INSERT INTO 表名(字段1,字段2,字段3…字段n)
SELECT (字段1,字段2,字段3…字段n) FROM 表2
WHERE …;
更新数据
语法:
UPDATE 表名 SET
字段1=值1,
字段2=值2,
WHERE CONDITION;
示例:
UPDATE mysql.user SET password=password(‘123’)
where user=’root’ and host=’localhost’;
删除数据
语法:
DELETE FROM 表名
WHERE CONITION;
示例:
DELETE FROM mysql.user
WHERE password=’’;
练习:
更新MySQL root用户密码为mysql123
删除除从本地登录的root用户以外的所有用户
单表查询
#语法
SELECT 字段1,字段2... FROM 表名
WHERE 条件
GROUP BY field
HAVING 筛选
ORDER BY field
LIMIT 限制条数
关键字的执行优先级:
from 找到表
where 拿着where指定的约束条件,去文件/表中取出一条条记录
group by 将取出的一条条记录进行分组group by,如果没有group by 则整体作为一组
having 将分组的结果进行having过滤
select 执行select
distinct 去重
order by 将结果按条件排序
limit 限制结果的显示条数
- where 约束:where字句中可以使用:
- 比较运算符:> < >= <= <> !=
- between 80 and 100 值在80到100之间
- in(80,90,100)值是80或90或100
- like 'engo%'
pattern可以是%或_,%表示任意多字符,_表示一个字符 - 逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not
- group by
- 分组:按照某个相同的字段进行分类,分组发生在where之后,即分组是基于where之后得到的记录而进行的
- 分组之后,只能取分组的字段,以及每个组聚合结果
- select post from employee group by post;
- 聚合函数
max 最大 min 最小 avg 平均 sum 求和 count 计数 每个职位有多少个员工 select post count(id) from employee group by post; select post,group_concat(name) from employee group by post;得出每个分组中的人数
- 如果我们用unique的字段作为分组依据,则每条记录自成一组,这种分组没有意义,多条记录之间的某个字段值相同,该字段通常用来作为分组的依据
- 如果没有group by则默认整体算作一组
-
having过滤条件:在分组之后进行过滤
- order by排序
asc 升序
desc 降序
select * from employee order by age asc;按照年龄升序
select * from employee order by age desc;按照年龄降序
- limit限制打印到屏幕上的条数
select * from employee limit3;
- 正则查询
select * from employee where name regexp '^jin';
多表查询
连表操作:
内连接:只取两张表的共同部分
select * from employee inner join department on employee.dep_id = departement.id;
左连接:在内连接的基础上保留左表的记录
select * from employee left join department on employee.dep_id = departement.id;
右连接:在内连接的基础上保留右表记录
select * from employee right join department on employee.dep_id = departement.id;
全外连接:在内连接的基础上保留左右两个表没有对应关系的记录
使用union将左连接与右连接组合在一起
子查询
1:子查询是将一个查询语句嵌套在另一个查询语句中。
2:内层查询语句的查询结果,可以为外层查询语句提供查询条件。
3:子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字
4:还可以包含比较运算符:= 、 !=、> 、<等
5: 带EXISTS关键字的子查询
EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。
而是返回一个真假值。True或False
当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 通过案例学Python之判断属相
- C语言经典习题100例(七)31-35
- C语言经典习题100例(八)36-40
- 学习笔记:一个MySQL实例有多个Activiti数据库问题
- C语言经典习题100例(九)41-45
- C语言入门系列之1.C语言概述和上机运行简单C程序
- 开发微信小程序,我为什么放弃 setData,使用 upData
- C语言入门系列之3.顺序程序设计和输入输出
- uniapp提交选中的性别的value值
- LeetCode 1422. 分割字符串的最大得分
- LeetCode 64. 最小路径和
- C语言入门系列之4.分支结构程序-关系、逻辑运算和if、switch语句
- LeetCode 62. 不同路径
- 在裸机上部署Pulsar集群 顶
- JNI回调Java