数据库03 /库、表、记录的详细操作、单表查询

1. 库的详细操作

2.1 创建数据库

1.1 语法
create database 数据库名 charset utf8;
1.2 数据库命名规则
可以由字母、数字、下划线、@、#、$
区分大小写 -- 表名不区分
唯一性
不能使用关键字如 create select
不能单独使用数字
最长128位
基本上跟python或者js的命名规则一样

2.2 数据库的相关操作

1 查看数据库
show databases;
show create database db1;
select database(); -- 查询当前所使用的数据库
2 选择数据库
USE 数据库名
3 删除数据库
DROP DATABASE 数据库名;
4 修改数据库
alter database db1 charset utf8;

3. 表的详细操作

3.1 创建表 create

-- 语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
); -- 注意:
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选、非必须,宽度指的就是字段长度约束(指的是在内存中开辟空间的大小),
例如:char(10)里面的10
3. 字段名和类型是必须的

3.2 查看表 show

mysql> describe t1;  -- 查看表结构,可简写为:desc 表名
mysql> show create table t1\G; -- 查看表详细结构,可加\G(分行去显示)

3.3 修改表 alter

1. 修改表名
alter table 表名 rename 新表名;
2. 增加字段
alter table 表名 add 字段名 数据类型 [完整性约束条件…];
-- 注意这里可以通过逗号来分割,一下添加多个约束条件
alter table 表名 add 字段名 数据类型 [完整性约束条件…];
alter table 表名 add 字段名 数据类型 [完整性约束条件…] first;
-- 添加这个字段的时候,把它放到第一个字段位置去。
alter table 表名 add 字段名 数据类型 [完整性约束条件…] after 字段名;
-- after是放到后的这个字段的后面去了,-通过一个first和一个after就可以将新添加的字段放到表的任意字段位置了。
3. 删除字段
alter table 表名 drop 字段名;
4. 修改字段
alter table 表名 modify 字段名 数据类型 [完整性约束条件…];
alter table 表名 change 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
-- change比modify还多了个改名字的功能,这一句是只改了一个字段名
alter table 表名 change 旧字段名 新字段名 新数据类型 [完整性约束条件…];
-- 这一句除了改了字段名,还改了数据类型、完整性约束等等的内容
alter table 表名 change 旧字段名 新字段名 新数据类型 [完整性约束条件…] after id;
5.建完表之后给字段添加外键属性
-- 给一个字段添加外键属性的语句:alter table 表2名 add foreign key(表2的一个字段) references 表1名(表1的一个字段);
注意一点:在mysql里面表名是不区分大小写的,如果你将一个名为t1的(小写的t1)改名为一个T1(大写的T1),是完全没用的,因为在数据库里面表名都是小写的。

4. 行(记录)的详细操作

4.1 介绍

1.MySQL数据操作: DML
2.在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括
- 使用INSERT实现数据的插入
- UPDATE实现数据的更新
- 使用DELETE实现数据的删除
- 使用SELECT查询数据

4.2 记录的增加(插入)insert

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 …;
-- 将从表2里面查询出来的结果来插入到我们的表中,但是注意查询出来的数据要和我们前面指定的字段要对应好
5.插入一条数据
INSERT INTO 表名 VALUE (值1,值2,值3…值n);
-- 只能插入一条数据

4.3 记录的修改(更新)update

语法:
UPDATE 表名 SET
字段1=值1, -- 注意语法,可以同时来修改多个值,用逗号分隔
字段2=值2,
WHERE CONDITION; -- 更改哪些数据,通过where条件来定位到符合条件的数据

4.4 记录的删除 delete

语法:
DELETE FROM 表名
WHERE CONITION; -- 删除符合条件的一些记录
delete from t3; 删除所有的数据,但是不会重置自增字段的数据号
delete from t3 where id = 1;删除指定的数据,删除id字段数据为1的那一行记录
清空表
truncate 表名; 自增字段会重置

4.5 记录的查询 select

之前写的查询语句是这样的:select id,name from employee;
实际上在select每个字段的时候,省略了一个表名,有的人可能会这样写
select employee.id,employee.name from employee;

5. 单表查询

5.1 关键字执行的优先级

执行顺序:
- 1.from
- 2.where
- 3.group by
- 4.having
- 5.select
- 6.distinct
- 7.order by
- 8.limit 具体释义:
- 1.找到表:from
- 2.拿着where指定的约束条件,去文件/表中取出一条条记录
- 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
- 4.将分组的结果进行having过滤
- 5.执行select
- 6.去重distinct
- 7.将结果按条件排序:order by
- 8.限制结果的显示条数 四则运算:
- SELECT salary*12 FROM employee; 自定义显示格式 concat用法
- SELECT CONCAT('姓名: ',name,' 年薪: ', salary*12) AS Annual_salary FROM employee;

5.2 where约束

1. 比较运算符:> < >= <= <> != (<>相当于!=)
SELECT name FROM employee WHERE post='sale';
2. between 10 and 15 值在10到15之间
mysql> select * from employee where id between 10 and 15
3. in(80,90,100) 值是80或90或100
select * from employee where id in(1,3,6) 等价于id=1 or id=3 or id=6;
4. like 'egon%'
pattern可以是%或_, %表示任意多字符_表示一个字符
select * from employee where name like "wu%";
select * from employee where name like "al_";
select * from employee where name like "al__";
mysql> select * from employee where name like "al___";
-- 三个下划线的无法匹配到alex,结果为空
5. 逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not
select * from employee where id>10 and name like "al%";
select * from employee where not id>10; -- id小于等于10的,not取反

5.3 分组查询 group by/分组,分组的原因

分组:
- 将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等 1.select * from employee group by post;
* 分组后默认拿的是每组的第一个的数据记录
2.ONLY_FULL_GROUP_BY(严格模式)
ONLY_FULL_GROUP_BY:限制必须是分组依据,或集合函数得到的统计结果
-- 非分组依据,非统计结果对于分组就没有意义
3.分组时可以跟多个条件,那么这个多个条件同时重复才算是一组,group by 后面多条件用逗号分隔
select post,max(salary) from employee group by post,id;
4.如果我们用设置了unique约束的字段作为分组的依据,则每一条记录自成一组,这种分组没有意义
多条记录之间的某个字段值相同,该字段通常用来作为分组的依据 5.GROUP BY关键字和GROUP_CONCAT()函数一起使用
比如说我想按部门分组,每个组有哪些员工,都显示出来,怎么搞
- SELECT post,GROUP_CONCAT(name) FROM employee GROUP BY post;
按照岗位分组,并查看组内所有成员名,通过逗号拼接在一起
- SELECT post,GROUP_CONCAT(name,':',salary) as emp_members FROM employee GROUP BY post;

5.4 聚合函数

1.聚合函数聚合的是组的内容,若是没有分组,则默认一组
注意:where后面不能写聚合函数
2.SELECT COUNT(*) FROM employee;
-- count是统计个数用的
SELECT COUNT(*) FROM employee WHERE depart_id=1;
-- 后面跟where条件的意思是统计一下满足depart_id=1这个的所有记录的个数
3.SELECT MAX(salary) FROM employee;
-- max()统计分组后每组的最大值,这里没有写group by,那么就是统计整个表中所有记录中薪资最大的,薪资的值
4.SELECT MIN(salary) FROM employee;
5.SELECT AVG(salary) FROM employee;
6.SELECT SUM(salary) FROM employee;
SELECT SUM(salary) FROM employee WHERE depart_id=3;
7.group_concat:分组后select查询的字段只能是分组依据,想要获取组内的其他相关信息,需要借助此函数

5.5 having 分组再过滤

1.having过滤后面的条件可以使用聚合函数
- select post ,max(salary) from employee group by post having max(salary)>20000; 2.having的语法格式和where是一模一样的,只不过having是在分组之后进行的进一步的过滤,where不能使用聚合函数,having是可以使用聚合函数的
- !!!执行优先级从高到低:where > group by > having
- 1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
- 2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,having是可以使用聚合函数 3.having只能在group by后面运行

5.6 distinct去重

1.select distinct post from employee;
- 注意:select的字段必须写在distinct后面
2.select distinct post,id from employee;
- 这句话,意思就是post和id两个组合在一起同时重复的才算是重复数据
3.select count(distinct post) from employee;
- distinct查询出某个字段不重复的记录的条数

5.7 order by 排序

1.升序
select * from employee order by age;
select * from employee order by age asc;
2.降序 desc
select * from employee order by age desc;
3.多条件排序
按照age字段升序,age相同的数据,按照salary降序排列
select * from employee order by age asc,salary desc;

5.8 limit 限制查询的记录数

1.取出工资最高的前三位
SELECT * FROM employee ORDER BY salary DESC LIMIT 3;
-- 默认初始位置为0,从第一条开始顺序取出三条 2.SELECT * FROM employee ORDER BY salary DESC LIMIT 0,5;
-- 从第0开始,即先查询出第一条,然后包含这一条在内往后查5条 3.SELECT * FROM employee ORDER BY salary DESC LIMIT 5,5;
-- 从第5开始,即先查询出第6条,然后包含这一条在内往后查5条
4.分页显示,每页显示5条(注意:第二数字5指的是每次显示5条记录)
mysql> select * from employee limit 0,5;
mysql> select * from employee limit 5,5;
mysql> select * from employee limit 10,5;

5.9 模糊匹配(使用正则表达式查询)

前面我们用like做模糊匹配,只有%和_,局限性比较强,所以我们说一个正则,之前我们是不是学过正则匹配,你之前学的正则表达式都可以用,正则是通用的
SELECT * FROM employee WHERE name REGEXP '^ale';
SELECT * FROM employee WHERE name REGEXP 'on$';
SELECT * FROM employee WHERE name REGEXP 'm{2}';

Mysql基础(四):库、表、记录的详细操作、单表查询的更多相关文章

  1. MySQL行(记录)的详细操作一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理

    MySQL行(记录)的详细操作 阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操作: ...

  2. [MySQL数据库之记录的详细操作:增、改、删、单表查询、多表查询]

    [MySQL数据库之记录的详细操作:增.改.删.单表查询.多表查询] 记录详细操作 增.删.改 增: insert t1(字段1,字段2,字段3) values (值1,值2,值3), (值1,值2, ...

  3. day 37 MySQL行(记录)的详细操作

    MySQL行(记录)的详细操作   阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操 ...

  4. MySQL从删库到跑路(五)——SQL查询

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 1.查询所有字段 在SELECT语句中使用星号“”通配符查询所有字段在SELECT语句中指定所有字段select f ...

  5. mysql 数据操作 单表查询 目录

    mysql 数据操作 单表查询 mysql 数据操作 单表查询 简单查询 避免重复DISTINCT mysql 数据操作 单表查询 通过四则运算查询 mysql 数据操作 单表查询 concat()函 ...

  6. mysql 数据操作 单表查询 where 约束 目录

    mysql 数据操作 单表查询 where约束 between and or mysql 数据操作 单表查询 where约束 is null in mysql 数据操作 单表查询 where约束 li ...

  7. mysql 数据操作 单表查询 group by 分组 目录

    mysql 数据操作 单表查询 group by 介绍 mysql 数据操作 单表查询 group by 聚合函数 mysql 数据操作 单表查询 group by 聚合函数 没有group by情况 ...

  8. MySql之行记录的详细操作,创建用户以及库表的授权

    一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...

  9. Mysql数据库(四)表记录的更新操作

    一.插入表记录 1.使用INSERT...VALUES语句插入新纪录 (1)插入完整数据 mysql> desc tb_manager; +-------+------------------+ ...

随机推荐

  1. 实现简易版react中createElement和render方法

    function createElement(type, config, children) { // 1. 创建一个对象 // 2.根据参数config修改这个对象 // 3.把children参数 ...

  2. c# 不同单例的不同意义

    前言 在c#,可能有很多五花八门的单例给你选择,分什么懒汉模式等等什么模式,其实不同的写法对程序是有一定影响的. 正文 为什么需要单例呢?其实我们自己是可以控制单例的,只是单例模式给了我们一个好的设计 ...

  3. Swift 界面跳转

    iOS开发中界面跳转有两种方式,上下跳转和左右跳转. 上下跳转_TO: let secondViewController = SecondViewController() self.presentVi ...

  4. Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法

    最近在工作中遇到了遇到了一个需求需要将TIPTOP中的数据导出成XML并上传到FTP主机中,但是4GL这方面的文档比较少最终决定使用Oracle调用Java的方法,在使用的过程中发现有很多的坑,大部分 ...

  5. CentOS7 开机进入emergency mode

    今天突然操作了一下磁盘挂载,然后系统启动之后,就直接进入emergency模式了,然后只能输入密码进行救援,截图如下: 突然想了一下最近的一次操作,是因为要挂在镜像,然后每次开机都要挂载一次,觉得比较 ...

  6. Merge,Rebase,Cherry-Pick 一文解惑

    代码合并在日常开发中是较为常见的场景,采用合适的合并方式,可以起到事半功倍的效果.对应在 Git 中合并的方式主要有三个,Merge,Rebase,Cherry-Pick. 开始部分会首先介绍一下这三 ...

  7. synchronized与锁升级

    1 为什么需要synchronized? 当一个共享资源有可能被多个线程同时访问并修改的时候,需要用锁来保证数据的正确性.请看下图: 线程A和线程B分别往同一个银行账户里面添加货币,A线程从内存中读取 ...

  8. SpringBoot 2.0 编程方式配置,不使用默认配置方式

    SpringBoot的一般配置是直接使用application.properties或者application.yml,因为SpringBoot会读取.perperties和yml文件来覆盖默认配置: ...

  9. 入门大数据---Hbase 过滤器详解

    一.HBase过滤器简介 Hbase 提供了种类丰富的过滤器(filter)来提高数据处理的效率,用户可以通过内置或自定义的过滤器来对数据进行过滤,所有的过滤器都在服务端生效,即谓词下推(predic ...

  10. MongoDB快速入门教程 (4.4)

    4.5.Mongoose索引和方法 4.5.1.设置索引 let UserSchema = mongoose.Schema({ sn: { type: Number, // 设置唯一索引 unique ...