MySQL 是什么?

MySQL是最流行的关系型数据库管理系统(RDNMS指建立在关系模型上的数据库)

常用的RDBMS术语

  • 数据库: 数据库是一些关联表的集合。

  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。

  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。

  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。

  • 外键:外键用于关联两个表。

  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

 MySQL的入门基础命令

启动关闭MySQL服务器

  • 首先,我们需要通过以下命令来检查MySQL服务器是否启动:

  • ps -ef | grep mysqld

  • 如果MySql已经启动,以上命令将输出mysql进程列表, 如果mysql未启动,你可以使用以下命令来启动mysql服务器:

root@host# cd /usr/bin
./mysqld_safe &

如果你想关闭目前运行的 MySQL 服务器, 你可以执行以下命令:

root@host# cd /usr/bin
./mysqladmin -u root -p shutdown
Enter password: ******

如果你想重启目前运行的 MySQL 服务器, 你可以执行以下命令:

root@host# service mysqld restart //重启 mysql

MySQL 用户设置

如果你需要添加 MySQL 用户,你只需要在 mysql 数据库中的 user 表添加新用户即可。

 1、新建用户

创建test用户,密码是123456

MySQL -u root -p 
CREATE USER 'test'@'localhost'  IDENTIFIED BY '1234'; #本地登录 
CREATE USER 'test'@'%'  IDENTIFIED BY '1234'; #远程登录 
quit 
mysql -u test -p #测试是否创建成功

2.为用户授权

a.授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by '密码'; 

b.登录MYSQL,这里以ROOT身份登录:

mysql -u root -p

c.为用户创建一个数据库(testDB):

create database testDB; 
create database testDB default charset utf8 collate utf8_general_ci; #设置字符集的语句,一般不写。utf8_general_ci忽略大小写

d.授权test用户拥有testDB数据库的所有权限:

grant all privileges on testDB.*to "test" @" localhost" identified by "123456";

flush privileges;#刷新系统权限表

e.指定部分权限给用户:

grant select,update on testDB.*to "test" @" localhost" identified by"123456";

flush privileges;#刷新系统权限表

f.授权test用户拥有所有数据库的某些权限:  

grant select,delete,update,create,drop on . to test@”%” identified by “1234”; #”%” 表示对所有非本地主机授权,不包括localhost

g.数据库/数据表/数据列权限:

数据库/数据表/数据列权限:

Alter: 修改已存在的数据表(例如增加/删除列)和索引。
Create: 建立新的数据库或数据表。
Delete: 删除表的记录。
Drop: 删除数据表或数据库。
INDEX: 建立或删除索引。
Insert: 增加表的记录。
Select: 显示/搜索表的记录。
Update: 修改表中已存在的记录。

全局管理MySQL用户权限:

file: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。

特别的权限:

ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。

3、删除用户

mysql -u root -p 
Delete FROM mysql.user Where User=”test” and Host=”localhost”; 
flush privileges; 
drop database testDB;

删除账户及权限:

drop user 用户名@’%’; 
drop user 用户名@ localhost;

4、修改指定用户密码

mysql -u root -p 
update mysql.user set authentication_string=password(“新密码”) where User=”test” and Host=”localhost”; 
flush privileges;

5、查看用户

查询用户表

SELECT User,Host,Password FROM mysql.user;

显示所有用户(不重复)

SELECT DISTINCT User FROM mysql.user;

查看用户权限

show grants for 用户名; 

 

查看user表结构

desc mysql.user;

6.管理MySQL的命令

USE 数据库名 :
选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库。

mysql> use RUNOOB;
Database changed

SHOW DATABASES: 
列出 MySQL 数据库管理系统的数据库列表。

mysql> SHOW DATABASES;

SHOW TABLES:
显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。

mysql> use RUNOOB;Database changed
mysql> SHOW TABLES;

SHOW COLUMNS FROM 数据表:
显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。

mysql> SHOW COLUMNS FROM runoob_tbl;

SHOW INDEX FROM 数据表:
显示数据表的详细索引信息,包括PRIMARY KEY(主键)。

mysql> SHOW INDEX FROM runoob_tbl;

SHOW TABLE STATUS LIKE [FROM db_name] [LIKE 'pattern'] \G: 
该命令将输出Mysql数据库管理系统的性能及统计信息。

mysql> SHOW TABLE STATUS  FROM RUNOOB;   # 显示数据库 RUNOOB 中所有表的信息mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%';     # 表名以runoob开头的表的信息mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'\G;   # 加上 \G,查询结果按列打印

7.删除数据库

你也可以使用 mysql mysqladmin 命令在终端来执行删除命令。

[root@host]# mysqladmin -u root -p drop RUNOOB
Enter password:******

8.创建数据表

创建MySQL数据表需要以下信息:

  • 表名

  • 表字段名

  • 定义每个表字段

语法

以下为创建MySQL数据表的SQL通用语法:

CREATE TABLE table_name (column_name column_type);


以下例子中我们将在 RUNOOB 数据库中创建数据表runoob_tbl:

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;

实例解析:

  • 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。

  • AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。

  • PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。

  • ENGINE 设置存储引擎,CHARSET 设置编码。



通过命令提示符创建表

通过 mysql> 命令窗口可以很简单的创建MySQL数据表。你可以使用 SQL 语句 CREATE TABLE 来创建数据表。

实例

以下为创建数据表 runoob_tbl 实例:

root@host# mysql -u root -pEnter password:*******mysql> use RUNOOB;Database changed
mysql> CREATE TABLE runoob_tbl(
   -> runoob_id INT NOT NULL AUTO_INCREMENT,
   -> runoob_title VARCHAR(100) NOT NULL,
   -> runoob_author VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( runoob_id )
   -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.16 sec)mysql>

注意:MySQL命令终止符为分号 (;) 。

MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。

语法

以下为删除MySQL数据表的通用语法:

DROP TABLE table_name ;

在命令提示窗口中删除数据表

在mysql>命令提示窗口中删除数据表SQL语句为 DROP TABLE 

实例

以下实例删除了数据表runoob_tbl:

root@host# mysql -u root -p
Enter password:*******
mysql> use RUNOOB;
Database changed
mysql> DROP TABLE runoob_tbl
Query OK, 0 rows affected (0.8 sec)
mysql>

9.插入数据

MySQL 表中使用 INSERT INTO SQL语句来插入数据。

你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据。

语法

以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法:

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES                       ( value1, value2,...valueN );

如果数据是字符型,必须使用单引号或者双引号,如:"value"。


通过命令提示窗口插入数据

以下我们将使用 SQL INSERT INTO 语句向 MySQL 数据表 runoob_tbl 插入数据

实例

以下实例中我们将向 runoob_tbl 表插入三条数据:

root@host# mysql -u root -p password;Enter password:*******mysql> use RUNOOB;Database changed
mysql> INSERT INTO runoob_tbl 
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES    -> ("学习 PHP", "菜鸟教程", NOW());Query OK, 1 rows affected, 1 warnings (0.01 sec)mysql> INSERT INTO runoob_tbl    -> (runoob_title, runoob_author, submission_date)
    -> VALUES    -> ("学习 MySQL", "菜鸟教程", NOW());Query OK, 1 rows affected, 1 warnings (0.01 sec)mysql> INSERT INTO runoob_tbl    -> (runoob_title, runoob_author, submission_date)
    -> VALUES    -> ("JAVA 教程", "RUNOOB.COM", '2016-05-06');Query OK, 1 rows affected (0.00 sec)mysql>

注意: 使用箭头标记 -> 不是 SQL 语句的一部分,它仅仅表示一个新行,如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写 SQL 语句,SQL 语句的命令结束符为分号 ;

在以上实例中,我们并没有提供 runoob_id 的数据,因为该字段我们在创建表的时候已经设置它为 AUTO_INCREMENT(自动增加) 属性。 所以,该字段会自动递增而不需要我们去设置。实例中 NOW() 是一个 MySQL 函数,该函数返回日期和时间。

接下来我们可以通过以下语句查看数据表数据:

读取数据表:

select * from runoob_tbl;

输出结果:

管理系统中的mysql基本应用_linux

10查询数据

MySQL 数据库使用SQL SELECT语句来查询数据。

你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据。

语法

以下为在MySQL数据库中查询数据通用的 SELECT 语法:

SELECT column_name,column_name
FROM table_name[WHERE Clause][LIMIT N][ OFFSET M]
  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。

  • SELECT 命令可以读取一条或者多条记录。

  • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据

  • 你可以使用 WHERE 语句来包含任何条件。

  • 你可以使用 LIMIT 属性来设定返回的记录数。

  • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。


通过命令提示符获取数据

以下实例我们将通过 SQL SELECT 命令来获取 MySQL 数据表 runoob_tbl 的数据:

实例

以下实例将返回数据表 runoob_tbl 的所有记录:

读取数据表:

select * from runoob_tbl;

输出结果:

  1. 管理系统中的mysql基本应用_linux_02

WHERE 语句的应用

SELECT * from runoob_tbl WHERE runoob_author='菜鸟教程';

11.update查询

如果我们需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作。.

语法

以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法:

UPDATE table_name SET field1=new-value1, field2=new-value2[WHERE Clause]
  • 你可以同时更新一个或多个字段。

  • 你可以在 WHERE 子句中指定任何条件。

  • 你可以在一个单独表中同时更新数据。

当你需要更新数据表中指定行的数据时 WHERE 子句是非常有用的。


通过命令提示符更新数据

以下我们将在 SQL UPDATE 命令使用 WHERE 子句来更新 runoob_tbl 表中指定的数据:

实例

以下实例将更新数据表中 runoob_id 为 3 的 runoob_title 字段值:

SQL UPDATE 语句:

mysql> UPDATE runoob_tbl SET runoob_title='学习 C' WHERE runoob_id=3;

Query OK, 1 rows affected (0.01 sec)

mysql> SELECT * from runoob_tbl WHERE runoob_id=3;

+-----------+--------------+---------------+-----------------+ 

| runoob_id | runoob_title | runoob_author | submission_date

+-----------+--------------+---------------+-----------------+

 | 3         | 学习 C  | RUNOOB.COM    | 2016-05-06      | 

+-----------+--------------+---------------+-----------------+

1 rows in set (0.01 sec)

从结果上看,runoob_id 为 3 的 runoob_title 已被修改为学习C。

12.DELETE语句


你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录。

你可以在 mysql> 命令提示符或 PHP 脚本中执行该命令。

语法

以下是 SQL DELETE 语句从 MySQL 数据表中删除数据的通用语法:

DELETE FROM table_name [WHERE Clause]
  • 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。

  • 你可以在 WHERE 子句中指定任何条件

  • 您可以在单个表中一次性删除记录。

当你想删除数据表中指定的记录时 WHERE 子句是非常有用的。


从命令行中删除数据

这里我们将在 SQL DELETE 命令中使用 WHERE 子句来删除 MySQL 数据表 runoob_tbl 所选的数据。

实例

以下实例将删除 runoob_tbl 表中 runoob_id 为3 的记录:

DELETE 语句:

mysql> use RUNOOB;

Database changed

mysql> DELETE FROM runoob_tbl WHERE runoob_id=3;

Query OK, 1 row affected (0.23 sec)

MySQL LIKE 子句

WHERE 子句中可以使用等号 = 来设定获取数据的条件,如 "runoob_author = 'RUNOOB.COM'"

SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *

如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。

语法

以下是 SQL SELECT 语句使用 LIKE 子句从数据表中读取数据的通用语法:

SELECT field1, field2,...fieldN 
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'


实例

以下是我们将 runoob_tbl 表中获取 runoob_author 字段中以 COM 为结尾的的所有记录:

SQL LIKE 语句:

mysql> use RUNOOB;

Database changed

mysql> SELECT * from runoob_tbl  WHERE runoob_author LIKE '%COM';

 +-----------+---------------+---------------+-----------------+

 | runoob_id | runoob_title  | runoob_author | submission_date

+-----------+---------------+---------------+-----------------+

 | 3         | 学习 Java   | RUNOOB.COM    | 2015-05-01      | | 4         

| 学习 Python | RUNOOB.COM    | 2016-03-06      | 

+-----------+---------------+---------------+-----------------+

2 rows in set (0.01 sec)


MySQL UNION 操作符

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。相当于and.

举例:

管理系统中的mysql基本应用_mysql_03

管理系统中的mysql基本应用_基本应用_04

管理系统中的mysql基本应用_mysql_05

管理系统中的mysql基本应用_基本应用_06管理系统中的mysql基本应用_mysql_07

MySQL 排序

ORDER BY 子句将查询数据排序后再返回数据

管理系统中的mysql基本应用_linux_08

MySQL GROUP BY 语句

GROUP BY 语句根据一个或多个列对结果集进行分组。

在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

管理系统中的mysql基本应用_linux_09管理系统中的mysql基本应用_mysql_10


Mysql 连接的使用

如何使用 MySQL 的 JOIN 在两个或多个表中查询数据

JOIN 按照功能大致分为如下三类:

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。

  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。

  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

管理系统中的mysql基本应用_mysql_11