MySQL基础

1. 前言

MySQL 是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

在学习MySQL语言之前,我们先来了解一下数据库。

欢迎收藏米奇罗的博客

什么是数据库?

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。

简单地说数据库就是用来存储和和管理大量数据的一个仓库。

RDBMS即关系数据库管理系统(Relational Database Management System)的特点:

  • 1.数据以表格的形式出现
  • 2.每行为各种记录名称
  • 3.每列为记录名称所对应的数据域
  • 4.许多的行和列组成一张表单
  • 5.若干的表单组成database

RDBMS 术语

在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:

  • 数据库 :数据库是一些关联表的集合。
  • 数据表 :表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • 列: :一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
  • :一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  • 参照完整性:参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格:

  • 表头(header): 每一列的名称;
  • 列(col): 具有相同数据类型的数据的集合;
  • 行(row): 每一行用来描述某条记录的具体信息;
  • 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
  • 键(key): 键的值在当前列中具有唯一性。

这些术语也比较官方,是从菜鸟教程上copy下来的,在实际使用当中,其实数据表就是一个table,可以形象化来理解。

下面就正式进入MySQL语言的学习,对于MySQL的安装请自行百度。


数据库操作思路图:

数据库操作思路图

2. 数据库和表

2.1 数据库的创建

2.1.1 数据库连接

[root@host]# mysql -u root -p
Enter password:******

一般默认用户名是root

退出 mysql> 命令提示窗口可以使用 exit 命令,如下所示:

mysql> exit
Bye

2.1.2 查看数据库

SHOW DATABASES;

显示数据库

2.1.3 创建数据库

CREATE DATABASE 数据库名称

MySQL默认创建创建的数据库字符集是utf8

用命令行查看当前mysql默认字符集命令:
show variables like 'character_set%';

字符集结果

若创建数据库要修改默认字符集,使用以下语句即可:

  # utf-8
  CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
 
  # gbk
  CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

2.1.4 打开数据库

USE 数据库名称;

:每次使用数据库必须打开相应数据库

查看当前数据表:
SHOW TABLES;

2.1.5 用户管理

#创建用户
    create user '用户名'@'IP地址' identified by '密码';
#删除用户
    drop user '用户名'@'IP地址';
#修改用户
    rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';
#修改密码
    set password for '用户名'@'IP地址' = Password('新密码')
  
PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

2.1.6 数据库的备份和还原

MySQL备份和还原,都是利用mysqldump、mysql和source命令来完成。不过我们可以通过MySQL的可视化界面进行操作,这里就不详细介绍了。

2.1.7 删除数据库

删除数据库语句:
drop database 数据库名;

删除数据库

2.2 数据表的创建

2.2.1 查看数据表

show tables;

查看数据表

2.2.2 创建数据表

创建语句:

create table 表名(
    列名  类型  是否可以为空,
    列名  类型  是否可以为空
);

操作执行结果

mysql> CREARE TABLE tbtest(
num INT(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
sname VARCHAR(10) NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.07 sec)

注意:在实际使用中,以大写方便区分MySQL语句,实际MySQL是无法辨别大小写的。

2.2.3 创建表时的一些设置

  • 主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。
    primary key
create table tb1(
nid int not null auto_increment primary key,
num int null )
或
create table tb1(
nid int not null,
num int not null,
primary key(nid,num)
            )
  • 自增
    auto_increment
create table tb1(
  nid int not null auto_increment primary key,
  num int null )
或
create table tb1(
  nid int not null auto_increment,
  num int null,
  index(nid)
)

注意:1、对于自增列,必须是索引(含主键)。 2、对于自增可以设置步长和起始值

show session variables like 'auto_inc%';
set session auto_increment_increment=2;
set session auto_increment_offset=10;
shwo global  variables like 'auto_inc%';
set global auto_increment_increment=2;
set global auto_increment_offset=10;
  • 外键,一个特殊的索引,只能是指定内容
creat table color(
nid int not null primary key,
name char(16) not null
)

create table fruit(
nid int not null primary key,
smt char(32) null ,
color_id int not null,
constraint fk_cc foreign key (color_id) references color(nid)
)

2.2.4 删除表

drop table 表名

2.2.5 清空表

delete from 表名
truncate table 表名

2.2.6 修改表

添加列:alter table 表名 add 列名 类型
删除列:alter table 表名 drop column 列名
修改列:
        alter table 表名 modify column 列名 类型;  -- 类型
        alter table 表名 change 原列名 新列名 类型; -- 列名,类型
  
添加主键:
        alter table 表名 add primary key(列名);
删除主键:
        alter table 表名 drop primary key;
        alter table 表名  modify  列名 int, drop primary key;
  
添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
删除外键:alter table 表名 drop foreign key 外键名称
  
修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

3. 数据的操作(内容的增删查改)

3.1 增–插入数据

insert into 表 (列名,列名...) values (值,值,值...)
insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)
insert into 表 (列名,列名...) select (列名,列名...) from 表

实际操作:

插入数据

3.2 删–删除数据

delete from 表
delete from 表 where id=1 and name='alex'

where表示条件,and表示并且。
语句翻译过来理解:删除满足id=1并且name=alex的那条数据。

删除数据

3.3 改–修改数据

update 表 set userId = 1231231 where id=2

3.4 查–查询数据

查询数据应用数据库的一个主要且频繁的一个操作。当然我们可以根据具体要求进行操作查询。

3.4.1 普通查询

a、条件
    select * from 表 where id > 1 and userPwd != 123 and userId = 1234;
 
    select * from 表 where id between 5 and 16;
 
    select * from 表 where id in (11,22,33)
    select * from 表 where id not in (11,22,33)
    select * from 表 where id in (select id from 表)
b、限制
    select * from 表 limit 5;            - 前5行
    select * from 表 limit 4,5;          - 从第4行开始的5行
    select * from 表 limit 5 offset 4    - 从第4行开始的5行

* 号代表查询选择所有数据
例如上面图中使用的select * from people

3.4.2 数据排序查询

排序
    select * from 表 order by 列 asc              - 根据 “列” 从小到大排列
    select * from 表 order by 列 desc             - 根据 “列” 从大到小排列
    select * from 表 order by 列1 desc,列2 asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序

3.4.3 模糊查询

通配符(模糊查询)
    select * from 表 where name like 'ale%'  - ale开头的所有(多个字符串)
    select * from 表 where name like 'ale_'  - ale开头的所有(一个字符)

模糊查询

3.4.4 分组查询

分组
    select num from 表 group by num
    select num,nid from 表 group by num,nid
    select num,nid from 表  where nid > 10 group by num,nid order nid desc
    select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid
 
    select num from 表 group by num having max(id) > 10
 
    特别的:group by 必须在where之后,order by之前

3.4.5 其他查询

在本文中我们对普通查询、数据排序查询、模糊查询、分组查询进行了简单介绍,对聚集函数查询和多表查询使用较少,在后面的博客中会有介绍。

4. 小结&参考资料

小结

在一些简单的项目开发中上面的一些数据库操作语句基本能满足需求,对于更高级的数据库操作呢,后续再更新,主要有连接使用、索引、临时表、复制表及SQL注入等高级操作。
在这个大数据时代,数据的庞大以及多用户的大量访问势必导致数据库交互困难,处理高并发问题我们不能单纯依靠后端来处理,数据库的优化在处理高并发也发挥着不可或缺的力量,所以数据库的基础必须得打牢。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值