MySQL 数据库中的基础操作

3、表的修改

对表的表名、字段、字段类型、字段长度、约束等进行修改。

3.1 表的名称修改

-- 语法:

ALTER TABLE 库名.表名

RENAME TO 新表名;

-- 将foods表的名字修改为空food
ALTER TABLE test.`foods`
RENAME TO food;

3.2 修改表的字段或者约束(修改表结构)

3.2.1 为表添加/删除主键约束

-- 语法:

ALTER TABLE 库名.表名

ADD PRIMARY KEY(字段名);

-- 为表aa中的字段salary 添加主键约束
ALTER TABLE test.`aa`
ADD PRIMARY KEY(salary);
DESC test.`aa`; -- 查看添加主键约束结果

-- 语法:

ALTER TABLE 库名.表名

DROP PRIMARY KEY;

-- 删除sales表的主键customer_no约束
ALTER TABLE test.`sales`
DROP PRIMARY KEY; -- 删除主键约束

3.2.2 为表添加非空约束

-- 语法:

ALTER TABLE 库名.表名

MODIFY 字段名 数据类型(数据长度) NOT NULL;

-- 修改sales表约束,使客户名称customer_name不允许为空
ALTER TABLE test.`sales`
MODIFY customer_name INT(10) NOT NULL;

3.2.3 修改表中某个字段的名称

-- 语法:

ALTER TABLE 库名.表名

CHANGE 原字段名 新字段名 字段类型(数据长度);

-- 修改表sales,将字段`product_name`名称修改为pct_name
ALTER TABLE test.`sales`
CHANGE product_name pct_name VARCHAR(30);

3.2.4修改表中某个字段的数据类型

-- 语法:

ALTER TABLE 库名.表名

MODIFY [COLUMN] `字段名` 新数据类型(新数据长度);

-- 修改sales表中字段`pct_name`的字段类型为char(20)
ALTER TABLE test.`sales`
MODIFY pct_name CHAR(20); -- 修改数据库长度

3.2.5添加字段

-- 语法:

ALTER TABLE 库名.表名

ADD [COLUMN] `字段名` 数据类型(数据长度);

ALTER TABLE test.`sales`
ADD COLUMN product_name VARCHAR(30);

3.2.6删除表中指定的字段

-- 语法:

ALTER TABLE 库名.表名

DROP COLUMN 字段名;

-- 删除表sales中的字段pct_name (面试题)
ALTER TABLE test.`sales`
DROP COLUMN pct_name;

3.2.7将表中指定字段设置为外键

-- 语法:

ALTER TABLE 库名.表名

ADD CONSTRAINT 外键约束名称 FOREIGN KEY(本表设置为外键字段的名称)

REFERENCES 库名.`被引用字段的表名称`(被引用字段的名称);

-- 为test库中表student的字段classno添加外键约束,
-- 该外键字段的数据引用自表sclass的主键字段cno
ALTER TABLE test.`student`
ADD CONSTRAINT student_classno_fk FOREIGN KEY(classno)
REFERENCES test.`sclass`(cno);

3.2.8删除表中指定字段的外键约束

步骤一:删除外键约束

-- 语法

ALTER TABLE 库名.表名

DROP FOREIGN KEY 外键约束名称;

步骤二:删除外键索引

DROP INDEX 索引名称 ON 库名.表名;

-- 删除test库student表的字段classno的外键约束student_classno_fk
-- 步骤一 删除约束
ALTER TABLE test.`student`
DROP FOREIGN KEY student_classno_fk;
-- 步骤二 删除索引
DROP INDEX student_classno_fk ON test.`student`;

3.2.9修改指定表的表名

-- 语法

RENAME TABLE 库名.旧表名 TO 新表名;

-- 将test库class表的名称修改为classb
RENAME TABLE test.`class` TO classb;

4、 表结构的删除(就是删除表)

-- 语法:

DROP TABLE 库名.表名;

--删除classb表
DROP TABLE test.`classb`;

表中数据的操作

1、往表中插入数据

-- 语法

INSERT INTO 库名.表名(字段名1,字段名2)

VALUES(字段值1,字段值2);

-- 往表zhaosheng3种插入一条数据,学号为3,姓名为郑爽,班号为1,
zsbh字段的值为4 -- 方法一、
INSERT INTO test.`zhaosheng3`
VALUES(3,"郑爽",1,4); -- 方法二、
INSERT INTO test.`zhaosheng4`(xuehao,xingming,banhao,zsbh)
VALUES(4,"郑爽1",2,5);
-- 往表temp种插入100数据,数据来源于employees表
INSERT INTO hrdb.`temp` SELECT employee_id,first_name,salary
FROM hrdb.`employees` LIMIT 100;
-- limit 限制,limit 100,取前100条数据
-- select子句的字段数量、数据类型需要和insert子句中的对应

2、修改表中的数据

语法:

UPDATE 库名.表名

SET 字段名1=新字段值1

WHERE 字段名2=字段值2;

2.1 修改单字段数据

-- 修改student数据库表score中的数据,修改编号为1的记录的姓名为孙琦
UPDATE student.`score`
SET NAME="孙琦"
WHERE id=1;

2.2 修改多字段数据

-- 修改student数据库score 表中数据,修改姓名为李四的记录,将语文成绩修改为81,英语成绩修改为90
UPDATE student.`score`
SET chinese=81,english=90
WHERE NAME="李四";

2.3 修改多条记录的数据

-- 修改student数据库score 表中数据,修改语文成绩大于80的记录,将语文成绩修改为100
UPDATE student.`score`
SET chinese=100
WHERE chinese>80;

3.删除表中的数据

3.1删行

-- 方法一:

-- 语法:

DELETE FROM 库名.表名 WHERE 字段名1=字段值1;(删除指定数据)

-- 重点说明:删除表中数据时,如果不加where默认删除表中所有数据(清空表)

-- 重点说明:使用delete删除表中数据时,delete后不能跟*号,delete不能和*号搭配使用。

-- 删除student库score表中english成绩为84
DELETE FROM student.`score`
WHERE english=84;

3.2删全表

清空score表中所有记录
方法一
DELETE FROM student.`score`; 方法二
TRUNCATE student.`score`;
TRUNCATE school.`test`;

-- TRUNCATE 删除的意思,使用truncate删除的数据,无法恢复,

-- truncate不能和from、where配合使用

4、查询表中的数据(重中之重)

4.1 查询单个表中的数据

4.1.1结构化查询语言-SQL语言

结构化查询语言(Structured QUERY Language或简称为SQL),即SQL语言,是一种应用

最为广泛的关系数据库语言,该语言定义了操作关系数据库的标准语法,几乎所有的关系

数据库管理系统都支持SQL语言。【关系型数据库:mysql、oracle、SQL server、DB2、

sybase】

SQL语言分类:

下面的五大分类要能讲出来

  • DDL(Data Definition Language)(数据定义语言) - Create、Alter、Drop
  • DQL(Data QueryLanguage)(数据查询语言) - SELECT 查询语句
  • DML(Data Manipulation Language)(数据操纵语言) - Insert、Update、Delete
  • DTL(Data Transaction Language)(事务控制语言) - COMMIT(提交)、Rollback(回滚) 事务提交与回滚语句
  • DCL(Data Control Language)(数据控制语言) - GRANT(授权)、Revoke(回收权限) 授予权限与回收权限语句

Select语句语法如下:

(1)SELECT 字段列表

(2)FROM 数据表

(3)where条件

(4)GROUP BY 分组字段

(5)having条件

(6)ORDER BY 排序字段  ASC | DESC

(7)LIMIT START,LENGTH;

【划重点】:select语句中,各子句出现的顺序不能乱,否则报错

-- 逻辑运算符:not 非,and 和,or 或

-- not 表达式:取表达式计算结果相反的数据

4.1.2普通查询

-- 查询员工表(employees)中所有人员的所有信息
SELECT * FROM hrdb.`employees`;
-- 查询员工表中员工编号为101的员工的员工编号、工资
SELECT employee_id,salary
FROM hrdb.`employees`
WHERE employee_id=101;

4.1.3关键字in在查询语句中的用法

说明:当查询条件给出的为多个类似的值时,可以使用关键字IN,不同值之间使用逗

号隔开,

-- 语法

-- in(值1,值2...)

-- 查询工资分别为9000、10000、18000的员工编号、工资
SELECT employee_id,salary
FROM hrdb.`employees`
WHERE salary IN(9000,10000,18000);

4.1.4关键字between...and...的用法

说明:between...and...意思是在...和...之间

-- between 值1 and 值2,意思是在值1和值2之间

-- 查询工资在3000-6000之间的人员的工资、员工编号、职位编号
SELECT salary,employee_id,job_id
FROM hrdb.`employees`
WHERE salary BETWEEN 3000 AND 6000;
-- 查询结果包括边界3000和6000

4.1.5 null关键字在查询语句中的用法

-- 说明:null为空、不确定的意思

-- 说明:

-- is null代表为空的意思, is not null为非空的意思

-- 判断某个字段值为空,不能使用=null

-- 查询部门表中经理编号为空的部门的编号、部门名称、经理编号
SELECT department_id,department_name,manager_id
FROM hrdb.`departments`
WHERE manager_id IS NULL;

4.1.6聚合函数的用法

-- 说明:聚合函数即分组函数,主要包括:求最大值max()函数、最小值min()函数、

-- 平均值avg()函数、求和sum()函数

-- 统计条数count()函数。

-- 查询员工表中的最高工资、最低工资、平均工资、工资总和
SELECT MAX(salary) AS 最高工资,MIN(salary) AS 最低工资,
AVG(salary) AS 平均工资,SUM(salary) AS 工资之和
FROM hrdb.`employees`;
-- as后为别名,as 是单词alias单词的简写,别名的意思
-- as 可以省略

4.1.7计数

-- 查询员工表中的所有人员的工资之和以及人员的数量
方法一
SELECT SUM(salary),COUNT(employee_id)
FROM hrdb.`employees`; 方法二
SELECT SUM(salary),COUNT(*)
FROM hrdb.`employees`;-- *号代表所有记录 方法三
SELECT SUM(salary),COUNT(1)
FROM hrdb.`employees`;-- *号代表所有记录
-- 在部门表中,统计部门表中部门的数量
SELECT COUNT(*) FROM hrdb.`departments`;
SELECT COUNT(manager_id) FROM hrdb.`departments`;

-- 总结:

-- 使用count()函数统计表中记录的数量时:

-- 使用*作为count()函数进行统计时,结果包含所有记录

-- 使用单个字段作为count()函数的参数进行统计时,结果不统计字段值为null 的记录。

4.1.8 分组查询关键字group by用法

-- 说明:

-- group by 字段名/聚合函数, 意思是先通过给定的【字段名/聚合函数】先进行分组,

-- 再对分组后的数据进行分别处理【求和、求平均值、统计数量等】。

-- 查询时,什么时候需要对数据进行分组?

-- 一般查询问题为“每个...”,“各...”的时候,需要对数据进行分组

-- 查询员工表中每个部门人员的平均工资,查询结果显示部门编号、平均工资
SELECT department_id,AVG(salary)
FROM hrdb.`employees`
GROUP BY department_id;
-- 先对employees表的数据进行分组,再对每个组中的数据求平均值

4.1.9 使用group by关键字进行多字段分组

-- 查询不同部门中,不同职位的人员的平均工资,查询结果显示部门编号、职位编号、平均工资
SELECT department_id,job_id,AVG(salary)
FROM hrdb.`employees`
GROUP BY department_id,job_id;

4.1.10对group by分组后的结果数据使用having关键字进行过滤

-- 说明:having关键字,可以对分组后的数据进行过滤,类似于where的作用,但又不同于where.

-- having 后的过滤条件,可以跟字段,也可以跟聚合函数。

-- 查询员工表中不同部门人员的平均工资,查询结果要求只显示平均工资高于12000的部门编号、平均工资
SELECT department_id,AVG(salary)
FROM hrdb.`employees`
GROUP BY department_id
HAVING AVG(salary) >12000;

4.1.11 对查询结果使用order by关键字进行排序

-- 说明:mysql中查询,查询结果默认按升序(从上到下,按从小到大)排列

-- 升序排列:

--不加排序关键字/使用关键字 ASC

-- 降序排列:

-- 使用关键字DESC

-- 排序关键字使用语法:order by 字段名 [asc|desc],

-- 意思是通过给定的字段名将查询结果进行排序(升序或者降序)

-- 查询员工表中所有人员的工资,查询结果按工资高低升序排列,结果显示员工编号、工资

方法一 默认升序排列
SELECT employee_id,salary
FROM hrdb.`employees`
ORDER BY salary; 方法二、使用升序排列关键字asc
SELECT employee_id,salary
FROM hrdb.`employees`
ORDER BY salary ASC; -- asc用于升序排列

4.1.12查询关键字limit的用法-分页查询

-- 说明:limit限制的意思,在sql语句可以对查询结果进行过滤

-- 在mysql中,limit m,n,意思是从第m+1条数据开始取数据,连续取n条数据,显示在查询结果中。

-- 查询员工表中所有人员的工资,查询结果按工资高低降序排列,结果显示工资前四高的员工编号、工资
SELECT employee_id,salary
FROM hrdb.`employees`
ORDER BY salary DESC
LIMIT 4;
-- 查询员工表中所有人员的工资,查询结果按工资高低降序排列,结果显示工资第四高的员工编号、工资
SELECT employee_id,salary
FROM hrdb.`employees`
ORDER BY salary DESC
LIMIT 3,1;
-- 从第3+1条(即第4条)数据开始取数据,只取1条

MySQL 数据库 查 续

MySQL 增删查改 必知必会的更多相关文章

  1. mysql 增删查改

    非关系型数据库关系型数据库Oracle mysql sqlserver db2 Postgresql Sqlite access sqlserver 微软db2 ibm================ ...

  2. php mysql增删查改

    php mysql增删查改代码段 $conn=mysql_connect('localhost','root','root');  //连接数据库代码 mysql_query("set na ...

  3. node.js+mysql增删查改

    数据库和表: -- -- 数据库: `test` -- -- -------------------------------------------------------- -- -- 表的结构 ` ...

  4. 后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)

    1 前言&概述 这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug. 本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到 ...

  5. 后端Spring Boot+前端Android交互+MySQL增删查改

    2021.1.27 更新 已更新新版本博客,更新内容很多,因此新开了一篇博客,戳这里. 1 概述 使用spring boot作为后端框架与Android端配合mysql进行基本的交互,包含了最基本的增 ...

  6. python操作mysql增删查改

    # coding=utf-8 ''' python操作mysql,需安装MySQLdb驱动 安装MySQLdb,请访问 http://sourceforge.net/projects/mysql-py ...

  7. 2016/3/13 MySQL 增删查改 CRUD 用代码实现

    用代码实现数据库数据输入 T-SQL语句 查询语句分几块 ①创建表 create table Car (Code varchar(50) primary key, #primary key 主键 定义 ...

  8. MySQL增删查改语句(入门)

    目录 create alter: insert delete update select 数据库定义语句: create:创建数据库及表对象 drop:删除数据库及表对象 alter:修改数据库及表对 ...

  9. mysql增删查改练习

    建表 班级表 create table class( cid int auto_increment unique, caption varchar(32) not null default '' )c ...

随机推荐

  1. Qt实现的多菜单选择界面

    文章目录 1.效果展示 2.实现代码 2.1 菜单实现代码 2.1.1 头文件 2.1.2 源文件 2.2 应用代码 1.效果展示 这种菜单样式比较常用,实现的方法也有很多种,比如可以直接使用QTab ...

  2. APP常用控件学习理解

    1.TextView 示例: layout_width指的是文本的所占宽度(不一定填充满),layout_height指的是文本所占高(不一定填充满),warp_coonent :包裹文本宽度 mat ...

  3. 2019.12.9Java课堂总结

    今天在课堂上进行了练习.现进行成果及不足汇报: 1.完成了登录界面的设计 2.完成了数据库的连接. 3.完成了数据库表的设计   4.完成了变量的定义与初始化以及get.set的设立. 5.对整体框架 ...

  4. 算法学习笔记:最近公共祖先(LCA问题)

    当我们处理树上点与点关系的问题时(例如,最简单的,树上两点的距离),常常需要获知树上两点的最近公共祖先(Lowest Common Ancestor,LCA).如下图所示: 2号点是7号点和9号点的最 ...

  5. [BZOJ4237]稻草人 题解

    我们考虑分治一下 按\(x\)坐标排序 然后对于每一段的两部分都按\(y\)排序 左右两边都维护一个单调栈 然后考虑右边对左边的贡献就行了 #include <bits/stdc++.h> ...

  6. nginx进程模型解析

    nginx进程模型解析 概念   master会发送请求给worker,用于处理用户的请求,模型图如下 nginx进程分类   master进程(只有1个)    接受信号传递给worker   wo ...

  7. C#设计模式之5-单例模式

    单例模式(Singleton Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/397 访问. 单例模式属 ...

  8. Homekit_温湿度_人体红外_光强_传感器

    市面上大多数,传感器产品多是简单的单个传感器进行售卖,这里我推荐一款四合一的产品,使用Homekit进行控制. 前置需求: 苹果手机一台 四合一传感器一个 USB数据线一根 介绍: 1.外观上是一个小 ...

  9. 怎么把txt转换成excel

    地址: https://jingyan.baidu.com/article/c1465413b2f2c50bfdfc4c61.html

  10. Pycharm 2020.01亲测激活到2089年

    Pycharm 2020.01亲测激活到2089年,注意是2020.01版本. 下载jetbrains-agent.jar 链接: https://pan.baidu.com/s/1w1i15pT38 ...