首页 / MYSQL / MySql数据库基础
MySql数据库基础
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySql数据库基础,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含11950字,纯文字阅读大概需要18分钟。
内容图文
![MySql数据库基础](/upload/InfoBanner/zyjiaocheng/874/0d2bdfc2dc144b3fb2fd03f7dff864e2.jpg)
? 1. 数据库的英文单词: DataBase 简称 : DB
? 2. 什么数据库?
?? * 用于存储和管理数据的仓库。 ? 3. 数据库的特点:
?? 1. 持久化存储数据的。其实数据库就是一个文件系统
?? 2. 方便存储和管理数据
?? 3. 使用了统一的方式操作数据库 -- SQL ? SQL ?1.什么是SQL?
Structured Query Language:结构化查询语言
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。
??
?2.SQL通用语法
1. SQL 语句可以单行或多行书写,以分号结尾。
2. 可使用空格和缩进来增强语句的可读性。
3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。 4. 3 种注释
?? ?* 单行注释: -- 注释内容 或 # 注释内容(mysql 特有)
?? ?* 多行注释: /* 注释 */
??
?3. SQL分类
1) DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等
2) DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
3) DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select, where 等
4) DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等 ? ? DDL:操作数据库、表 ? 1. 操作数据库:CRUD
1. C(Create):创建
* 创建数据库:
?? * create database 数据库名称;
* 创建数据库,判断不存在,再创建:
?? * create database if not exists 数据库名称;
* 创建数据库,并指定字符集
? ? ? ? ? ? ? ? ? * create database 数据库名称 character set 字符集名; ? ? ? ? ? ? ? * 练习: 创建db4数据库,判断是否存在,并制定字符集为gbk
? ? ? ? ? ? ? ? ? * create database if not exists db4 character set gbk;
2. R(Retrieve):查询
?? ? ? * 查询所有数据库的名称:
? ? ? ? ? ? ? ? ? * show databases;
? ? ? ? ? ? ? * 查询某个数据库的字符集:查询某个数据库的创建语句
? ? ? ? ? ? ? ? ? * show create database 数据库名称;
3. U(Update):修改
?? ? ? * 修改数据库的字符集
???? * alter database 数据库名称 character set 字符集名称;
4. D(Delete):删除
??? ?? * 删除数据库
???? * drop database 数据库名称;
?? ? ? * 判断数据库存在,存在再删除
???? * drop database if exists 数据库名称;
5. 使用数据库
??? ?? * 查询当前正在使用的数据库名称
??? ?* select database();
??? ?? * 使用数据库
???? * use 数据库名称;
2. 操作表
1. C(Create):创建
??? 1. 语法:
???? create table 表名(
????? 列名1 数据类型1,
???? ?列名2 数据类型2,
????? ....
????? 列名n 数据类型n
???? );
???? * 注意:最后一列,不需要加逗号(,)
???? * 数据库类型:
????? 1. int:整数类型
????? ?* age int,
????? ?? 2. double:小数类型
?????? * score double(5,2)? 表示数据最多有5位,小数点后占2位
???? ? ? 3. date:日期,只包含年月日,yyyy-MM-dd
????? ?? 4. datetime:日期,包含年月日时分秒? yyyy-MM-dd HH:mm:ss
????? ?? 5. timestamp:时间错类型?包含年月日时分秒? yyyy-MM-dd HH:mm:ss?
????? ?* 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值 ????? ?? 6. varchar:字符串
?????? * name varchar(20):姓名最大20个字符
?????? * zhangsan 8个字符????? 张三 2个字符
???? ??? * 创建表
???? create table student(
???? ? id int,
???? ? name varchar(32),
???? ? age int ,
????? ? score double(4,1),
???? ? birthday date,
???? ? insert_time timestamp
??? ?);
?? ?* 复制表:
? ? ? ? ? ? ?? * create table 表名 like 被复制的表名;?? ?
2. R(Retrieve):查询
?? ?* 查询某个数据库中所有的表名称
???? ?? * show tables;
??? * 查询某个数据库中某个表的字符集
? ? ?? * show? create table 表名;
?? ?* 查询表结构
? ? ? ? * desc 表名;
3. U(Update):修改
??? 1. 修改表名
???? ?? alter table 表名 rename to 新的表名;
??? 2. 修改表的字符集
??? ? ? alter table 表名 character set 字符集名称;
??? 3. 添加一列
???? ?? alter table 表名 add 列名 数据类型;
??? 4. 修改列名称 类型
??? ? ? alter table 表名 change 列名 新列别 新数据类型;
???? ?? alter table 表名 modify 列名 新数据类型;
??? 5. 删除列
??? ? ? alter table 表名 drop 列名;
4. D(Delete):删除
??? * drop table 表名;
??? * drop table? if exists 表名 ; ? ? DML:增删改表中数据 ? 1. 添加数据:
?? ? * 语法:
?? * insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
?? ? * 注意:
??? 1. 列名和值要一一对应。
??? 2. 如果表名后,不定义列名,则默认给所有列添加值
??? ?insert into 表名 values(值1,值2,...值n);
??? 3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来
2. 删除数据:
?? ? * 语法:
?? * delete from 表名 [where 条件]
?? ? * 注意:
?? ?1. 如果不加条件,则删除表中所有记录。
?? ?2. 如果要删除所有记录
???? 1. delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
???? 2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
3. 修改数据:
?? ? * 语法:
??? * update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件]; ? ? * 注意:
??? 1. 如果不加任何条件,则会将表中所有记录全部修改。 ? ? DQL:查询表中的记录
* select * from 表名;
1. 语法:
?? select
??? 字段列表
?? from
??? 表名列表
?? where
??? 条件列表
?? group by
??? 分组字段
?? having
??? 分组之后的条件
?? order by
?? ?排序
?? limit
??? 分页限定
2. 基础查询
?? ? 1. 多个字段的查询
?? ? ?? select 字段名1,字段名2... from 表名;
??? ? ? * 注意:
??? ? ? ? ? * 如果查询所有字段,则可以使用*来替代字段列表。
?? ?2. 去除重复:
??? ? * distinct
??? select distinct 字段名1,字段名2,...from 表名;
??? 这样搜索出来的结果集将不会出现重复。
?? ? *注意:1.这里不重复的作用范围是针对搜索出来的结果集,而不是原始数据。
???????????? ? ? 2.如果有两条记录:
?? ??name ? ? address ? ? age
??? ?小明????????? 西安 ? 20
??? ?小华? ? 西安 ? 23
??? ?select distinct name,address from student; 虽然搜出来的两条记录中address有重复,但name不同,则依旧会显示两条数据,若只搜索address, 则会显示一条数据。
?? ? 3. 计算列
??? ? ? * 一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
??? ? ? name ? ? ? math? English
??? ?? 小明 ? ? ? ?? 99? ?? 100
? ? ? ? ? ? ? ? ?? 小华 ? ? ? ? 101 ? ? ? ? ?? null
?? ?这时想求各个同学的总分,可以写成 select name, math, English, math+English from student;
?? ?结果为???? name? ?math ?English? math+English
???? 小明 ? ?? ?99? 100?????? 199
???? 小华? 101?? ? null??????? ? null
?? ?第二条数据的总分为null这是因为? null参与的运算,计算结果都为null。
?? ?为了避免这种情况的发生,我们就要用到ifnull(表达式1,表达式2)!
???? * ifnull(表达式1,表达式2):
* 表达式1:哪个字段需要判断是否为null
* 表达式2:如果该字段为null后的替换值。
??? Sql语句可以写成 select name, math, English, math+ifnull(English,0) from student;这样结果就 可以正常显示了,小华总分为101。
4. 起别名:
?? ? * as:as也可以省略 用空格代替
??? 为了使查询结果更好看,我们可以将语句写成:
??? select name, math, English as(或空格) 英语, math+ifnull(English,0) as(或空格) 总分 from student;
列名展示结果就为:? name? ? math ?? 英语 ?? 总分
??? 3. 条件查询
?? ? 1. where子句后跟条件
?? ? 2. 运算符
??? ? ?? * > 、< 、<= 、>= 、= 、<>
?? ? ? ? * BETWEEN...AND ? 是闭区间[ ]
?? ? ? ? * IN( 集合)
?? ? ? ? * LIKE:模糊查询
???? ? ? * 占位符:
???? ? * _:单个任意字符
???? ? * %:多个任意字符
?? ? * IS NULL?
?? ? * and? 或 &&
* or? 或 ||
? ? ? ? * not? 或 !
???
??? ?-- 查询年龄大于20岁 ???? SELECT * FROM student WHERE age > 20;
???? SELECT * FROM student WHERE age >= 20;
????
???? -- 查询年龄等于20岁
???? SELECT * FROM student WHERE age = 20;
????
??? ?-- 查询年龄不等于20岁
???? SELECT * FROM student WHERE age != 20;
???? SELECT * FROM student WHERE age <> 20;
????
???? -- 查询年龄大于等于20 小于等于30
???? SELECT * FROM student WHERE age >= 20 &&? age <=30;
??? ?SELECT * FROM student WHERE age >= 20 AND? age <=30;
???? SELECT * FROM student WHERE age BETWEEN 20 AND 30;
????
??? ?-- 查询年龄22岁,18岁,25岁的信息
??? ?SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
???? SELECT * FROM student WHERE age IN (22,18,25);
????
???? -- 查询英语成绩为null
???? SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断
SELECT * FROM student WHERE english IS NULL;-- 正确
????
??? ?-- 查询英语成绩不为null
??? ?SELECT * FROM student WHERE english? IS NOT NULL;
???? -- 查询姓马的有哪些? like
???? SELECT * FROM student WHERE NAME LIKE '马%';
???? -- 查询姓名第二个字是化的人
???? SELECT * FROM student WHERE NAME LIKE "_化%";
????
???? -- 查询姓名是3个字的人
???? SELECT * FROM student WHERE NAME LIKE '___'; ? -- 查询姓名中包含德的人
??? ?SELECT * FROM student WHERE NAME LIKE '%德%';
???? 4. 排序查询
?? ? * 语法:order by 子句
??? * order by? 排序字段1? 排序方式1 , 排序字段2? 排序方式2,排序字段3? 排序方式3..... ?? ? * 排序方式:
?? ?* ASC:升序,默认的。从上到下,由小及大
?? ?* DESC:降序。 ? select * from student order by math ASC;? 按照数学成绩,升序查询 select * from student order by math DESC; ? 按照数学成绩,降序查询 ? name ? math ? English 小华 65 90 小明 63 92 小雨 65 91 若按数学成绩降序查询,出现数学成绩相同的情况,这时按照英语成绩降序查询,待这种情况排序完后再继续按数学 成绩降序查询,Sql语句可以写成: select * from student order by math DESC , English DESC ; 结果为: name ? math ? English 小雨 65 91 小华 65 90 小明 63 92 * 注意:
??? * 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
5. 聚合函数:将一列数据作为一个整体,进行纵向的计算。
?? ? 1. count:计算个数
??? 1. 一般选择非空的列:主键
? 2. count(*)? 这里的*表示所有类,只要里面有一列没有空,则就取该列计算个数。
? ?? 2. max:计算最大值
?? ? 3. min:计算最小值
?? ? 4. sum:计算和
?? ? 5. avg:计算平均值 ? ? ?? 写法:函数方法名(字段名),如:count( name)、 max(math)、min(English+math)......
?? ?? ? * 注意:聚合函数的计算,排除null值。
??? ? 解决方案:
???? 1. 选择不包含非空的列进行计算,如:count(id)
???? 2. IFNULL函数 , 如sum( ifnull(math,0) ) 、 avg( ifnull(math,0) + ifnull(English,0) )...... ? 6. 分组查询:
?? ? 1. 语法:group by 分组字段;
? ? ? ? ?? 2. 注意:
??? 1. 分组之后查询的字段:分组字段、聚合函数
??? 2. where 和 having 的区别?
???? 1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足 结果,则不会被查询出来
???? 2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。 ? ??? -- 按照性别分组。分别查询男、女同学的平均分 ??? SELECT sex , AVG(math) FROM student GROUP BY sex;
???
??? -- 按照性别分组。分别查询男、女同学的平均分,人数
?? SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
???
??? ? ? --? 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
??? SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
???
??? --? 按照性别分组。分别查询男女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
??? SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2; ??
? ? 7. 分页查询
?? ?? 1. 语法:limit 开始的索引,每页查询的条数;
?? ?? 2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
??? ? -- 每页显示3条记录 ? ? ? SELECT * FROM student LIMIT 0,3; -- 第1页
??? ? SELECT * FROM student LIMIT 3,3; -- 第2页
??? ? SELECT * FROM student LIMIT 6,3; -- 第3页 ?? ?? 3. limit 是一个MySQL"方言"
内容总结
以上是互联网集市为您收集整理的MySql数据库基础全部内容,希望文章能够帮你解决MySql数据库基础所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。