数据库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. CSS布局之Flex布局

    Flex布局,可以简便.完整.响应式地实现各种页面布局. 浏览器支持:得到所有浏览器的支持.(注:Flex布局将成为未来布局的首选方案)   一. Flex布局的概念 Flex是Flexible Bo ...

  2. Rectangle【思维+模拟】

    Rectangle 题目链接(点击) frog has a piece of paper divided into nn rows and mm columns. Today, she would l ...

  3. os.remove() 删除文件

    概述 os.remove() 方法用于删除指定路径的文件.如果指定的路径是一个目录,将抛出OSError. 在Unix, Windows中有效 语法 remove()方法语法格式如下: os.remo ...

  4. 'ipconfig' 不是内部或外部命令,也不是可运行的程序 或批处理文件

    今天在学习的时候需要找本地ip地址,可是在命令行窗口却显示 百度之后发现原来是环境变量没配置的问题(其实之前是ok的,但应该是anconda安装的时候点了那个一键设置环境变量搞得本地的path里的数据 ...

  5. selenium(4)-针对键盘的操作

    有哪些键盘操作 删除键 空格键 制表键 回退键 回车键 全选 复制 剪切 粘贴 F1-F12 ......其实就是所有键盘都能模拟,包括alt.shift.insert.delete.home等等等. ...

  6. Beta冲刺<4/10>

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺--第四天(05.22) 作业正文 如下 其他参考文献 ... B ...

  7. 运行 docker .... 命令报错

    一.检查 Linux 上是有存在 docker [root@localhost bin]# docker version 不存在 docker 时,可以使用如下命令下载 docker [root@lo ...

  8. Shiro实战教程-刘志敏-专题视频课程

    Shiro实战教程-62人已学习 课程介绍        本教程只介绍基本的 Shiro 使用,不会过多分析源码等,重在使用. 适用人群: 1.了解基于Servlet进行Web应用开发 2.了解Spr ...

  9. leetcode 6 z字型变换

    执行用时 :64 ms, 在所有 Python3 提交中击败了99.74%的用户由题目可知 我们的最终字符串会被摆成 numRows 行,那我们理解为 最终结果是numRows个字符串相加 先建立等于 ...

  10. 在MFC下绘制直线,使用橡皮筋技术,可以使直线效果跟随鼠标移

    void CGraphic1View::OnMouseMove(UINT nFlags, CPoint point) {        if(MK_LBUTTON == nFlags)    {    ...