MySql数据库的学习

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

参考博客:MySQL 教程 | 菜鸟教程 (runoob.com)

一、什么是数据库?

数据库(Database,DB)是按照数据结构来组织、存储和管理数据的仓库。它本身可以看作是一个电子化的文件柜,用户可以对文件中的数据进行增加、删除、修改、查找等操作。数据库通常以电子形式存储在计算机系统中,并且通常由数据库管理系统(DBMS)来控制。

RDBMS即关系数据库管理系统(Relational Database Management System)。它的特点包括:

1. 数据以表格的形式出现。
2. 每行为各种记录名称。
3. 每列为记录名称所对应的数据域。
4. 许多的行和列组成一张表单。
5. 若干的表单组成database。

RDBMS 术语:

  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 键(key): 键的值在当前列中具有唯一性。

由于:菜鸟教程的例子是根据PHP 的学习。所以这里我们推荐另一个网站:

SQL 教程 (w3schools.com)

二、开始学习使用mysql 语句。

一些最重要的 SQL 命令

  • SELECT- 从数据库中提取数据    select
  • UPDATE- 更新数据库中的数据     update
  • DELETE- 从数据库中删除数据    delete
  • INSERT INTO- 将新数据插入数据库    insert into
  • CREATE DATABASE- 创建一个新数据库    create database
  • ALTER DATABASE- 修改数据库   alter database
  • CREATE TABLE- 创建一个新表   create table
  • ALTER TABLE- 修改表格     alter table
  • DROP TABLE- 删除表   drop table
  • CREATE INDEX- 创建索引(搜索键)  create index
  • DROP INDEX- 删除索引    drop index

select语句:

记住:select distinct  comnlus from Customers

该语句用于仅返回不同(不同)的值。SELECT DISTINCT

在表中,一列通常包含许多重复值;有时您只想列出不同的(不同的)值。

以下 SQL 语句从“客户”中选择国家/地区为 不是“德国”也不是“美国”:

SELECT * FROM Customers
WHERE NOT Country = 'Germany' AND NOT Country = 'USA';

按关键字排序的 MySQL

关键字用于按升序或 降序。ORDER BY

默认情况下,关键字按升序对记录进行排序。若要按降序对记录进行排序,请使用关键字。ORDER BY DESC

以下 SQL 语句从“客户”表中选择所有客户, 按“国家/地区”升序排序,按“客户名称”列降序排序:

SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;

MySQL 更新语句

它是确定将更新多少条记录的子句。WHERE

以下 SQL 语句将 将国家/地区为“墨西哥”的所有记录的邮政编码更新为 00000:

UPDATE Customers
SET PostalCode = 00000
WHERE Country = 'Mexico';

MySQL 限制条款

该子句用于指定要返回的记录数。LIMIT

以下 SQL 语句从“客户”表中选择前三条记录, 其中国家是“德国”:

SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;

MySQL MIN() 和 MAX() 函数

该函数返回所选列的最小值。MIN()

该函数返回所选列的最大值。MAX()

以下 SQL 语句查找最便宜产品的价格:(加了as,后面是别名的意思。)

SELECT MIN(Price) AS SmallestPrice
FROM Products;

计数() 语法

该函数返回与指定条件匹配的行数。COUNT()

SELECT COUNT(column_name)
FROM table_name
WHERE condition;

AVG() 语法

该函数返回数字列的平均值。AVG()

SESELECT AVG(Price)
FRFROM Products;

SUM() 语法

该函数返回数字列的总和。SUM()

以下 SQL 语句查找“数量”字段的总和 在“订单详情”表中:

SELECT SUM(Quantity)
FROM OrderDetails;

MySQL LIKE 运算符

运算符在子句中用于搜索列中的指定模式。LIKE WHERE

有两个通配符通常与运算符结合使用: LIKE

  • 百分号 (%) 表示零个、一个或多个字符
  • 下划线符号 (_) 表示一个字符

百分号和下划线也可以组合使用!

以下 SQL 语句选择具有 ContactName 的所有客户 以“a”开头,以“o”结尾:

SELECT * FROM Customers
WHERE ContactName LIKE 'a%o';

以下 SQL 语句选择具有 CustomerName 的所有客户 做 不以“a”开头:

SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';

MySQL 通配符(% _ )

通配符用于替换字符串中的一个或多个字符。

通配符与运算符一起使用。运算符在子句中用于搜索列中的指定模式。 LIKELIKE WHERE

以下 SQL 语句选择“城市”以任意字符开头,后跟“ondon”的所有客户:

SELECT * FROM Customers
WHERE City LIKE '_ondon';

MySQL IN 运算符

运算符允许您在一个子句中指定多个值。IN WHERE

运算符是多个条件的简写。IN OR

以下 SQL 语句选择位于“德国”、“法国”的所有客户 或“英国”:

SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');

以下 SQL 语句选择来自同一客户的所有客户 作为供应商的国家:

SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);

MySQL BETWEEN 运算符

运算符选择给定范围内的值。这些值可以是数字、文本或日期。BETWEEN

运算符是包含的:包括开始值和结束值。BETWEEN

以下 SQL 语句选择价格介于 10 和 20 之间的所有产品 1. 此外;请勿显示分类 ID 为1、2、3的商品:

SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20
AND CategoryID NOT IN (1,2,3);

以下 SQL 语句选择订单日期介于 '01-1996-31' 和 '1996年<>月<>日':

SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';

MySQL 别名

别名用于为表或表中的列指定临时名称。

别名通常用于使列名更具可读性。

别名仅在该查询期间存在。

使用关键字创建别名。AS

以下 SQL 语句创建两个列别名,一个用于客户 ID 列,一个用于“客户名称”列:

SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;

以下 SQL 语句创建一个名为“Address”的别名,该别名组合了四列(地址、邮政编码、 城市和国家):

SELECT CustomerName, CONCAT_WS(', ', Address, PostalCode, City, Country) AS Address
FROM Customers;

以下 SQL 语句从客户那里选择所有订单 客户 ID = 4(在喇叭周围)。我们使用“客户”和“订单”表,以及 分别给它们“c”和“o”的表别名(这里我们使用 别名以缩短 SQL):

例:

SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName='Around the Horn' AND c.CustomerID=o.CustomerID;

等同于:

SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName='Around the Horn' AND Customers.CustomerID=Orders.CustomerID;

MySQL 连接表

子句用于合并两个或多个表中的行,基于 它们之间的相关列。JOIN

MySQL 中支持的联接类型

  • INNER JOIN:返回两个表中具有匹配值的记录
  • LEFT JOIN:返回左侧表中的所有记录,以及右侧表中的匹配记录
  • RIGHT JOIN:返回右侧表中的所有记录,以及左侧表中的匹配记录
  • CROSS JOIN:返回两者的所有记录 表

创建以下 SQL 语句(包含一个 ), 选择在两个表(Orders、Customers )中具有匹配值的记录: INNER JOIN

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

连接三个表:

以下 SQL 语句选择包含客户和托运人的所有订单 信息:

SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);

以下 SQL 语句将选择所有客户以及他们可能拥有的任何订单:LEFT JOIN

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;

以下 SQL 语句将返回所有员工及其任何订单 可能已经放置了:RIGHT JOIN

SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;

MySQL 分组依据语句

该语句将具有相同值的行分组到摘要中 行,例如“查找每个国家/地区的客户数量”。GROUP BY

该语句通常与聚合函数 (、、、、) 一起使用,以按一列或多列对结果集进行分组。GROUP BYCOUNT()MAX()MIN()SUM()AVG()

以下 SQL 语句列出了每个国家/地区的客户数量:

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;

以下 SQL 语句列出了每个国家/地区的客户数量, 从高到低排序:

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;

使用联接示例分组依据

以下 SQL 语句列出了每个发件人发送的订单数:

SELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders
LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID
GROUP BY ShipperName;

MySQL CASE 语句

该语句通过条件,并在第一个条件为 遇见了(就像一个如果-然后-其他语句)。因此,一旦条件为真,它就会停止 读取并返回结果。如果没有条件为真,则返回 子句中的值。CASEELSE

如果没有部分且没有条件为真,则返回 NULL。ELSE

以下 SQL 将按城市对客户进行排序。但是,如果城市为 NULL,则按国家/地区排序:

SELECT CustomerName, City, Country
FROM Customers
ORDER BY
(CASE
    WHEN City IS NULL THEN Country
    ELSE City
END);

三、学习MySQL 创建数据库语句

和前面使用mysql语句不一样。这里是创建数据库。

SQL 创建数据库语句

该语句用于创建新的 SQL 数据库。CREATE DATABASE

语法

CREATE DATABASE databasename;

SQL 删除数据库语句

该语句用于删除现有 SQL 数据库。DROP DATABASE

语法

DROP DATABASE databasename;

SQL 备份数据库语句

该语句在 SQL Server 中用于创建现有 SQL 数据库的完整备份。BACKUP DATABASE

语法

BACKUP DATABASE databasename
TO DISK = 'filepath';

例如:

BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak';

使用差异备份示例 (differential)

以下 SQL 语句创建数据库“testDB”的差异备份:

BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak'
WITH DIFFERENTIAL;

提示:差异备份可减少备份时间(因为仅备份更改)。

SQL 创建表语句

该语句用于在数据库中创建新表。CREATE TABLE

语法

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);

下面的示例创建一个名为“人员”的表,其中包含五列:人员 ID、姓氏、名字、 地址和城市:

CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);

PersonID 列的类型为 int,将保存一个整数。

“姓氏”、“名字”、“地址”和“城市”列是 键入 varchar 并将保存字符,以及这些字段的最大长度 是 255 个字符。

以下 SQL 创建一个名为“TestTables”的新表(即 “客户”表的副本)

CREATE TABLE TestTable AS
SELECT customername, contactname
FROM customers;

SQL 删除表语句

该语句用于删除数据库中的现有表。DROP TABLE

语法

DROP TABLE table_name;

SQL 更改表语句

该语句用于添加、删除或修改现有表中的列。ALTER TABLE

该语句还用于添加和删除各种约束 现有表。ALTER TABLE

若要在表中添加列,请使用以下语法:

ALTER TABLE table_name
ADD column_name datatype;

若要删除表中的列,请使用以下语法(请注意,一些 数据库系统不允许删除列):

ALTER TABLE table_name
DROP COLUMN column_name;

以下 SQL 从“客户”表中删除“电子邮件”列:

ALTER TABLE Customers
DROP COLUMN Email;

在“人员”表中添加一个名为“出生日期”的列。(这是约束,后面,就开始讲约束。)

我们使用以下 SQL 语句:

ALTER TABLE Persons
ADD DateOfBirth date;    (DateOfBirth 是列,date是数据类型)

请注意,新列“出生日期”的类型为 date,并且将包含 日期。数据类型指定列可以保存的数据类型。

SQL 创建约束

可以在使用该语句创建表时或创建表后指定约束 与声明。CREATE TABLEALTER TABLE

语法

CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    column3 datatype constraint,
    ....
);

SQL 约束

SQL 约束用于为表中的数据指定规则。

约束用于限制可以进入表的数据类型。这 确保表中数据的准确性和可靠性。如果约束和数据操作之间存在任何冲突, 操作已中止。

约束可以是列级别或表级别。列级约束 应用于列,表级约束应用于整个表。

SQL 中通常使用以下约束:

  • NOT NULL- 确保列不能具有 NULL 值
  • UNIQUE- 确保列中的所有值 不同
  • PRIMARY KEY- a 和 . 唯一标识表中的每一行NOT NULLUNIQUE
  • FOREIGN KEY- 防止破坏表之间链接的操作
  • CHECK- 确保 列中的值满足特定条件
  • DEFAULT- 设置列的默认值 如果没有值 已指定
  • CREATE INDEX- 用于从数据库中创建和检索数据 很快

SQL 非空约束

默认情况下,列可以保存 NULL 值。

约束强制列不接受 NULL 值。NOT NULL

这将强制字段始终包含值,这意味着如果不向此字段添加值,则无法插入新记录或更新记录

以下 SQL 确保“ID”、“姓氏”和 “名字”列 创建“人员”表时将不接受空值:

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255) NOT NULL,
    Age int
);

SQL 唯一约束

约束可确保列中的所有值都不同。UNIQUE

和约束都为一列或一组列的唯一性提供了保证。UNIQUEPRIMARY KEY

约束自动具有约束。PRIMARY KEYUNIQUE

但是,每个表可以有多个约束,但每个表只能有一个约束。UNIQUEPRIMARY KEY

以下 SQL 在创建“人员”表时对“ID”列创建约束:UNIQUE

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    UNIQUE (ID)
);

SQL 主键约束

约束唯一标识表中的每条记录。PRIMARY KEY

主键必须包含唯一值,并且不能包含 NULL 值。

一个表只能有一个主键;在表中,此主键可以 由单列或多列(字段)组成。

以下 SQL 在创建“人员”表时在“ID”列上创建一个:PRIMARY KEY

MySQL:

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (ID)
);

(constraint)

若要允许命名约束,以及在多个列上定义约束,请使用以下 SQL 语法:PRIMARY KEYPRIMARY KEY

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
);

SQL 外键约束

约束用于防止会破坏表之间的链接的操作。FOREIGN KEY

A 是一个表中的字段(或字段集合),它指的是 在另一个表中。FOREIGN KEYPRIMARY KEY

带有外键的表称为子表,该表 主键称为引用表或父表。

以下 SQL 在创建“订单”表时在“人员 ID”列上创建一个:FOREIGN KEY

MySQL:

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)

);

SQL 检查约束

约束用于限制可以放置在列中的值范围。CHECK

如果在列上定义约束,则 将仅允许此列的某些值。CHECK

如果在表上定义约束,则可以根据行中其他列中的值来限制某些列中的值。CHECK

以下 SQL 在创建“人员”表时对“年龄”列创建约束。 该约束确保人员的年龄必须为 18 岁或以上:CHECKCHECK

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CHECK (Age>=18)
);

自动增量字段

自动增量允许在将新记录插入表中时自动生成唯一编号。

通常,这是我们希望在每次插入新记录时自动创建的主键字段。

以下 SQL 语句将“人员 ID”列定义为“人员”表中的自动递增主键字段:

CREATE TABLE Persons (
    Personid int NOT NULL AUTO_INCREMENT,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (Personid)
);

默认情况下,的起始值为 1,对于每条新记录,起始值将递增 1。AUTO_INCREMENT

要让序列以另一个值开头,请使用以下 SQL 语句:AUTO_INCREMENT

ALTER TABLE Persons AUTO_INCREMENT=100;

SQL 日期数据类型

MySQL带有以下数据类型,用于在数据库中存储日期或日期/时间值:

  • DATE- 格式 年年-月-DD
  • DATETIME- 格式: 年-月-日 hh:mi:SS
  • TIMESTAMP- 格式: 年-月-日 hh:mi:SS
  • YEAR- 格式 YYYY 或 YY

SQL 注入

SQL 注入是一种代码注入技术,可能会破坏数据库。

SQL注入是最常见的网络黑客技术之一。

SQL 注入是通过网页输入在 SQL 语句中放置恶意代码。

  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL入门学习(1)。   MySQL入门学习(1) · 安装篇 PHP+MySQL+Linux目前已逐渐成为小型web服务器的一种经典组合。在indows环境下构筑和调试MySQL数据库是许多网站开发者的一种首选。本人在Windows98环境下初学MySQL,现将学习过程与经验总结出来供大家参考。 1、下载mysql-3.23.35-win.zip并解压; 2、运行setup.exe;选择d:\mysql,"tyical install" 3、启动mysql,有如下方法: · 方法一:使用winmysqladmin 1)、进入d::\mysql\bin目录,运行winmysqladmin.exe,在屏幕右下角的任务栏内会有一个带红色的图符 2)、鼠标左键点击该图符,选择“show me”,出现“WinMySQLAdmin”操作界面;首次运行时会中间会出现一个对话框要求输入并设置你的用户名和口令 3)、选择“My.INI setup” 4)、在“mysqld file”中选择“mysqld-opt”(win9x)或“mysqld-nt”(winNT) 5)、选择“Pick-up or Edit my.ini values”可以在右边窗口内对你的my.ini文件进行编辑 6)、选择“Save Modification”保存你的my.ini文件 7)、如果你想快速使用winmysqladmin(开机时自动运行),选择“Create ShortCut on Start Menu” 8)、测试: 进入DOS界面; 在d:\mysql\bin目录下运行mysql,进入mysql交互操作界面 输入show databases并回车,屏幕显示出当前已有的两个数据库mysql和test · 方法二:不使用winmysqladmin 1)、在DOS窗口下,进入d:/mysql/bin目录 2)、win9X下)运行: mysqld 在NT下运行: mysqld-nt --standalone 3)、此后,mysql在后台运行 4)、测试mysql:(在d:/mysql/bin目录下) a)、mysqlshow 正常时显示已有的两个数据库mysql和test b)、mysqlshow -u root mysql 正常时显示数据库mysql里的五个表: columns_priv db host tables_priv user c)、mysqladmin version status proc 显示版本号、状态、进程信息等 d)、mysql test 进入mysql操作界面,当前数据库为test 5)、mysql关闭方法: mysqladmin -u root shutdown 4、至此,MySQL已成功安装,接着可以熟悉MySQL的常用命令并创建自己的数据库了。 上篇讲了如何安装并测试MySQL,环境建好后就可以继续我们的学习了。本篇主要熟悉一写常用命令。 · 1、启动MySQL服务器 实际上上篇已讲到如何启动MySQL。两种方法: 一是用winmysqladmin,如果机器启动时已自动运行,则可直接进入下一步操作。 二是在DOS方式下运行 d:mysqlbinmysqld · 2、进入mysql交互操作界面 在DOS方式下,运行: d:mysqlbinmysql 出现: mysql 的提示符,此时已进入mysql的交互操作方式。 如果出现 "ERROR 2003: Can´t connect to MySQL server on ´localhost´ (10061)“, 说明你的MySQL还没有启动。 · 3、退出MySQL操作界面 在mysql>提示符下输入quit可以随时退出交互操作界面: mysql> quit Bye 你也可以用control-D退出。 · 4、第一条命令 mysql> select version(),current_date(); +----------------+-----------------+ | version() | current_date() | +----------------+-----------------+ | 3.23.25a-debug | 2001-05-17 | +----------------+-----------------+ 1 row in set (0.01 sec) mysql> 此命令要求mysql服务器告诉你它的版本号和当前日期。尝试用不同大小写操作上述命令,看结果如何。 结果说明mysql命令的大

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值