MySQL数据库基础
数据库database
- 简介:数据库database,简称db。按照数据结构来组织、存储和管理数据的仓库。MySQL 是一个关系型数据库管理系统;支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
- 数据库: 数据库是一些关联表的集合。
- 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
- 列: 一列(数据元素) 包含了相同类型的数据;具有相同数据类型的数据的集合;
- 行:一行(=元组,或记录)是一组相关的数据;每一行用来描述某条记录的具体信息;
- 表头: 每一列的名称;
- 值: 行的具体信息, 每个值必须与该列的数据类型相同;
- 键: 键的值在当前列中具有唯一性。
- 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
- 数据库的特点:
- 持久化存储数据:存储到文件中的,做持久化的保存。其实数据库就是一个文件系统
- 方便存储和管理数据
- 使用了统一的方式操作数据库——sql
- 关系型数据库(RDBMS)的特点:
- 数据以表格的形式出现
- 每行为各种记录名称
- 每列为记录名称所对应的数据域
- 许多的行和列组成一张表单
- 若干的表单组成database
SQL通用语法
简介
-
SQL语句可以单行或多行书写,以分号结尾
-
可用空行和缩进增强语句的可得性
-
MySQL中的SQL语句不区分大小写,但关键字一般使用大写
-
注释
①-- 注释内容(注意--后面有空格)——单行注释 ②#注释内容——单行注释 ③/*注释内容*/——多行注释
-
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等
-
数据类型
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 更多数据类型看这里
DDL操作数据库
这里以建立学生信息数据库为例
- 创建数据库(create):
//创建数据库
create database STUDENT_INFORMATION;
//创建数据库,判断名为STUDENT_INFORMATION的数据库是否存在,不存在则创建
create database if not exits STUDENT_INFORMATION;
//创建数据库,并指定字符集
create database STUDENT_INFORMATION character set 字符集名;
- 查询数据库(retrieve)
//查询所有数据库名称
show databases;
//查询创建数据库的语法
show create database+数据库名称;
- 修改(update)
//修改数据库的字符集
alter database 数据库名称 character set 字符集名;
- 删除(delete)
//删除数据库
drop database 数据库名称;
//判断数据库是否存在,存在则删除
drop database if exits 数据库名称
- 使用数据库
//使用(进入)某个数据库
use STUDENT_INFORMATION;
//查询当前正在使用的数据库
select database();
DDL操作表
- 创建
//创建表
create table 表名(
列名1 数据类型1, //注意这里要加逗号隔开
列名2 数据类型2,
...
列名n 数据类型n //注意最后一列没有逗号
);
#补充:复制表
create table 表名2 like 被复制的表名1;
- 查询
//查询某个数据库中所有表的名称
show tables;
//查询表结构
desc 表名;
- 修改alter
//修改表名
alter table 准备删除的表名 rename to 新的表名;
//修改字符集
alter table 表名 character set 字符集;
//添加列
alter table 表名 add 列名 数据类型;
//修改列的名称 数据类型
alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
//删除列
alter table 表名 drop 列名;
- 删除
//删除表
drop table 表名;
//判断表是否存在,若存在则删除
drop table if exits 表名;
DML操作数据
- 添加数据
//添加数据,一一对应
INSERT INTO 表名 ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
//如果表名后不定义列名,则默认给所有列添加值
INSERT INTO 表名 VALUES ( value1, value2,...valueN );
- 删除数据
//直接删除此表,然后在创建一个一样的表
TRUNCATE table 表名;
//删除表中所有数据,有所少条记录就会执行多少次删除记录,效率低
delete from 表名;
//删除表中满足条件的数据
delete from 表名 where 条件;
- 修改数据
//修改表中此列的全部数据
UPDATE 表名 set 列名1=值1,列名2=值2,...列名n=值n;
//修改表中满足条件的数据
UPDATE 表名 set 列名1=值1,列名2=值2,...列名n=值n where 条件;
DQL基础查询
//查询所有数据
select * from 表名;
//查询表中某几列的数据
select 列名1,列明2,...列明n from 表名;
//去除重复的结果集
select distinct 列名 from 表名;
计算数据(四则运算),这里列举加法,
select 列名1,列名2,列名1+列名2 from 表名;--如果有NULL参与运算,则计算结果为NULL
使用ifnull()函数计算数据
select 列名1,列名2,ifnull(列名1,0)+ifnull(列名2,0) from 表名;--ifnull函数说明:如果值为null时,替换为0计算
起别名+as
select 列名1 as 别名1,列名2 as 别名2,...,列名N as 别名N from 表名;
省略as,用空格替代
select 列名1 别名1,列名2 别名2,...,列名N 别名N from 表名;
DQL条件查询(where)
运算符
等号:不同于其他语句,SQL语句使用一个等于号即可
不等号: <> 或 !=
安全等于:<=>; 与 = 的区别在于当两个操作码均为 NULL 时,其所得值为 1 而不为 NULL,而当一个操作码为 NULL 时,其所得值为 0而不为 NULL。
NULL:不能用运算符判断,可使用 is 或 is not
某个范围: between...and...(闭区间) 或 in() 或 or 或 and 或 &&
DQL模糊查询(like)
占位符: -单个任意字符
%多个任意字符
//查询name中以s开头的数据
select * from student where name like 's%';
//查询name中有l的数据
select * from student where name like '%l%';
//查询name是三个字的人
select * from student where name like '___';
DQL排序查询(order by)
升序asc(默认):select * from 表名 order by 列名 asc;
降序desc:select * from 表名 order by 列名 desc;
//将数据按英语成绩分别升序降序排序
select * from student order by English asc;
select * from student order by English desc;
先按照条件1排序,若条件1相等,再按照条件2排序
select * from 表名 order by 条件1,条件2;
//按照英语成绩升序排序,若英语成绩一样,则按照数学成绩升序排序
select * from student order by English asc,math asc;
DQL聚合函数
将一列数据看成一个整体,进行纵向的计算:count,max,min,sum,avg(聚合函数的计算排除null的值)
count:计算个数
count(主键):选择不包含非空的列进行计算:主键
count(*):只要这一行数据有一个不为零即可
IFNULL()函数
DQL分组查询(group by)
where与having的区别
①where在分组之前限定,如果不满足条件,则不参与分组;having在分组之后限定,如果不满足结果,则不会被查询出来
②where后不可以跟聚合函数,having后可以跟聚合函数
SELECT 列名1, 函数名(列名2)
FROM 表名
WHERE 条件
GROUP BY 列名;
//按照年龄分组,查询每个年龄的平均分
select age,avg(English) from student group by age;
//按照年龄分组,查询每个年龄的平均分,且每组人数大于1人
select age,avg(English) from student group by age having count(id)>1;
DQL分页查询(limit)
开始的索引=(当前的页码-1)* 每个页面显示的条数
//每页显示两条记录
select * from student limit 0,2;
select * from student limit 2,2;
select * from student limit 4,2;
约束
约束:对表中的数据进行限定,确定数据的正确性,有效性和完整性。
分类:主键约束primary key;非空约束not null;唯一约束unique;外键约束foreign key。
非空约束not null:值不能为null
唯一约束unique:可以有null值,但只能有一条记录为null
主键约束primary key:非空且唯一
外键约束foreign key
//创建表时添加约束
create table 表名(
列名 数据类型 not null 或 unique--定义为非空或唯一
);
//创建表后添加约束
alter table 表名 modify 列名 数据类型 not null或unique;
//删除列的非空约束
alter table 表名 modify 列名 数据类型;
//删除列的唯一约束
alter table 表名 drop index 列名;