[MySQL] 零基础学MySQL 04
本博客是【韩顺平讲MySQL】零基础一周学会MySQL -sql mysql教程 mysql视频 mysql入门视频的学习笔记
文章目录
- 修改表
- 应用实例
- 数据库CRUD
- insert基本使用
- 案例1
- 案例2
- insert语句的细节
- update语句
- update语句的细节
- delete语句
- delete语句的细节
- select语句——单表
修改表
#添加列
ALTER TABLE tablename
ADD (column datatype [DEFAULT expr] [,column datatype]...);
#修改列
ALTER TABLE tablename
MODIFY (column datatype [DEFAULT expr] [,column datatype]...);
#删除列
ALTER TABLE tablename
DROP (column);
#查看表所有的列
desc 表名;
#修改表名
Rename table 表名 to 新表名
#修改表字符集
ALTER TABLE 表名 CHARACTER SET 字符集;
#修改列名
ALTER TABLE 表名 CHANGE oldname newname 数据类型
应用实例
在员工表emp上增加一个image列,varchar类型(要求在resume后面)。
修改job列,使其长度为60
删除sex列
表名改为employee
修改表的字符集为utf-8
列名name修改为user_name
-- 在员工表emp上增加一个image列,varchar类型(要求在resume后面)。
ALTER TABLE emp ADD image VARCHAR(32) NOT NULL DEFAULT ''AFTER RESUME
-- 修改job列,使其长度为60
ALTER TABLE empMODIFY job VARCHAR(60) NOT NULL DEFAULT ''
-- 删除sex列
ALTER TABLE empDROP sex
-- 表名改为employee
RENAME TABLE emp TO employee
-- 修改表的字符集为utf-8
ALTER TABLE employee CHARACTER SET utf8
-- 列名name修改为user_name
ALTER TABLE employee CHANGE `name` user_name VARCHAR(32)
DESC employee
数据库CRUD
Create:增加
Retrieve:检索
Update:更新
Delete:删除
insert基本使用
使用insert语句向表中插入数据
INSERT INTO table_name [(column [,column...])]
VALUES (value [,value...]);
value和column一一对应,第一个值添加到第一个列里,第二个值添加到第二个列里,以此类推。
案例1
创建一张商品表good(id int ,goods_name varchar(10),price double);
添加两条记录
CREATE TABLE `goods`(id INT,goods_name VARCHAR(10),price DOUBLE);
INSERT INTO goods (id,goods_name,price)VALUES (10,'华为手机',5000);
INSERT INTO goods (id,goods_name,price)VALUES (20,'小米手机',5000);
SELECT * FROM goods;
案例2
使用insert语句向表employee中插入2个员工的信息
INSERT INTO `employee`(user_name,birthday,entry_date,job,salary,RESUME,image)VALUES('郝哥','1970-7-7','2001-09-09','开水果摊的',500,'你是故意找茬是吧,你要不要吧!','萨日朗!');
INSERT INTO `employee`(user_name,birthday,entry_date,job,salary,RESUME,image)VALUES('刘华强','1970-7-8','2002-09-09','拼一拼的',600,'听说你最近一直在找我,你是真想和我拼一下子了','你也算是识抬举的人了')
SELECT * FROM employee;
insert语句的细节
- 插入的数据应与字段的数据类型相同,比如把’abc’添加到INT类型会错误
- 数据的长度应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中
- 在values中列出的数据位置必须与被加入的列的排列位置相对应
- 字符和日期型数据应包含在单引号中
- 列可以插入空值(前提是字段允许为空)
INSERT INTO TABLE VALUE(NULL)
- INSERT INTO tab_name (列名) VALUES (),(),() 形式添加多条记录
- 如果是给表中的所有字段添加数据,可以不写前面的字段名称
- 默认值的使用:当不给某个字段值时,如果有默认值就会添加否则报错
INSERT INTO `goods` (id,goods_name,price)VALUES('abc','小米手机',2000);
INSERT INTO `goods` (id,goods_name,price)VALUES('30','小米手机',2000);
用’30’给int时,在MySQL的底层会尝试把字符串转成int。'30’可以转换成功,'abc’会转换失败。
添加多条记录
INSERT INTO `goods`(id,goods_name,price)VALUES(50,'三星手机',5000),(60,'vivo手机',5000);
SELECT * FROM goods;
如果是给表中的所有字段添加数据,可以不写前面的字段名称
INSERT INTO `goods`VALUES(70,'红米手机',3000);
SELECT * FROM goods;
当不给某个字段值时,如果有默认值就会添加默认值,否则报错。
如果某个列没有指定NOT NULL,那么当添加数据时如果没有指定值,默认会给NULL
如果我们希望指定默认值,可以在创建表时指定NOT NULL DEFAULT 默认值
INSERT INTO `goods`(id,goods_name)VALUES(80,'黑鲨手机');
SELECT * FROM goods;
update语句
使用update语句修改表中的数据
UPDATE tb1_nameSET col_name1=expr1 [,col_name2=expr2...][WHERE where_definition]
如果没有写WHERE条件,相当于对表的所有记录都进行修改
因此一定要慎重!
要求:在上面创建的employee表中修改表中的记录
- 将所有员工薪水修改为5000元
- 将姓名 宋振涛 的员工薪水修改为3000元
- 将 郝哥 的薪水在原有基础上增加1000元
UPDATE employee SET salary=5000
UPDATE employee SET salary=3000WHERE user_name='宋振涛'
UPDATE employee SET salary=salary+1000WHERE user_name='郝哥'
SELECT * FROM employee;
update语句的细节
- update语句可以用新值更新原有表中的各列
- set子句指示要修改哪些列和要给予哪些值
- where子句指定应该更新哪些行。如果没有where子句,则更新所有的行
- 如果需要修改多个字段,可以通过set 字段1=值1,字段2=值2…
UPDATE employee SET salary=salary+1000,job='住医院的',RESUME='瓜瓜瓜'WHERE user_name='郝哥'
SELECT * FROM employee;
delete语句
使用delete语句删除表中数据
delete from tb1_name [WHERE where_definition]
如果后面没有带WHERE条件 ,会将表的所有记录全部删除
一定要小心!一不小心可能就面向监狱编程了
删除表中名为 郝哥 的记录
删除表中所有记录
DELETE FROM employee WHERE user_name='郝哥';
DELETE FROM employee;
SELECT * FROM employee
delete语句的细节
- 如果不使用where子句,将删除表中所有数据
- delete语句不能删除某一列的值(可以使用update设为null或’’)
- 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。drop table 表名;
select语句——单表
基本语法
SELECT [DISTINCT] * | {column1,column2,column3..}FROM tablename;
注意事项
- select指定查询哪些列的数据
- column指定列名
- *号代表查询所有列(|是或者的意思)
- from指定查询哪张表
- DISTINCT可选,指显示结果时,是否去除掉重复数据
#提前准备好的数据
CREATE TABLE student(id INT NOT NULL DEFAULT 1,`name` VARCHAR(20) NOT NULL DEFAULT '',chinese FLOAT NOT NULL DEFAULT 0.0,english FLOAT NOT NULL DEFAULT 0.0,math FLOAT NOT NULL DEFAULT 0.0);
INSERT INTO student (id,`name`,chinese,english,math) VALUES(1,'韩顺平',89,78,90);
INSERT INTO student (id,`name`,chinese,english,math) VALUES(2,'张飞',67,98,56);
INSERT INTO student (id,`name`,chinese,english,math) VALUES(3,'宋江',87,78,77);
INSERT INTO student (id,`name`,chinese,english,math) VALUES(4,'关羽',88,98,90);
INSERT INTO student (id,`name`,chinese,english,math) VALUES(5,'赵云',82,84,67);
INSERT INTO student (id,`name`,chinese,english,math) VALUES(6,'欧阳锋',55,85,45);
INSERT INTO student (id,`name`,chinese,english,math) VALUES(7,'黄蓉',75,65,30);
SELECT * FROM student;
#查询表中所有学生的信息
SELECT * FROM student;
#查询表中所有学生的姓名和对应的英语成绩
SELECT `name`,english FROM student;
#过滤表中重复数据distinct
SELECT DISTINCT english FROM student;
#要查询的记录,每个字段都相同,才会去重
SELECT DISTINCT `name`,english FROM student;#这样不会去重
使用表达式对查询的列进行运算
SELECT * | {column1,expression,column2,expression,..}FROM tablename;
在select语句中使用as语句
SELECT columnname as 别名 FROM 表名;
练习
- 统计每个学生的总分
- 在所有学生总分加10分
- 使用别名表示学生分数
SELECT `name`,(chinese+english+math) FROM student;
SELECT `name`,(chinese+english+math+10) FROM student;
SELECT `name` AS '姓名',(chinese+english+math+10) AS total_score FROM student;
练习
- 在赵云的总分上增加60%
- 统计关羽的总分
- 使用别名表示学生的数学分数
SELECT `name`,((chinese+english+math)*1.6) FROM student WHERE `name`='赵云' ;
SELECT `name`,(chinese+english+math) FROM student WHERE `name`='关羽';
SELECT math AS '数学成绩' FROM student;
在where子句中经常使用的运算符
图片来自【韩顺平讲MySQL】零基础一周学会MySQL -sql mysql教程 mysql视频 mysql入门
练习
- 查询姓名为赵云的学生成绩
- 查询英语成绩大于90分的同学
- 查询总分大于200分的所有同学
SELECT * FROM student;
SELECT * FROM student WHERE `name`='赵云';
SELECT * FROM student WHERE english>90;
SELECT * FROM student WHERE (chinese+english+math)>200;
练习
使用where子句,完成练习
- 查询math大于60并且(and)id大于4的学生成绩
- 查询英语成绩大于语文成绩的同学
- 查询总分大于200分并且数学成绩小于语文成绩的姓韩的学生
SELECT * FROM student;
SELECT * FROM student WHERE math>60 AND id>4;
SELECT * FROM student WHERE english>chinese;
SELECT * FROM student WHERE (chinese+english+math)>200 AND math<chinese AND `name` LIKE '韩%';
#韩%表示名字以韩开头的就可以
练习
- 查询英语分数在80-90之间的同学
- 查询数学分数为89,90,91的同学
- 查询所有姓李的学生成绩
- 查询数学分数>80,语文分>80的同学
#between and 是闭区间 下面两句sql语句是等价的
SELECT * FROM student WHERE english BETWEEN 80 AND 90;
SELECT * FROM student WHERE english>=80 AND english<=90;
#下面两个sql语句是等价的
SELECT * FROM student WHERE math=89 OR math=90 OR math=91;
SELECT * FROM student WHERE math IN (89,90,91);SELECT * FROM student WHERE `name` LIKE '李%';SELECT * FROM student WHERE math>80 AND chinese>80;
练习
- 查询语文分数在70-80之间的同学
- 查询总分为189,190,191的同学
- 查询所有姓李或者姓宋的同学
- 查询数学比语文多30分的同学
SELECT * FROM student WHERE chinese BETWEEN 70 AND 80;
SELECT * FROM student WHERE (chinese+english+math) IN (189,190,191);
SELECT * FROM student WHERE `name` LIKE '李%' OR `name` LIKE '宋%';
SELECT * FROM student WHERE (math-chinese)>30;
使用order by子句排序查询结果
SELECT column1,column2,column3...FROM table;order by column asc|desc,...
- order by指定排序的列,排序的列既可以是表中的列名,也可以是select语句后指定的列名
- asc升序[默认] desc降序
- order by子句应该位于select语句的结尾
练习
- 对数学成绩排序后输出[升序]
- 对总分按从高到低的顺序输出
- 对姓李的学生成绩排序输出(升序)
SELECT * FROM student ORDER BY math;
#select math from student order by math;
SELECT `name`,(chinese+english+math) AS total_score FROM student ORDER BY total_score DESC;
SELECT `name`,(chinese+english+math) AS total_score FROM student WHERE `name` LIKE '李%' ORDER BY total_score;
今天一下午没动mysql,晚上再用时它突然自己犯病了。我把电脑休眠前用net stop mysql停止服务,并且关闭了Sqlyog,但是它还是不知道为什么就犯病了。
百度一搜,找了个方法:在安装mysql的bin目录下输入mysqld --install
然后再输入net start mysql,它就又好了。
参考博客是cmd中输入net start mysql 提示:服务名无效或者MySQL正在启动 MySQL无法启动
希望它明天别再犯病了orz
[MySQL] 零基础学MySQL 04相关推荐
- [MySQL] 零基础学MySQL 08
本博客是[韩顺平讲MySQL]零基础一周学会MySQL -sql mysql教程 mysql视频 mysql入门视频的学习笔记 文章目录 自增长 MySQL索引 索引机制 创建索引 删除索引.查询索引 ...
- 零基础学Web 04(style标签)
零基础学Web 04 style元素 定义 <style>标签用于为HTML文档定义样式信息. 属性 实例 <!DOCTYPE html> <html> <h ...
- [MySQL] 零基础学MySQL10
本博客是[韩顺平讲MySQL]零基础一周学会MySQL -sql mysql教程 mysql视频 mysql入门视频的学习笔记 文章目录 MySQL表类型和存储引擎 三种存储引擎表使用案例 如何选择表 ...
- 零基础学 MySQL
1 一个问题 2 解决之道 2.1 解决之道-文件.数据库 2.2 MySQL 数据库的安装和配置 ==> 视频链接 2.3 使用命令行窗口连接 MYSQL 数据库 2.4 操作示意图 3 Na ...
- php公用一个尾部,19.2 共用显示部分 - 19.2.2 共用尾部页面 - 《零基础学PHP+MySQL (零基础学编程)》 - D云...
19.2.2 共用尾部页面 在上面介绍了PHP论坛的共用头部,接下来介绍PHP论坛的共用尾部页面的建立.共用尾部页面是用来显示网站的版权所有,程序的代码如代码19.2所示. 代码19.2 共用尾部页面 ...
- java零基础Ⅲ-- 4.Mysql基础
java零基础Ⅲ-- 4.Mysql基础 MySQL安装配置 MySQL数据库的安装和配置 软件下载 特别说明 安装步骤 使用命令行窗口连接MYSQL数据库 Navicat 安装和使用 介绍:图形化M ...
- MySQL零基础从入门到精通(函数篇)
MySQL零基础从入门到精通(函数篇) 在MySQL中,为了提高代码重用性和隐藏实现细节,MySQL提供了很多函数.函数可以理解为别人封装好的模板代码. 分类 聚合函数 数学函数 字符串函数 日期函数 ...
- proteus仿真micropython_【雕爷学编程】MicroPython动手做(04)——零基础学MaixPy之尝试运行...
1.hello micropython #MicroPython动手做(04)--零基础学MaixPy之基本示例 #程序之一:hellomicropython #MicroPython动手做(04)- ...
- 零基础学习MySQL
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 经过一段时间的筹备和整理,万里数据库<零基础学习MySQL>课程正式在腾讯课堂上线了. 课程地址:htt ...
最新文章
- 现代化医学信息管理c语言,山西医科大学_院校信息库_阳光高考
- 千兆网卡为什么慢_千兆宽带普及率不到1% 消费者为何不愿意用千兆宽带?
- Git Submodule
- Vue.js-Day03-PM【组件通信(安装Vetur插件、父子组件通信、子父组件通信)、项目发送与启动(项目发给别人、启动别人的项目)】
- 为什么大部分程序员看不起PHP这门语言?
- 51nod---无法表示的数
- c 自定义实现string类 clear_CC++语言15|类的继承和派生实现代码重用、扩充
- Java笔记05-Collection、泛型、迭代器
- 网络安全防护部署,升级支持IPv6
- 作者:曹建峰,男,腾讯研究院版权研究中心研究员,主要从事网络安全、数据保护、网络版权与内容产业等互联网法律政策研究工作。...
- 廖雪峰JS教程--条件判断
- 京东探索研究院 34 篇论文入选 CVPR 2022
- Java从入门到精通——数据库篇Mongo DB 导出,导入,备份
- 部署Django工程
- 2016、11、17
- 2022中国边缘计算企业20强
- 如何解读springboot 中约定大于配置、JPA是什么、咋用
- Python入门学习(五)
- 拼团返利模式玩法VS最新拼团的商业模式
- 万象优鲜生鲜配送系统源码 团队开发
热门文章
- LVTTL转LVDS GM8285C,28位LVDS发送器,替代GM8283
- windows服务器署站点,Windows Server配置学习心得-web服务器的搭建和部署,配置一个BLOG站点...
- 从0开始学Unity做SLG系列(GameFramework框架)
- Typora+MarkDown
- 基于Scrapy的链家二手房爬虫
- 利用第三方平台验证码进行识别
- 投稿时Cover Letter的重要性
- html bs架构调用客户端打印机用客户端及客户端局域网打印机打印,使用ScriptX.cab控件...
- Linux虚拟机不显示IP地址解决方法(亲测有效)
- 用python写一个有AI的斗地主游戏(二)——简述后端代码和思路