目录
SQL
SQL的概述
SQL全称Structured Query Language,是结构化查询语言,用于访问和处理数据库的标准的计算机语言。
SQL的特点
- 具有综合统一性,不同数据库的支持的SQL稍有不同
- 非过程化语言,不需要关心内部操作过程,按照需求编写代码
- 语言简捷,用户容易接受
- 以一种语法结构提供两种使用方式,可以和其他语言结合一起使用
SQL语法特点
- SQL对关键字的大小写不敏感
- SQL语句可以以单行或多行书写,最后以分号结束
- SQL的注释:
-- 为单行注释,--的后面必须有一个空格
#为单行注释,#后面可以不加空格
/* */为多行注释
数据库系统简介
数据库概念
数据库(DataBase)是一个以某种组织方式存储在磁盘上的数据的集合。
数据库应用
数据库应用系统是指基于数据库的应用软件,如学生管理系统,电商商品列表等等。
数据库管理系统(数据库软件)
数据库分为关系型数据库(RDBMS)和非关系型数据库(NoSQL)两大类。
关系型数据库
- Oracle数据库(最挣钱的数据库)
- MySQL数据库(最流行中型数据库)
- SQL server数据库(Windows上最好的数据库)
- PostgreSQL(功能最强大的开源数据库)
- SQLite(最流行的嵌入式数据库)
非关系型数据库
- Redis(最好的缓存数据库)
- MongoDB(最好的文档型数据库)
- Elasticsearch(最好的搜索服务)
- Cassandra(最好的列式数据库)
- HBase(优秀的分布式,列式数据库)
SQL和数据库管理系统的关系
- SQL是一种用于操作数据库的语言,SQL适用于所有关系型数据库。
- MySQL、Oracle、SQLServer是一个数据库软件,这些数据库软件支持标准SQL,也就是通过SQL可以使用这些软件,但每一个数据库系统会在标准SQL的基础上扩展自己的SQL语法。
- 大部分的NoSQL数据库都有自己的操作语言,对SQL支持的并不好。
关系型数据数据库管理系统组成
数据库管理系统(DBMS)主要由数据库和表组成,一个系统可以有很多数据库,每个数据库可以用很多表。数据库系统可以由无数个数据库组成,一个数据库可以由无数个表组成。
MySQL
MySQL介绍
MySQL数据库管理系统由瑞典的DataKonsultAB公司研发,该公司被Sun公司收购,现在Sun公司又被Oracle公司收购,因此MySQL目前属于Oracle旗下产品。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,一般中小型网站的开发都选择MySQL作为网站数据库。
MySQL特点
- MySQL数据库是用C和C++语言编写的,以保证源码的可移植性
- 支持多个操作系统如WIndows、Linux、Mac OS等等
- 支持多线程,可以充分利用CPU资源
- 为多种编程语言提供API,包括C语言,Java,PHP,Python语言等
- MySQL优化了SQL算法,有效提高了查询速度
- MySQL开放源代码且无版权制约,自主性强、使用成本低
- MySQL历史悠久,社区及用户非常活跃,遇到问题可以很快获取到帮助
MySQL常用图形管理工具
如果没有MySQL图形管理工具,MySQL日常的开发和维护均在类似的dos窗口中进行。我们使用MySQL图形管理工具来连接MySQL,然后在图形化界面上操作MySQL。
-
Navicat
Navicat是一套快速,可靠的数据库管理系统,Navicat是以直觉化的图形用户界面而建的,可以兼容多种数据库,支持多种操作系统。
-
SQLyog
SQLyog是一个快速简洁的图形化管理MySQL数据库的工具,它可以在任何地点有效地管理数据库,由业界著名的Webyog公司出品。使用SQLyog可以快速直观地从世界任何角落通过网络来维护远端的MySQL数据库。
-
MySQL Workbench
MySQL Workbench是MySQL官方提供的图形化管理工具,分为社区版和商业版。支持数据库的创建、设计、迁移、备份、导出和导入功能,并支持Windows、Linus和mac等主流操作系统。
-
DataGrip
DataGrip由JetBrains公司出品,是一款数据库管理客户端工具,方便连接到数据库服务器,执行sql、创建表、创建索引以及导出数据等。
图形化工具连接MySQL
Navicat连接:
连接名可在如下图页面找到:
数据类型
数据类型是指在创建表的时候为表中字段指定数据类型,只有数据符合类型要求才能存储起来,使用数据类型的原则是够用就行,尽量使用取值范围小的,而不用大的,这样可以节省更多存储空间。
数值类型
类型 | 大小 | 范围(有符号,为默认) | 范围(无符号) | 用途 |
TINYINT | 1byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2bytes | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3bytes | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT或INTEGER | 4bytes | (-2147483648,2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8bytes | (-9223372036854775808,9223372036854775807) | (0,18446744073709551615) | 极大整数值 |
FLOAT | 4bytes | (-3.402823466E+38,3.402823466351E+38) | 0,(1.175494351E-38,3.402823466E+38) | 单精度浮点数值 |
DOUBLE | 8bytes | (-1.7976931348623157E+308,1.7976931348623157E+308) | 0,(2.2250738585072014E-308,1.7976931348627E+308) | 双精度浮点数值 |
DECIMAL | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
- 若想将数值类型变为无符号范围,可在数值类型后加上unsigned,如:
sid tinyint unsigned
- DECIMAL可指定小数保留几位,如decimal(5,2)代表小数有效位数(包含整数部分和小数部分)最多为五位,小数点后保留两位。
字符串类型
类型 | 大小 | 用途 |
CHAR | 0-255bytes | 定长字符串 |
VARCHAR | 0-65535bytes | 变长字符串 |
TINYBLOB | 0-255bytes | 不超过255个字符的二进制字符串 |
TINYTEXT | 0-255bytes | 短文本字符串 |
BLOB | 0-65535bytes | 二进制形式的长文本数据 |
TEXT | 0-65535bytes | 长文本数据 |
MEDIUMBLOB | 0-16777215bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16777215bytes | 中等长度文本数据 |
LONGBLOB | 0-4294967295bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4294967295bytes | 极大文本数据 |
日期类型
类型 | 大小 | 范围 | 格式 | 用途 |
DATE | 3bytes | 1000-01-01/9999-12-31 | YYY-MM-DD | 日期值 |
TIME | 3bytes | '-838:59:59'/'838:59:59' | HH:MM-DD:SS | 时间值或持续时间 |
YEAR | 1bytes | 1901/2155 | YYYY | 年份值 |
DATETIME | 8bytes | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4bytes | 1970-01-01 00:00:00/2038 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
MySQL数据库基本操作
DDL
DDL(Data Definition Language),数据定义语言,该语言部分包括:对数据库的常用操作,对表结构的常用操作,修改表结构。
对数据库的常用操作
- 查看所有数据库
show database;
结果:
- 创建数据库
create database [ if not exists ] mydb1 [ charest=utf8 ];
结果:
if not exists 可加可不加,加上表示该数据库不存在才进行创建操作,存在则不进行操作,可避免代码报错。
- 切换(选择要操作的)数据库
use mydb1;
结果:
之后进行的操作都在该数据库中进行
- 删除数据库
drop database [ if exists ] mydb1;
结果:
if exists 与上面提到的if not exists的作用相似,可加可不加,加上表示该数据库存在才进行删除操作,不存在则不进行操作,同样可避免代码报错。
- 修改数据库编码
alter database mydb1 character set utf8;
结果:
数据库默认编码为utf8,可以不用修改。
对表结构的常用操作
- 创建表
创建表是构建一张空表,指定表的名字,这个表有几列,每一列叫什么名字,以及每一列存储的数据类型。字段名就是列名。
create table [ if not exists ] 表名(
字段名 类型 [ (宽度) ] [约束条件] [comment '字段说明']
)[表的一些设置] ;
实例:
use mydb1;
create table if not exists student (
sid int,
name varchar(20),
gender varchar(20),
age int,
birth date,
address varchar(20)
);
该表有六列,分别为学生的学号,姓名,性别,年龄,生日,住址。
结果:
- 查看当前数据库的所有表名称
show tables;
结果:
- 查看指定某个表的创建语句
show create table 表名;
结果:
将代码展开为:
CREATE TABLE `student` (
`sid` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`gender` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`birth` date DEFAULT NULL,
`address` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
相比原代码,多出来的是约束与引擎。
- 查看表结构
desc 表名;
结果:
查看表结构,即查看表中有哪些列,每一列叫什么名字,以及每一列的类型。
- 删除表
drop table 表名;
结果:
修改表结构
- 修改表添加列
alter table 表名 add 列名 类型 (长度)[ 约束 ] ;
实例:
#为student表添加一个新的字段为:专业major,类型为varchar(20)
alter table student add major varchar(20);
结果:
- 修改列名和类型
alter table 表名 change 旧列名 新列名 类型(长度)[ 约束 ];
实例:
#为student表的major字段更换为department varchar(30)
alter table student change major department varchar(30);
结果:
如何查看类型是否改变:右键表名处-->设计表
- 修改表删除类
alter table 表名 drop 列名;
实例:
#删除student表中department列
alter table student drop department;
结果:
- 修改表名
rename table 表名 to 新表名;
实例:
#将表student名字改为stu
rename table student to stu;
结果: