一、SQL语言基础
概述
- SQL全称: Structured Query Language,是结构化查询语言,用于访问和处理数据库的标准的计算机语言。SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。
- 美国国家标准局(ANSI)开始着手制定SQL标准,并在1986年10月公布了最早的SQL标准,扩展的标准版本是1989年发表的SQL-89,之后还有1992年制定的版本SQL-92和1999年ISO发布的版本SQL-99。
- SQL标准几经修改和完善,其功能更加强大,但目前很多数据库系统只支持SQL-99的部分特征,而大部分数据库系统都能支持1992年制定的SQL-92。
特点
- 具有综合统一性,不同数据库的支持的SQL稍有不同
- 非过程化语言
- 语言简捷,用户容易接受
- 以一种语法结构提供两种使用方式
语言组成
- 数据定义语言-DDL
- 数据操纵语言-DML
- 数据控制语言-DCL
- 数据查询语言-DQL
数据库系统分类
关系型数据库(RDBMS)
1、Oracle数据库 (老大,最挣钱的数据库)
2、MySQL数据库 (最流行中型数据库))
3、SQL server数据库 (Windows上最好的数据库)
4、PostgreSQL(功能最强大的开源数据库)
5、SQLite(最流行的嵌入式数据库)
非关系型数据库(NoSQL)
1、Redis(最好的缓存数据库)
2、MongoDB(最好的文档型数据库)
3、Elasticsearch(最好的搜索服务)
4、Cassandra(最好的列式数据库)
5、HBase(优秀的分布式、列式数据库)
MYSQL的优点
①MySQL数据库是用C和C++语言编写的,以保证源码的可移植性
②支持多个操作系统例如:Windows、Linux、Mac OS等等
③支持多线程,可以充分的利用CPU资源
④为多种编程语言提供API,包括C语言,Java,PHP。Python语言等
⑤MySQL优化了SQL算法,有效的提高了查询速度
⑥MySQL开放源代码且无版权制约,自主性强、使用成本低。
⑧MySQL历史悠久、社区及用户非常活跃,遇到问题,可以很快获取到帮助。
Mysql版本介绍
针对不同的用户,MySQL分为两种不同的版本:
社区版本,免费,但是Mysql不提供官方技术支持。
商业版,该版本是收费版本,可以试用30天,官方提供技术支持
集群版,开源免费,可将几个MySQL Server封装成一个Server。
高级集群版,需付费。
一款专为MySQL设计的ER/数据库建模工具。MySQL Workbench又分为两个版本,分别是社区版(MySQL Workbench OSS)、商用版(MySQL Workbench SE)。
MYSQL的安装可以参考:数据库Mysql8.0详细安装_以我之名,换我未来的博客-优快云博客
二、数据库语言操作
1.DDL语言
1.基本概念
DDL(Data Definition Language),数据定义语言,该语言部分包括以下内容:
对数据库的常用操作
对表结构的常用操作
修改表结构
功能 | SQL |
查看所有的数据库 | show databases; |
创建数据库 | create database [if not exists] mydb1 [charset=utf8] |
切换 (选择要操作的) 数据库 | use mydb1; |
删除数据库 | drop database [if exists] mydb1; |
修改数据库编码 | alter database mydb1 character set utf8; |
查看当前数据库的所有表名称 | show tables; |
查看指定某个表的创建语句 | show create table 表名; |
查看表结构 | desc 表名 |
删除表 | drop table 表名 |
2.数据库表结构操作
create table [if not exists]表名(
字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名3 类型[(宽度)] [约束条件] [comment '字段说明']
)[表的一些设置];
create database if not exists mydb1;
use mydb1;
create table if not exists student(
id int,
name varchar(10),
gender varchar(10),
address varchar(20),
birth date
);
3.数据类型
数据类型是指在创建表的时候为表中字段指定数据类型,只有数据符合类型要求才能存储起来,使用数据类型的原则是:够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间。
- 数值类型
- 日期和时间类型
- 字符串类型
- 数值类型
- 字符串类型
- 日期类型
#给表添加一个新字段:dept
alter table studetnt add `dept` varchar(20);
#为student表的dept字段更换为deartment
alter table student change `dept` department varchar(30);
#删除student表中department
alter table student drop department;
2.DML语言
DML是指数据操作语言,英文全称是Data Manipulation Language,用来对数据库中表的数据记录进行更新。
关键字:
插入insert
删除delete
更新update
- 数据插入
- 格式:
-
insert into 表 (列名1,列名2,列名3...) values (值1,值2,值3...); //向表中插入某些 insert into 表 values (值1,值2,值3...); //向表中插入所有列
数据修改
-
格式:
-
update 表名 set 字段名=值,字段名=值...; update 表名 set 字段名=值,字段名=值... where 条件;
-
-
数据删除 -
格式:
-
两者的差别: delete和truncate原理不同,delete只删除内容 而truncate类似于drop table ,可以理解为是将整个表删除,然后再创建该表; delete from 表名 [where 条件]; truncate table 表名 或者 truncate 表名
-
MYSQL约束
- 概念
约束英文:constraint
约束实际上就是表中数据的限制条件
作用
表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复。
分类
- 主键约束(primary key) PK
- 自增长约束(auto_increment)
- 非空约束(not null)
- 唯一性约束(unique)
- 默认约束(default)
- 零填充约束(zerofill)
- 外键约束(foreign key) FK
-
主键约束
插入方式:创建单列主键有两种方式,一种是在定义字段的同时指定主键,一种是定义完字段之后指定主键
联合主键:所谓的联合主键,就是这个主键是由一张表中多个字段组成的。
注意:
1. 当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。
2. 一张表只能有一个主键,联合主键也是一个主键
方式一:
-- 在 create table 语句中,通过 PRIMARY KEY 关键字来指定主键。
--在定义字段的同时指定主键,语法格式如下:
create table 表名(
...
<字段名> <数据类型> primary key
...
)
方式二:
--在定义字段之后再指定主键,语法格式如下:
create table 表名(
...
[constraint <约束名>] primary key [字段名]
);
#联合主键
create table 表名(
...
primary key (字段1,字段2,…,字段n)
);
#通过修改表结构添加主键
alter table <表名> add primary key(字段列表);
#删除主键
alter table <数据表名> drop primary key;
2.自动增长约束
概念
在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。
通过给字段添加 auto_increment 属性来实现主键自增长
语法
字段名 数据类型 auto_increment
特点
- 默认情况下,auto_increment的初始值是 1,每新增一条记录,字段值自动加 1。
- 一个表中只能有一个字段使用 auto_increment约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。
- auto_increment约束的字段必须具备 NOT NULL 属性。
- auto_increment约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等。
- auto_increment约束字段的最大值受该字段的数据类型约束,如果达到上限,auto_increment就会失效。
3.非空约束
概念
MySQL 非空约束(not null)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。
语法
方式1:<字段名><数据类型> not null;
方式2:alter table 表名 modify 字段 类型 not null;
#修改非空约束
alter table student5 modify id varchar(20) not null;
#删除非空约束
alter table student5 modify name varchar(20) ;
4.唯一约束
概念
唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。
语法
方式1:<字段名> <数据类型> unique
方式2: alter table 表名 add constraint 约束名 unique(列);
#创建
create table student7 (
id int ,
name varchar(20) ,
phone_number varchar(20) -- 指定唯一约束
);
#删除
alter table student7 add constraint unique_ph unique(phone_number);
5.默认约束
概念
MySQL 默认值约束用来指定某列的默认值。
语法
方式1: <字段名> <数据类型> default <默认值>;
方式2: alter table 表名 modify 列名 类型 default 默认值;
#创建
create table student7(
id int ,
name varchar(20) ,
address varchar(20) default ‘北京’ -- 指定默认约束
);
#删除
alter table student7 modify column address varchar(20) default null;
6.零填充约束
概念
1、插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0
2、zerofill默认为int(10)
3、当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128~+127,无符号为0~256。
#创建
create table student8 (
id int zerofill , -- 零填充约束
name varchar(20)
);
#删除
alter table student8 modify id int;