mysql 数据库基础教程(一)
说明:
部分借鉴网络图片内容
本文主要包含mysql中建库,建表和增删改查操作,为了自己以后复习,哎呀~
涉及的知识点都是基础的,索引,事务,锁,备份等下一篇再搞
1.操作数据库与表的命令
(1)创建数据库
方式一:
create database 数据库名 [DEFAULT CHARSET utf8 COLLATE utf8_general_ci];
方括号中为可选内容,分别用于设置数据库的默认编码格式和数据库校对规则:
a. utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。
b. utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。
c. utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。
方式二:
mysqladmin -u root -p create 数据库名:
root用户登录时,可使用这种方式创建数据库,执行完后,再登录即可
(2)删除数据库
方式一:
drop database 数据库名;
方式二:
mysqladmin -u -root -p drop 数据库名;
(3) 选定数据库
use 数据库名;
(4) 列出所有数据库
show databases;
(5) 列出要操作数据库中所有表
show tables;
(6) 显示数据表的属性,属性类型,主键信息,是否为null,默认值等其他信息
show columns from 表名;
(7)显示数据表的详细索引信息,包括PRIMARY KEY (主键)
show index from 表名;
(8) 输出mysql数据管理系统的性能及统计信息
show table status from 数据库名 [like 'xxx'];
show table status from test: 显示名为test数据库中所有表的信息
show table status from test like "tea%": 显示名为test数据库中表名以tea开头所有的表的信息
show table status from test like "tea%"\G: 将显示方式切换为列
2.mysql数据类型
mysql支持多种类型,大致可以分为三类:数值, 日期时间,字符串(字符)类型
(1)数值类型
注意:
a. 关键字int是INTEGER的同义词,关键字dec是DECIMAL的同义词
b. BIT数据类型保存位字段值
c. int(n)代表什么意思?
首先n代表的不是长度,而是字符的显示宽度,不影响int能存多大的值
案例:
#建表
CREATE TABLE `cc` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(100),`gh` int(8) UNSIGNED ZEROFILL NOT null, #需要设置无符号且填充零(UNSIGNED ZEROFILL),才会像下面显示PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET='utf8';#插入数据
insert into cc values(null,'zhangsan',1234);
查看:
(2)日期和时间类型
注意:
TIMESTAMP类型有专有的自动更新特性
(3)字符串类型
注意:
a. char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
b. char和varchar的区别:
char(n) : n是字符数,范围0-255(额外需要1-2个字节来存长度),char是定长,最多存255个字符,不足的部分会用隐藏空格填充,查找效率高
varchar(n): n是字符数,但是最大的值需要通过编码计算,最多65535字节(从中还需要拿出1-2个字节来存长度),同样是65535字节,不同编码一个字符占用的字节不同,所以n能写的最大值就会有不同,varchar是不定长的实际存的多少就是多少,但查询效率低
使用场景: 一般定长的数据选用char类型,比如身份证号,手机号,电话等,长度变化很大的可以使用varchar类型
c. BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
d. BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
3.操作数据表
(1)创建表
CREATE table 表名(`id` INT UNSIGNED AUTO_INCREMENT,`title` VARCHAR(100) NOT NULL, `author` VARCHAR(40) NOT NULL,`submission_date` DATE,PRIMARY KEY ( `id` )
)ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
注意:
a. NOT NULL: 该字段插入的数据不能为NULL
b. AUTO_INCREMENT: 定义列自增,一般用于主键,数值会自动加1
c. PRIMARY KEY: 定义列为主键,也可以定义多个列为主键
d.ENGINE: 设置储存引擎
e. DEFAULT CHARSET: 设置编码
f. AUTO_INCREMENT=8: 设置主键从8开始自增
(2)删除表
drop table 表名; #基本形式
(3)插入表数据
INSERT INTO 表名 ( 字段1, 字段2,...字段n )VALUES( 值1, 值2,...值n ); #基本形式INSERT INTO user VALUES(null,'cc','123456',2); #这种写法需要插入表中全部字段,插入主键时可以插入null或者0,他会自动添加INSERT INTO user VALUES(null,'ee','123456',2),(null,'ff','123456',1); #批量插入INSERT INTO user VALUES(null,'ee','123456',2,NOW()); #NOW()是一个mysql函数,该函数返回日期和时间
4.mysql查询数据
(1)select 字段名1,字段名2,.... from 表名 [where 条件] [limit 返回的条数] [offset 偏移量]:
提示:
a. 可以使用*星号查询全部字段
b. 可以使用where语句来包含任何条件
c. limit语句表示返回的记录数
d. offset语句设置开始查询的数据偏移量,默认情况下偏移量为0
例子:
user表数据:
select * from user limit 3; 查询结果如下:
默认偏移量为0,表示从第0行开始,向后查询3条记录
select * from user limit 3 offset 2;查询结果如下:
设置偏移量为2,表示从第2行开始,向后查询3条记录
select * from user limit 2,4; 查询结果如下:
从第2行开始,向后查询4条记录
(2)where子句
你可以在where子句中指定任何条件,也可以使用and或者or指定一个或多个条件
select * from user where tid <> 3; #查询tid不等于3的所有数据select * from user where gh in (200,300); #查询gh = 200或者300的所有数据
注意:
数据库中常用的是where关键字,用于在初始表中筛选查询。它是一个约束声明,用于约束数据,在返回结果集之前起作用。
group by: 对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值。
having:用于对where和group by查询出来的分组经行过滤,查出满足条件的分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作。
执行顺序: select –>where –> group by–> having–>order by
group by, having, order by后面会说明
5.mysql update更新
UPDATE 表名 SET 字段1=新值, 字段2=新值 [WHERE条件] #基本形式
注意:
update students set age = age + 1; #将所有人的年龄加1#通过替换来更新数据
#把表中user_name字段值中'aa'替换为'bb',条件是id = 1
UPDATE user SET user_name = REPLACE(user_name , 'aa', 'bb') where id = 1;
6.mysql delete语句
DELETE FROM 表名 [WHERE条件] #基本形式
注意: delete,drop,truncate都有删除表的作用,区别在于:
a. delete 和 truncate 仅仅删除表数据,但truncate可用于清空当前表主键增长值信息,drop 连表数据和表结构一起删除
b. delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚,
c. 执行的速度上,**drop>truncate>delete**
7.mysql like子句
SELECT 字段1, 字段2,...字段n FROM 表名WHERE 字段1 LIKE '%ab_' [and/or 字段2='a'] #基本形式
使用百分号 %字符来表示任意字符,如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
使用下划线_表示一个字符
你可以在where子句中使用like子句
案例:
SELECT * FROM object WHERE name LIKE 'java%'; #查询name字段以java开头的所有数据
SELECT * FROM object WHERE name LIKE '_a_'; #查询name字段是3位,并且中间是a的所有数据
注意:
在 where like 的条件查询中,SQL 提供了四种匹配方式。但另外两种不常用
8.mysql union操作符
连接两个或以上select结果集,然后将他们组合成一个结果集,默认会删除重复的数据
select ... 表1 [where条件]union [all | distinct]
select ... 表2 [where条件] #基本形式
aa表数据:
bb表数据:
案例:
select * from aa union select * from bb;查询结果如下:
注意:
a. 如果两个select查询结果列数不一样,使用union操作符会报错
b. 新组合的结果集列名与前面的select查询的结果集一样
案例:
select username,gh from aa union select * from bb; #直接报错,因为前后查询结果列数不一致
select username,gh from aa union select username ,phone from bb; #这样才正确
c. 如果两次查询中有相同的数据,则只会保留一条,如果想保留相同的数据,使用union all即可
9.mysql排序
select * from user order by 字段名1 [降序DESC | 默认ASC升序],.......可以设置多个排序字段 #基本形式
select * from aa order by id asc; 查询结果如下:
注意: 如何实现根据拼音排序:
a. 如果字符集是gbk,直接排序即可,就是拼音排序的
b. 如果字符集是utf-8,需要先将字符集转换为gbk,再进行排序,如下:
SELECT *
FROM aa
ORDER BY CONVERT(username using gbk);
10.mysql group by语句
group by语句根据一个或多个列对结果集进行分组,在分组的列上我们可以使用count,sun,avg等函数
select 字段名1,字段名2,....,函数名 from 表名 [where条件] group by 字段名 #基本形式
案例:
aa表数据:
select * from aa group by username ; 查询结果如下:
注意: 这里没有使用where条件也是可以的,并且分组查询的结果显示了每一组中第一行数据
select username, gh, count(*) from aa group by username ;查询结果如下:
这里count(*)函数用于对每一个分组中,有多少行数据进行统计
select username, sum(gh) from aa group by username;查询结果如下:
这里sum(gh)函数用于统计每一个分组中gh这一列的和
select username, avg(gh) from aa group by username;查询结果如下:
这里avg(gh)函数用于计算每一个分组中gh列的平均值
(1)在分组统计的基础上再进行统计
以上面第二条sql语句为例: 即select username,gh,count(*) from aa group by username
select username, gh, count(*) as 'cou' from aa group by username with rollup ;
查询结果如下:
可以看出的确再次对每一个分组的count()进行了统计count()统计
select username, gh, sum(gh) as 'ghsum' from aa group by username with rollup;
查询结果如下:
如何把上面查询结果中的NULL弄个名字?
select coalesce(username, '总数'), gh, sum(gh) as 'ghsum' from aa group by username with rollup;
coalesce(a,b,c): 如果a=null选择b,b=null选择c,如果a != null,就选择a,就这样
(2)在分组的基础上再进行筛选,使用having
aa表数据:
select *, sum(gh) from aa group by username; 查询结果如下:
现在要求查询分组后sum(gh) > 200的数据,如何查询?
select *, sum(gh) as 'ss' from aa group by username having ss > 200;这样就可以了
having后的判断字段必须是聚合函数返回的结果
11.mysql的连接的使用
你可以在select,update和delete语句中使用mysql的join来来联合多表查询
join按照功能大致分为如下三类:
a. inner join(内连接或等值连接): 获取两个表中字段匹配关系的记录
b. left join(左连接): 获取左表所有记录,即便右表没有对应匹配的记录
c. right join(右连接): 获取右表所有记录,即使左表没有对应匹配的记录
案例:
aa表数据:
bb表数据:
(1)使用inner join
select a.*, b.phone from aa a inner join bb b on a.username = b.username ;
查询结果如下:
inner join也可以直接使用join,效果一样,这里主要是根据on后面的匹配关系查询两表中都有的匹配记录
上面查询也可以等价于:
select a.*, b.phone from aa a, bb b where a.username = b.username ;
这是以前查询两张表的写法
(2)使用left join
select a.*, b.phone from aa a left join bb b on a.username = b.username ;
查询结果如下:
其中aa 为左表,在左连接中会查询左表中所有记录,再根据on后面的匹配关系查询右表中与之匹配的记录
(3)使用right join
select b.username , b.phone, a.username from aa a right join bb b on a.username = b.username ;
查询结果如下:
其中aa为左表,bb为右表,在右连接中会查询右表所有记录,,再根据on后面的匹配关系查询左表中与之匹配的记录
12.mysql null值处理
aa表数据:
select * from aa where username = null; 这样查询的话是查询不到id=15那条记录的
为了处理这种情况,mysql提供了三种运算符:
a. is null: 当列的值是null时,返回true
b. is not null: 当列的值不是null时,返回true
c. <=>:比较操作符(不同于 = 运算符),当比较的两个值相等或都为null时,返回true
关于null的比较是特殊的,你不能使用=null或者!=null来查询,因为null值与其他任何值的比较永远返回null,即null = null返回null
正确的查询是:
#这两种都是可以的
select * from aa where username is null;
select * from aa where username <=> null;
mysql 数据库基础教程(一)相关推荐
- MySQL数据库基础教程
数据库从最初的数据文件的简单集合发展到今天的大型数据库管理系统已经成为我们日常生活中不可缺少的组成部分.如果不借助数据库的帮助,许多简单的工作将变得冗长乏味,甚至难以实现.尤其是象银行.院校和图书馆这 ...
- 膜拜大佬!mysql数据库基础教程课后答案
前言 现在刷抖音经常可以看到一些老外街坊,问他们最想把什么带回自己的国家,我听过很多的回答都是:淘宝,支付宝,美食,微信,外卖,高铁等等. 确实如此,随着国家的快速发展吸引了不少国际上羡慕的目光,更让 ...
- Mysql数据库基础入门教程
Mysql数据库基础入门教程 课程链接:https://www.bilibili.com/video/BV1Qb411x7Yc?p=1 2022/1/22start 一.数据库简介 1.什么是数据库? ...
- MYSQL数据库周德伟教程后题_《MySQL数据库基础实例教程》编者:周德伟,覃国蓉著【摘要 书评 在线阅读】-苏宁易购图书...
商品参数 作者: 编者:周德伟,覃国蓉著 出版社:人民邮电出版社 出版时间:2017-08-01 版次:1 开本:16开 装帧:平装 ISBN:9787115461872 版权提供:人民邮电出版社 基 ...
- MySQL数据库实用教程考核_《MySQL数据库实用教程》郑明秋,蒙连超,赵海侠【pdf】...
内容简介 郑明秋.蒙连超.赵海侠主编的<MySQL数据库实用教程>是作者在多年的数据库开发实践与教学经验的基础上,根据计算机相关专业的职业岗位能力需求及学生的认知规律倾心组织编写的.本教材 ...
- mysql数据库入门教程(5):多表操作(连接查询,子查询,分页查询,联合查询)
前文介绍了单表查询:mysql数据库入门教程(4):查询讲解大全 今天介绍下多表查询 一.连接查询 含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询 先送上下面所讲用到的sql脚本 h ...
- MySQL数据库 --基础
MySQL数据库 --基础 一.数据库介绍 1.1 数据库管理系统 数据库管理系统(DataBase Management System,DBMS)由一个互相关联的数据的集合和一组用以访问这些数据的程 ...
- A First Course in Database Systems(数据库基础教程 第三版)课后答案——2.3.1\2.3.2\2.4.1
A First Course in Database Systems(数据库基础教程 第三版)课后答案--2.3.1\2.3.2\2.4.1 文章目录 2.3.1 2.3.2 2.4.1 数据文件 2 ...
- 郑明秋什么版本的MySQL_《MySQL数据库实用教程》郑明秋,蒙连超,赵海侠著【摘要 书评 在线阅读】-苏宁易购图书...
商品参数 作者: 郑明秋,蒙连超,赵海侠著 出版社:北京理工大学出版社 出版时间:2017-12-01 版次:1 页数:207 开本:16开 装帧:平装 ISBN:9787568250825 版权提供 ...
- mysql connector安装教程_通过安装MySQL Connector/Net实现VS2017 C#编程连接MySQL数据库-网络教程与技术
-亦是美网络...
对编程有一定了解的小伙伴都知道,一般情况下使用微软的visual studio进行编程开发都会搭配自家的SQL server.Access数据库,而开发web程序一般情况下PHP搭配MySQL使用,但 ...
最新文章
- freemarker if判断
- 02.规划过程组表格-采购管理计划
- webpack笔记(2)打包src下的html文件
- 优美的Fibonacci数列与矩阵
- java ee基础知识_Java EE:基础知识
- linux 脚本 整数 赋值,shell基础!!熟悉编程规范与变量
- C++ PAT 乙级 ——1003 我要通过
- 设计模式:观察者(Observer)模式
- HDU 5090 Game with Pearls (贪心)
- freemarker【FTL】常见语法大全
- 【优化求解】基于布谷鸟算法CS实现单目标求解matlab源码
- AutoJs 4.1.1 实战教程
- 通达信c语言编程,通达信编程实例100个;
- hnust Snowman
- 如何安装百度分享按钮
- 数据结构--算法达人修炼学习安排及方法指导
- 哪个城市美女最多?OPPO R11开启“谁是拍照King·仲夏之梦”活动
- 学习java被虐千百遍
- 用于图像识别的神经网络,以及5大应用场景
- http隧道、https、SSL层、http代理、在线代理、socks代理区别
热门文章
- C语言:使用递归解决汉诺塔问题。
- spring相关—IOC容器—使用注解配置bean
- [机器学习实战] 基于概率论的分类方法:朴素贝叶斯
- hadoop 2.7.3 源码编译教程
- centos 6.7 perl 版本 This is perl 5, version 22 安装DBI DBD
- 【云计算】Netflix 开源持续交付平台 Spinnaker
- 关于FND_PROFILE与FND_GLOBLE[Z]
- spring 依赖注入_这几个关于Spring 依赖注入的问题你清楚吗?
- SpringBoot 启动报 Stopping service [Tomcat]
- 解析域名地址并生成win路由增强版