MySQL详细教程

Posted 魏晋南北

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL详细教程相关的知识,希望对你有一定的参考价值。

数据库和SQL

1、概述

1.1.数据库的4个基本概念

数据、数据库、数据库管理系统和数据库系统是与数据库技术密切相关的4个基本概念。

  • 数据:

描述事物的符号记录称为数据。描述事物的符号可以是数字也可以是文字、图形、图像、音频、视频等,数据有多种形式。

  • 数据库(DataBase DB):

数据库,顾名思义,是存放数据的仓库。数据库是长期存放在计算机内,有组织的、可共享的大量数据的集合。

  • 数据库管理系统:

数据库管理系统是位于用户与操作系统之间的一层数据管理软件。数据库管理系统和操作系统一样是计算机的基础软件,也是一个大型复杂的软件系统。常见的数据库管理系统mysql、Oracle、DB2、SqlServer等

  • 数据库系统

数据库系统是由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。

数据库管理系统图片

在这里插入图片描述

1.2、数据库的好处:

  • 实现数据持久化
  • 使用完整的管理系统统一管理、易于查询

数据库的特点:

1、将数据放到表中,表再放到库中

2、一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。

3、表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。

4、表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java 中的”属性”

5、表中的数据是按行存储的,每一行类似于java中的“对象”。

SQL的特点

1、不是某个特定数据库供应商专有的语言,几乎所有DBMS都支持SQL

2、简单易学

3、虽然简单,但实际上是一种强有力的语言,灵活使

用其语言元素,可以进行非常复杂和高级的数据库操作。

1.3、RDBMS 术语

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

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

1.4、SQL语言的分类

1、DML(Data Manipulation Language):数据操纵语句,用于添加、删除、修改、查询数据库记录,并检查数据完整性

2、DDL(Data Definition Language):数据定义语句,用于库和表的创建、修改、删除。

3、DCL(Data Control Language):数据控制语句,用于定义用户的访问权限和安全级别。

1.6.1、DML

DML用于查询与修改数据记录,包括如下SQL语句:

INSERT:添加数据到数据库中

UPDATE:修改数据库中的数据

DELETE:删除数据库中的数据

SELECT:选择(查询)数据

SELECT是SQL语言的基础,最为重要。

1.6.2、DDL

DDL用于定义数据库的结构,比如创建、修改或删除

数据库对象,包括如下SQL语句:

CREATE TABLE:创建数据库表

ALTER TABLE:更改表结构、添加、删除、修改列长度

DROP TABLE:删除表

CREATE INDEX:在表上建立索引

DROP INDEX:删除索引

1.6.3、DCL

DCL用来控制数据库的访问,包括如下SQL语句:

GRANT:授予访问权限

REVOKE:撤销访问权限

COMMIT:提交事务处理

ROLLBACK:事务处理回退

SAVEPOINT:设置保存点

LOCK:对数据库的特定部分进行锁定

2、数据库的相关操作

2.1、查询已有的数据库列表

SHOW DATABASES

2.2、创建数据库

语法:CREATE DATABASE 数据库名字 [库选项];
例如:CREATE DATABASE test_table CHARSET utf8;

2.3、修改数据库

注意:数据库的名字不能修改

语法:alter database 数据库名字 [库选项];
例如:ALTER DATABASE test_table CHARSET GBk;

2.4、删除数据库

语法:drop database [if exists] 数据库名字;
例如:DROP DATABASE IF EXISTS test_table;

3、数据库表的相关操作

3.1、创建表

创建表的语句格式:

Create table [if not exists] 表名(

字段名字 数据类型 [列约束],

字段名字 数据类型 [列约束] ##最后一行不需要逗号

)[表选项];

例如:
CREATE TABLE IF NOT EXISTS `person` (
   `id` INT UNSIGNED AUTO_INCREMENT,
   `name` VARCHAR (10) NOT NULL,
   `age` INT (3) NOT NULL,
   `birthday` DATE,
   PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

MySQL常见约束条件

约束条件:限制表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败!
约束条件在创建表时可以使用, 也可以修改表的时候添加约束条件

1、约束条件分类:
1)not null :非空约束,保证字段的值不能为空 s_name VARCHAR(10) NOT NULL, #非空
2)default:默认约束,保证字段总会有值,即使没有插入值,都会有默认值!age INT DEFAULT 18, #默认约束
3)unique:唯一,保证唯一性但是可以为空,比如座位号 s_seat INT UNIQUE,#唯一约束
4)check:检查性约束【MySQL不支持,语法不报错,但无效】 s_sex CHAR(1) CHECK(s_sex=‘男’ OR s_sex=‘女’),#检查约束(Mysql无效)
5)primary key :主建约束,同时保证唯一性和非空 d INT PRIMARY KEY,#主建约束(唯一性,非空)
6)foreign key:外键约束,用于限制两个表的关系,保证从表该字段的值来自于主表相关联的字段的值! teacher_id INT REFERENCES teacher(id) #这是外键,写在列级,Mysql无效
7)自增长列 auto_increment id int primary key auto_increment,
一个表中有且只能有一个自增长列,自增长列一般和主键搭配

字符集: charset/character set 具体字符集; ##保证表中数据存储的字符集

校对集: collate 具体校对集; ## utf8mb4_general_ci

存储引擎: engine 具体的存储引擎(InnoDB和MyISAM)

注意

  1. 列级约束
    上面6种约束都可以写,语法都支持,不报错,但外键约束写了mysql无效不起作用

  2. 表级约束

  3. 非空约束、默认约束不支持,其他都可以!

    语法:

    其他: 【constraint 约束名】 约束类型(字段名称) ,

    外键: 【constraint 约束名】 约束类型(字段名称) foreign key(字段名称) references 关联表名(其字段名),

DROP TABLE IF EXISTS students;
CREATE TABLE students(
id INT ,
s_name VARCHAR(10) not null# 非空约束
s_sex CHAR(1) default '男',  # 默认约束
s_seat INT,
age INT ,
teacher_id INT , 
 
#上面是列级约束,下面有表级约束
 
CONSTRAINT pk PRIMARY KEY(id), #主建约束,pk是起的名,后面一样
CONSTRAINT uq UNIQUE(s_seat),  #唯一约束
CONSTRAINT ck CHECK(s_sex='男' OR s_sex='女'), #检查约束
CONSTRAINT fk_students_teacher FOREIGN KEY(teacher_id) REFERENCES teacher(id)  #外键约束
);

数据类型(列类型)

SQL中将数据类型分成了三大类: 数值类型, 字符串类型和时间日期类型

在这里插入图片描述

1、数值型

数值型数据: 都是数值

系统将数值型分为整数型和小数型.

整数型

存放整型数据: 在SQL中因为更多要考虑如何节省磁盘空间, 所以系统将整型又细分成了5类:

tinyint: 迷你整型,使用一个字节存储, 表示的状态最多为256种(常用)

smallint: 小整型,使用2个字节存储,表示的状态最多为65536种

mediumint: 中整型, 使用3个字节存储

int: 标准整型, 使用4个字节存储(常用)

bigint: 大整型,使用8个字节存储

小数型

带有小数点或者范围超出整型的数值类型.

SQL中: 将小数型细分成两种: 浮点型和定点型

浮点型: 小数点浮动, 精度有限,而且会丢失精度

定点型: 小数点固定, 精度固定, 不会丢失精度

浮点型

浮点型数据是一种精度型数据: 因为超出指定范围之后, 会丢失精度(自动四舍五入)

浮点型: 理论分为两种精度

Float: 单精度, 占用4个字节存储数据, 精度范围大概为7位左右

Double: 双精度,占用8个字节存储数据, 精度方位大概为15位左右

定点型

定点型: 绝对的保证整数部分不会被四舍五入(不会丢失精度),小数部分有可能(理论小数部分也不会丢失精度)

2、时间日期类型

时间日期, 格式是YYYY-mm-dd HH:ii:ss,表示的范围是从1000到9999年,有0值: 0000-00-00 00:00:00

日期,就是datetime中的date部分

Time:时间(段), 指定的某个区间之间, -时间到+时间

Year:年份,两种形式, year(2)和year(4): 1901-2156

3、字符串类型

在SQL中,将字符串类型分成了6类: char、varchar、text、blob、enum和set

定长字符串

定长字符串: char, 磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度.

char(L): L代表length, 可以存储的长度, 单位为字符, 最大长度值可以为255.

char(4): 在UTF8 环境下,需要4 * 3 = 12个字节

变长字符串

变长字符串: varchar, 在分配空间的时候, 按照最大的空间分配: 但是实际上最终用了多少,是根据具体的数据来确定.

varchar(L): L表示字符长度 理论长度是65536个字符, 但是会多处1到2个字节来确定存储的实际长度: 但是实际上如果长度超过255,既不用定长也不用变长, 使用文本字符串text

varchar(10): 的确存了10个汉字, utf8环境, 10 * 3 + 1 = 31(bytes)

存储了3个汉字: 3 * 3 + 1 = 10(bytes)

定长与变长的存储实际空间(UTF8)

文本字符串

如果数据量非常大, 通常说超过255个字符就会使用文本字符串

文本字符串根据存储的数据的格式进行分类: text和blob

Text: 存储文字(二进制数据实际上都是存储路径)

Blob: 存储二进制数据(通常不用)

枚举字符串

枚举: enum, 事先将所有可能出现的结果都设计好, 实际上存储的数据必须是规定好的数据中的一个.

枚举的使用方式

定义: enum(可能出现的元素列表); //如enum(‘男’,’女’,’不男不女’,’妖’,’保密’);

使用: 存储数据,只能存储上面定义好的数据

集合字符串

集合跟枚举很类似: 实际存储的是数值,而不是字符串(集合是多选)

集合使用方式:

定义: Set(元素列表)

使用: 可以使用元素列表中的元素(多个), 使用逗号分隔

3.2、查看创建表时的语句

语法:show create table 表名

3.3、查看表结构

语法:desc 表名
或   describe 表名
或   show columns from 表名
例如:
DESC person;
DESCRIBE person; 
SHOW COLUMNS FROM person;

3.4、修改数据表

注意:数据表 可以修改的部分:表结构和字段

1、修改表名
语法:rename table 老表名 to 新表名;
例如:RENAME TABLE person TO man;
2、修改表选项:字符集、校对集和存储引擎
语法:alter table 表名 表选项 [=];
例如:ALTER TABLE man ENGINE=MYISAM;
3、修改表字段
  新增字段:
语法:alter table 表名 add [column] 字段名 数据类型 [列属性] [位置];
例如: ALTER TABLE man ADD COLUMN new_id INT(4) FIRST;
	 ALTER TABLE man ADD COLUMN age2 INT(5) AFTER age;
  重命名字段:
语法:alter table 表名 change 旧字段 新字段名 数据类型 [属性] [位置]
例如:ALTER TABLE man CHANGE age age1 INT;
  删除字段:
语法:alter table 表名 drop 字段名; 
例如: ALTER TABLE man DROP age2;

3.5、删除数据表

语法:drop table [if exists] 表名1,表名2...; ##可以一次性删除多张表
例如:DROP TABLE IF EXISTS man;

4、数据处理之查询

下图是,本人操作时经常用到的几个表,在这里给出来,在下面会用到

user表

在这里插入图片描述

jobs表

在这里插入图片描述

employees表

在这里插入图片描述

departments表

在这里插入图片描述

小伙伴可以将这几个表导入到自己的数据库

CREATE DATABASE /*!32312 IF NOT EXISTS*/`myemployees` /*!40100 DEFAULT CHARACTER SET gb2312 */;

USE `myemployees`;

/*Table structure for table `departments` */

DROP TABLE IF EXISTS `departments`;

CREATE TABLE `departments` (
  `department_id` int(4) NOT NULL AUTO_INCREMENT,
  `department_name` varchar(3) DEFAULT NULL,
  `manager_id` int(6) DEFAULT NULL,
  `location_id` int(4) DEFAULT NULL,
  PRIMARY KEY (`department_id`),
  KEY `loc_id_fk` (`location_id`),
  CONSTRAINT `loc_id_fk` FOREIGN KEY (`location_id`) REFERENCES `locations` (`location_id`)
) ENGINE=InnoDB AUTO_INCREMENT=271 DEFAULT CHARSET=gb2312;

/*Data for the table `departments` */

insert  into `departments`(`department_id`,`department_name`,`manager_id`,`location_id`) values (10,'Adm',200,1700),(20,'Mar',201,1800),(30,'Pur',114,1700),(40,'Hum',203,2400),(50,'Shi',121,1500),(60,'IT',103,1400),(70,'Pub',204,2700),(80,'Sal',145,2500),(90,'Exe',100,1700),(100,'Fin',108,1700),(110,'Acc',205,1700),(120,'Tre',NULL,1700),(130,'Cor',NULL,1700),(140,'Con',NULL,1700),(150,'Sha',NULL,1700),(160,'Ben',NULL,1700),(170,'Man',NULL,1700),(180,'Con',NULL,1700),(190,'Con',NULL,1700),(200,'Ope',NULL,1700),(210,'IT ',NULL,1700),(220,'NOC',NULL,1700),(230,'IT ',NULL,1700),(240,'Gov',NULL,1700),(250,'Ret',NULL,1700),(260,'Rec',NULL,1700),(270,'Pay',NULL,1700);

/*Table structure for table `employees` */

DROP TABLE IF EXISTS `employees`;

CREATE TABLE `employees` (
  `employee_id` int(6) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(20) DEFAULT NULL,
  `last_name` varchar(25) DEFAULT NULL,
  `email` varchar(25) DEFAULT NULL,
  `phone_number` varchar(20) DEFAULT NULL,
  `job_id` varchar(10) DEFAULT NULL,
  `salary` double(10,2) DEFAULT NULL,
  `commission_pct` double(4,2) DEFAULT NULL,
  `manager_id` int(6) DEFAULT NULL,
  `department_id` int(4) DEFAULT NULL,
  `hiredate` datetime DEFAULT NULL,
  PRIMARY KEY (`employee_id`),
  KEY `dept_id_fk` (`department_id`),
  KEY `job_id_fk` (`job_id`),
  CONSTRAINT `dept_id_fk` FOREIGN KEY (`department_id`) REFERENCES `departments` (`department_id`),
  CONSTRAINT `job_id_fk` FOREIGN KEY (`job_id`) REFERENCES `jobs` (`job_id`)
) ENGINE=InnoDB AUTO_INCREMENT=209 DEFAULT CHARSET=gb2312;

/*Data for the table `employees` */

insert  into `employees`(`employee_id`,`first_name`,`last_name`,`email`,`phone_number`,`job_id`,`salary`,`commission_pct`,`manager_id`,`department_id`,`hiredate`) values (100,'Steven','K_ing','SKING','515.123.4567','AD_PRES',24000.00,NULL,NULL,90,'1992-04-03 00:00:00'),(101,'Neena','Kochhar','NKOCHHAR','515.123.4568','AD_VP',17000.00,NULL,100,90,'1992-04-03 00:00:00'),(102,'Lex','De Haan','LDEHAAN','515.123.4569','AD_VP',17000.00,NULL,100,90,'1992-04-03 00:00:00'),(103,'Alexander','Hunold','AHUNOLD','590.423.4567','IT_PROG',9000.00,NULL,102,60,'1992-04-03 00:00:00'),(104,'Bruce','Ernst','BERNST','590.423.4568','IT_PROG',6000.00,NULL,103,60,'1992-04-03 00:00:00'),(105,'David','Austin','DAUSTIN','590.423.4569','IT_PROG',4800.00,NULL,103,60,'1998-03-03 00:00:00'),(106,'Valli','Pataballa','VPATABAL','590.423.4560','IT_PROG',4800.00,NULL,103,60,'1998-03-03 00:00:00'),(107,'Diana','Lorentz','DLORENTZ','590.423.5567','IT_PROG',4200.00,NULL,103,60,'1998-03-03 00:00:00'),(108,'Nancy','Greenberg','NGREENBE','515.124.4569','FI_MGR'免安装版MySQL(解压版)安装详细教程及注意事项

修改MySQL密码报错“ERROR 1819 (HY000): Your password does not satisfy the current policy requirements“(代码片段

VIM 代码片段插件 ultisnips 使用教程

vbscript 各种自定义代码片段 - 有关详细信息,请参阅注释

mysql安装教程8.0.20,mysql详细安装教程

mysql安装教程8.0.20,mysql详细安装教程