MySQL
简介
DB 数据库(Database)
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。用来存储数据。
DBMS 数据库管理系统(Database Management System)
一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。用来管理和操作数据。
关系型数据库(SQL)
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。
关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
如:MySQL,Oracle,Sql Server,DB2,SQLlite。
非关系型数据库(NoSQL)
NoSQL最常见的解释是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL仅仅是一个概念,泛指非关系型的数据库。
NoSQL去掉了关系型数据库的关系型特性,数据之间无关系,这样就非常容易扩展;NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀,这得益于它的无关系性,数据库结构简单。
如:Redis,MongDB。
MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品。开源。
官网:https://www.mysql.com
官网下载地址:https://dev.mysql.com/downloads/mysql/
安装建议:尽量使用压缩包而非.exe安装,否则涉及注册表不好卸载。
安装MySQL
-
在官网下载zip文件
-
将压缩包解压到指定位置
-
添加环境变量
-
此电脑>属性>高级系统设置>环境变量
-
系统变量>Path>新建>将mysql的bin目录粘贴进去
D:\Program Files (x86)\mysql-5.7.19\bin>确定>确定>确定
-
-
在D:\Program Files (x86)\mysql-5.7.19目录下新建配置文件my.ini,内容如下:
[mysqld] basedir=D:\Program Files (x86)\mysql-5.7.19\ datadir=D:\Program Files (x86)\mysql-5.7.19\data\ port=3306 skip-grant-tables -
启动“管理员模式”下的cmd:Windows系统>右键命令提示符>更多>以管理员身份运行
-
切换到mysql的bin目录:
cd /d D:\Program Files (x86)\mysql-5.7.19\bin -
安装mysql:输入
mysqld -install -
初始化数据文件:输入
mysqld --initialize-insecure --user=mysql -
启动mysql:输入
net start mysql -
初始化mysql:输入
mysql -u root -p -
修改root密码:输入
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';(mysql语句结尾必须加英文分号) -
刷新权限:
flush privileges; -
删除/注释掉my.ini文件的最后一句skip-grant-tables
[mysqld] basedir=D:\Program Files (x86)\mysql-5.7.19\ datadir=D:\Program Files (x86)\mysql-5.7.19\data\ port=3306 #skip-grant-tables -
重启mysql即可正常使用
exit
net stop mysql
net start mysql
C:\WINDOWS\system32>cd /d D:\Program Files (x86)\mysql-5.7.19\bin
D:\Program Files (x86)\mysql-5.7.19\bin>mysqld-install
'mysqld-install' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
D:\Program Files (x86)\mysql-5.7.19\bin>mysqld -install
Service successfully installed.
D:\Program Files (x86)\mysql-5.7.19\bin>mysqld --initialize-insecure --user=mysql
D:\Program Files (x86)\mysql-5.7.19\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
D:\Program Files (x86)\mysql-5.7.19\bin>mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.19 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.42 sec)
mysql> exit
Bye
D:\Program Files (x86)\mysql-5.7.19\bin>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。
D:\Program Files (x86)\mysql-5.7.19\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
D:\Program Files (x86)\mysql-5.7.19\bin>mysql -u root -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.19 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> exit
Bye
D:\Program Files (x86)\mysql-5.7.19\bin>mysql -u root -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.19 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> exit
Bye
D:\Program Files (x86)\mysql-5.7.19\bin>
命令行连接数据库
-
sql语句中--是单行注释
/**/是多行注释
--单行注释 /*多行注释*/ -
sql语句可以换行输入
-
ctrl+C 强行终止
mysql> describe session -> ;--输错成了中文分号 -> ^C --ctrl+C 强行终止 mysql> -
在
mysql>下输入exit,退出连接mysql> exit Bye C:\Users\hp> -
常用命令:
mysql -uroot -p123456 --连接数据库 create database 数据库名; --创建一个数据库 show databases; --查看所有的数据库 use 数据库名 --切换数据库 show tables; --查看数据库中所有的表 describe 表名; --查看表中所有信息
C:\Users\hp>mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.19 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database school;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use school
Database changed
mysql> show tables
-> ;
-> ^C
mysql> show tables;
Empty set (0.00 sec)
mysql> exit
Bye
C:\Users\hp>
```
C:\Users\hp>mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.19 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| school |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use sys
Database changed
mysql> show tables
-> ;
+-----------------------------------------------+
| Tables_in_sys |
+-----------------------------------------------+
| host_summary |
| host_summary_by_file_io |
| host_summary_by_file_io_type |
| host_summary_by_stages |
| host_summary_by_statement_latency |
| host_summary_by_statement_type |
| innodb_buffer_stats_by_schema |
| innodb_buffer_stats_by_table |
| innodb_lock_waits |
| io_by_thread_by_latency |
| io_global_by_file_by_bytes |
| io_global_by_file_by_latency |
| io_global_by_wait_by_bytes |
| io_global_by_wait_by_latency |
| latest_file_io |
| memory_by_host_by_current_bytes |
| memory_by_thread_by_current_bytes |
| memory_by_user_by_current_bytes |
| memory_global_by_current_bytes |
| memory_global_total |
| metrics |
| processlist |
| ps_check_lost_instrumentation |
| schema_auto_increment_columns |
| schema_index_statistics |
| schema_object_overview |
| schema_redundant_indexes |
| schema_table_lock_waits |
| schema_table_statistics |
| schema_table_statistics_with_buffer |
| schema_tables_with_full_table_scans |
| schema_unused_indexes |
| session |
| session_ssl_status |
| statement_analysis |
| statements_with_errors_or_warnings |
| statements_with_full_table_scans |
| statements_with_runtimes_in_95th_percentile |
| statements_with_sorting |
| statements_with_temp_tables |
| sys_config |
| user_summary |
| user_summary_by_file_io |
| user_summary_by_file_io_type |
| user_summary_by_stages |
| user_summary_by_statement_latency |
| user_summary_by_statement_type |
| version |
| wait_classes_global_by_avg_latency |
| wait_classes_global_by_latency |
| waits_by_host_by_latency |
| waits_by_user_by_latency |
| waits_global_by_latency |
| x$host_summary |
| x$host_summary_by_file_io |
| x$host_summary_by_file_io_type |
| x$host_summary_by_stages |
| x$host_summary_by_statement_latency |
| x$host_summary_by_statement_type |
| x$innodb_buffer_stats_by_schema |
| x$innodb_buffer_stats_by_table |
| x$innodb_lock_waits |
| x$io_by_thread_by_latency |
| x$io_global_by_file_by_bytes |
| x$io_global_by_file_by_latency |
| x$io_global_by_wait_by_bytes |
| x$io_global_by_wait_by_latency |
| x$latest_file_io |
| x$memory_by_host_by_current_bytes |
| x$memory_by_thread_by_current_bytes |
| x$memory_by_user_by_current_bytes |
| x$memory_global_by_current_bytes |
| x$memory_global_total |
| x$processlist |
| x$ps_digest_95th_percentile_by_avg_us |
| x$ps_digest_avg_latency_distribution |
| x$ps_schema_table_statistics_io |
| x$schema_flattened_keys |
| x$schema_index_statistics |
| x$schema_table_lock_waits |
| x$schema_table_statistics |
| x$schema_table_statistics_with_buffer |
| x$schema_tables_with_full_table_scans |
| x$session |
| x$statement_analysis |
| x$statements_with_errors_or_warnings |
| x$statements_with_full_table_scans |
| x$statements_with_runtimes_in_95th_percentile |
| x$statements_with_sorting |
| x$statements_with_temp_tables |
| x$user_summary |
| x$user_summary_by_file_io |
| x$user_summary_by_file_io_type |
| x$user_summary_by_stages |
| x$user_summary_by_statement_latency |
| x$user_summary_by_statement_type |
| x$wait_classes_global_by_avg_latency |
| x$wait_classes_global_by_latency |
| x$waits_by_host_by_latency |
| x$waits_by_user_by_latency |
| x$waits_global_by_latency |
+-----------------------------------------------+
101 rows in set (0.00 sec)
mysql> describe version
-> ;
+---------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------+------+-----+---------+-------+
| sys_version | varchar(5) | NO | | | |
| mysql_version | varchar(6) | NO | | | |
+---------------+------------+------+-----+---------+-------+
2 rows in set (0.30 sec)
mysql> exit
Bye
C:\Users\hp>
SQL DML和DDL
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
SQL 结构化查询语言(Structured Query Language)
DML 数据操纵语言(Data Manipulation Language)
DDL 数据定义语言(Data Definition Language)
SQL 的 DML 部分:
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
SQL的 DDL部分:
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
数据库的xx语言
本质上是 CRUD 增删改查
DDL 数据定义语言(Data Definition Language)
DML 数据操纵语言(Data Manipulation Language)
DQL 数据查询语言(Data QueryLanguage)
DCL 数据控制语言 (Data Control Language)
语法
SQL SELECT语句
SELECT 语句用于从表中选取数据。
结果被存储在一个结果表中,称为结果集。
语法:
SELECT 列名称 FROM 表名称
SELECT * FROM 表名称
注:SQL 语句对大小写不敏感,SELECT 等效于 select。
实例:
如需获取名为 "LastName" 和 "FirstName" 的列的内容(从名为 "Persons" 的数据库表中),请使用这样的 SELECT 语句:
SELECT LastName,FirstName FROM Persons
"Persons" 表:
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
结果:
| LastName | FirstName |
|---|---|
| Adams | John |
| Bush | George |
| Carter | Thomas |
如需获取所有列的内容(从名为 "Persons" 的数据库表中),请使用这样的 SELECT 语句:
星号(*)是选取所有列的快捷方式。
SELECT * FROM Persons
结果:
| Id | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
SQL SELECT DISTINCT语句
在表中,可能会包含重复值,关键词 DISTINCT 用于返回唯一不同的值。
语法:
SELECT DISTINCT 列名称 FROM 表名称
实例:
如果要从 "Company" 列中选取所有的值,我们需要使用 SELECT 语句:
SELECT Company FROM Orders
"Orders"表:
| Company | OrderNumber |
|---|---|
| IBM | 3532 |
| W3School | 2356 |
| Apple | 4698 |
| W3School | 6953 |
结果:
| Company |
|---|
| IBM |
| W3School |
| Apple |
| W3School |
在结果集中,W3School 被列出了两次。
如需从 Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句:
SELECT DISTINCT Company FROM Orders
结果:
| Company |
|---|
| IBM |
| W3School |
| Apple |
SQL WHERE 子句
WHERE 子句用于规定选择的标准。
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
语法:
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
下面的运算符可在 WHERE 子句中使用:
| 操作符 | 描述 |
|---|---|
| = | 等于 |
| <> | 不等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| BETWEEN | 在某个范围内 |
| LIKE | 搜索某种模式 |
注:在某些版本的 SQL 中,操作符 <> 可以写为 !=。
实例:
如果希望只选取居住在城市 "Beijing" 中的人,我们需要向 SELECT 语句添加 WHERE 子句:
SELECT * FROM Persons WHERE City='Beijing'
"Persons" 表
| LastName | FirstName | Address | City | Year |
|---|---|---|---|---|
| Adams | John | Oxford Street | London | 1970 |
| Bush | George | Fifth Avenue | New York | 1975 |
| Carter | Thomas | Changan Street | Beijing | 1980 |
| Gates | Bill | Xuanwumen 10 | Beijing | 1985 |
结果:
| LastName | FirstName | Address | City | Year |
|---|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing | 1980 |
| Gates | Bill | Xuanwumen 10 | Beijing | 1985 |
引号的使用
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
文本值:
这是正确的:
SELECT * FROM Persons WHERE FirstName='Bush'
这是错误的:
SELECT * FROM Persons WHERE FirstName=Bush
数值:
这是正确的:
SELECT * FROM Persons WHERE Year>1965
这是错误的:
SELECT * FROM Persons WHERE Year>'1965'
AND 和 OR 运算符
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
“Persons”表:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Adams | John | Oxford Street | London |
| Bush | George | Fifth Avenue | New York |
| Carter | Thomas | Changan Street | Beijing |
| Carter | William | Xuanwumen 10 | Beijing |
AND 运算符实例:
使用 AND 来显示所有姓为 "Carter" 并且名为 "Thomas" 的人:
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
结果:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
OR 运算符实例:
使用 OR 来显示所有姓为 "Carter" 或者名为 "Thomas" 的人:
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
结果:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
| Carter | William | Xuanwumen 10 | Beijing |
结合 AND 和 OR 运算符实例:
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
结果:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
| Carter | William | Xuanwumen 10 | Beijing |
ORDER BY语句
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果希望按照降序对记录进行排序,可以使用 DESC 关键字。
“Orders” 表:
| Company | OrderNumber |
|---|---|
| IBM | 3532 |
| W3School | 2356 |
| Apple | 4698 |
| W3School | 6953 |
实例1:
以字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company
结果:
| Company | OrderNumber |
|---|---|
| Apple | 4698 |
| IBM | 3532 |
| W3School | 6953 |
| W3School | 2356 |
实例2:
以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
结果:
| Company | OrderNumber |
|---|---|
| Apple | 4698 |
| IBM | 3532 |
| W3School | 2356 |
| W3School | 6953 |
实例3:
以字母逆序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
结果:
| Company | OrderNumber |
|---|---|
| W3School | 6953 |
| W3School | 2356 |
| IBM | 3532 |
| Apple | 4698 |
实例4:
以字母逆序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
结果:
| Company | OrderNumber |
|---|---|
| W3School | 2356 |
| W3School | 6953 |
| IBM | 3532 |
| Apple | 4698 |
INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行。
语法:
INSERT INTO 表名称 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
实例:
插入新的行
"Persons" 表:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
SQL 语句:
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
结果:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
| Gates | Bill | Xuanwumen 10 | Beijing |
在指定的列中插入数据
"Persons" 表:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
| Gates | Bill | Xuanwumen 10 | Beijing |
SQL 语句:
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
结果:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Carter | Thomas | Changan Street | Beijing |
| Gates | Bill | Xuanwumen 10 | Beijing |
| Wilson | Champs-Elysees |
Update 语句
Update 语句用于修改表中的数据。
语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
实例:
Person表:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Gates | Bill | Xuanwumen 10 | Beijing |
| Wilson | Champs-Elysees |
更新某一行中的一个列
为 lastname 是 "Wilson" 的人添加 firstname:
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
结果:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Gates | Bill | Xuanwumen 10 | Beijing |
| Wilson | Fred | Champs-Elysees |
更新某一行中的若干列
修改地址(address),并添加城市名称(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'
结果:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Gates | Bill | Xuanwumen 10 | Beijing |
| Wilson | Fred | Zhongshan 23 | Nanjing |
DELETE 语句
DELETE 语句用于删除表中的行。
语法:
DELETE FROM 表名称 WHERE 列名称 = 值
实例:
Person表:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Gates | Bill | Xuanwumen 10 | Beijing |
| Wilson | Fred | Zhongshan 23 | Nanjing |
删除某行
"Fred Wilson" 会被删除:
DELETE FROM Person WHERE LastName = 'Wilson'
结果:
| LastName | FirstName | Address | City |
|---|---|---|---|
| Gates | Bill | Xuanwumen 10 | Beijing |
删除所有行
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name
或者:
DELETE * FROM table_name

浙公网安备 33010602011771号