赞
踩
MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典公司MySQL AB开发,目前属于Oracle公司。它广泛应用于各种规模的应用程序中,特别是在Web开发领域。以下是MySQL的一些重要特性和优势:
MySQL是开源软件,这意味着它的源代码可以公开访问和修改。用户可以自由地下载、使用和分发MySQL,这使得它在开发者社区中非常受欢迎。
MySQL以其高性能和可靠性而著称。它采用多线程、多用户架构,能够有效地处理大量并发连接和数据操作。此外,MySQL支持多种存储引擎,如InnoDB和MyISAM,允许用户根据具体需求选择最合适的存储引擎。
MySQL支持多种操作系统,包括Windows、Linux、macOS和Unix。它还支持多种编程语言和API,如C、C++、Java、PHP、Python、Perl等,使得开发者可以在各种环境下方便地使用MySQL。
MySQL提供了许多先进的数据库特性,包括:
MySQL提供了多层次的安全机制,包括用户权限管理、SSL加密连接、数据加密等,确保数据的安全性和隐私性。
作为一种广泛使用的数据库系统,MySQL拥有庞大的用户社区和丰富的生态系统。用户可以方便地找到各种支持资源、教程和第三方工具,如MySQL Workbench(数据库设计和管理工具)、phpMyAdmin(基于Web的MySQL管理工具)等。
除了开源版本,MySQL还提供了商业版本(MySQL Enterprise),包括额外的特性和支持服务,如更高级的监控和管理工具、技术支持等,适用于企业级应用。
MySQL广泛应用于以下领域:
MySQL的发展史可以追溯到20世纪90年代,经过多年发展,它已经成为全球最流行的开源数据库之一。下面是MySQL的发展历程中的一些重要里程碑和事件:
1995年 - 第一个公开发布
MySQL 1.0发布:第一个公开版本发布,主要用作一个快速、稳定、开源的SQL数据库。
2000年 - MySQL AB成立
MySQL AB成立:为了更好地推动MySQL的发展,开发团队成立了MySQL AB公司,专注于MySQL的开发和商业化。
2001年 - MySQL 3.23发布
MySQL 3.23:这个版本引入了许多关键特性,包括BLOB数据类型、全文索引和内部数据缓存机制。
2003年 - MySQL 4.0发布
MySQL 4.0:该版本引入了事务支持(通过InnoDB存储引擎)、外键支持和更好的性能优化。
2004年 - MySQL 4.1和MySQL 5.0发布
MySQL 4.1:增加了子查询、联合查询和Unicode支持。
MySQL 5.0:引入了存储过程、触发器、视图和游标,极大地增强了MySQL的功能。
2008年 - 被Sun Microsystems收购
收购:MySQL AB被Sun Microsystems以10亿美元收购。这次收购进一步加速了MySQL的发展,并增强了其在企业市场的地位。
2010年 - Oracle收购Sun Microsystems
Oracle收购:Oracle收购Sun Microsystems,将MySQL纳入其广泛的数据库产品组合中。尽管有一些担忧,MySQL继续作为一个独立的开源项目进行开发。
2013年 - MySQL 5.6发布
MySQL 5.6:改进了性能、可扩展性和安全性,引入了NoSQL接口(通过Memcached API)和全局事务管理器(GTID)。
2015年 - MySQL 5.7发布
MySQL 5.7:进一步提升了性能和可扩展性,增加了JSON数据类型、虚拟列、地理空间支持和更好的优化器。
2018年 - MySQL 8.0发布
MySQL 8.0:这是一个重要的里程碑版本,带来了众多新特性和改进,包括窗口函数、CTE(公共表表达式)、更强的JSON支持、原子DDL操作、改进的并发控制和安全性增强。
近期发展
持续优化和新特性:近年来,MySQL持续改进性能、增加新特性并增强安全性。MySQL团队专注于保持其作为全球领先开源数据库的地位,同时应对现代数据管理需求。
系统版本:Ubuntu 20.04.6 LTS
MySql数据版本:8.0.37
首先,更新您的系统软件包,以确保您拥有最新的软件包信息。
sudo apt update
使用apt
命令来安装MySQL服务器。
sudo apt install mysql-server -y
安装完成后,启动MySQL服务并设置为开机自启动。
# 设置mysql服务启动
sudo systemctl start mysql
# 设置mysql开启自动启动
sudo systemctl enable mysql
MySQL提供了一个安全性脚本,mysql_secure_installation
,可以帮助您提高数据库的安全性。运行该脚本并根据提示进行操作。
sudo mysql_secure_installation
设置密码的复杂度。这里测试使用0
是否移除默认用户,输入y
是否禁止root用户远程登录,测试使用因此输入:n(允许远程登录)
是否删除测试数据,输入:y
确保MySQL服务正在运行。
sudo systemctl status mysql
如果服务正在运行,您会看到类似于以下的输出:
使用root用户登录MySQL。
sudo mysql -u root -p
第一次进入mysql不需要输入密码。进入之后我们可以修改root密码。
设置密码为12345678
登录到数据库中后查看用户信息
select user,host from mysql.user;
修改密码指令:
ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';
FLUSH PRIVILEGES;
在Windows 10上安装MySQL 8数据库的步骤如下。该过程包括下载MySQL安装程序、安装MySQL服务器、进行基本配置以及验证安装。
安装后可以试用14天
输入对应的服务器的ip地址,端口默认3306,用户名称以及密码。
远程服务器链接的时候需要注意,服务器是否开启防火墙,需要关闭防火墙才能链接
右键链接信息,新建数据库
数据数据库名称,使用纯英文,字符集推荐使用utf8mb4,点击确定就可以了。
mysql服务可以创建多个数据库,每一个数据库可以创建多个表,右键,新建表
一个表有很多字段,需要填写字段的名称,类型,长度,是否为空。
这个表有四个字段,id为主键。
点击保存的时候需要输入表名。点击确定保存
双击获取表的内容。
以下内容是通过命令操作数据,这个是必学内容,因为在编写代码的时候都是用sql语句进行控制数据库的数据
mysql -u root -p
CREATE DATABASE database_name;
SHOW DATABASE;
USE database_name;
DROP DATABASE database_name;
在MySQL中,创建表的语法结构较为灵活和强大,可以定义各种数据类型、约束和索引。下面是MySQL创建表的语法结构详解,包括示例和常用选项。
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...
columnN datatype constraints,
table_constraints
);
详细说明
常见的数据类型
p
表示总位数,s
表示小数位数。常见的列级约束
示例
假设我们要创建一个名为 employees
的表,具体要求如下:
id
:员工ID,整数类型,主键,自增。first_name
:员工的名字,字符串类型,不为空。last_name
:员工的姓氏,字符串类型,不为空。email
:员工的电子邮件,字符串类型,唯一,不为空。hire_date
:员工的入职日期,日期类型,不为空。job_title
:员工的职位,字符串类型。CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
hire_date DATE NOT NULL,
job_title VARCHAR(50) NOT NULL
);
外键约束
如果我们有另一个表 departments
,并希望在 employees
表中建立外键引用:
departments
表:CREATE TABLE departments (
department_id INT AUTO_INCREMENT PRIMARY KEY,
department_name VARCHAR(100) NOT NULL
);
employees
表,添加外键:假设每个员工都属于一个部门,我们在 employees
表中添加 department_id
列并设置外键:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
hire_date DATE NOT NULL,
job_title VARCHAR(50) NOT NULL,
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(department_id)
);
表级约束示例
如果需要定义复合主键,可以使用表级约束:
CREATE TABLE project_assignments (
project_id INT,
employee_id INT,
role VARCHAR(50),
PRIMARY KEY (project_id, employee_id)
);
定义外键约束:
CREATE TABLE project_assignments (
project_id INT,
employee_id INT,
role VARCHAR(50),
PRIMARY KEY (project_id, employee_id),
FOREIGN KEY (project_id) REFERENCES projects(project_id),
FOREIGN KEY (employee_id) REFERENCES employees(id)
);
创建表的完整示例
以下是一个包含多种约束和数据类型的完整示例:
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date DATETIME NOT NULL,
customer_id INT NOT NULL,
total_amount DECIMAL(10, 2) NOT NULL,
status ENUM('Pending', 'Shipped', 'Completed', 'Cancelled') DEFAULT 'Pending',
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
DROP TABLE table_name;
在MySQL中创建表是数据库管理的基本操作之一。以下是如何创建一个表的详细实例,包括指定数据类型、设置主键、定义外键和其他约束条件的步骤。
INT
, FLOAT
, DOUBLE
, DECIMAL
CHAR
, VARCHAR
, TEXT
DATE
, TIME
, DATETIME
, TIMESTAMP
BOOLEAN
(在MySQL中通常使用TINYINT(1)
)可以使用 UNSIGNED
属性将类型限制为非负数。
CREATE TABLE example (
tiny TINYINT,
small SMALLINT,
medium MEDIUMINT,
standard INT,
big BIGINT
);
p
表示有效位数。M
表示总位数,D
表示小数位数。CREATE TABLE example (
float_example FLOAT(7,4),
double_example DOUBLE,
decimal_example DECIMAL(10,2)
);
CREATE TABLE example (
date_example DATE,
time_example TIME,
datetime_example DATETIME,
timestamp_example TIMESTAMP,
year_example YEAR
);
CREATE TABLE example ( char_example CHAR(10), varchar_example VARCHAR(255), binary_example BINARY(20), varbinary_example VARBINARY(255), tinytext_example TINYTEXT, text_example TEXT, mediumtext_example MEDIUMTEXT, longtext_example LONGTEXT, tinyblob_example TINYBLOB, blob_example BLOB, mediumblob_example MEDIUMBLOB, longblob_example LONGBLOB, enum_example ENUM('value1', 'value2', 'value3'), set_example SET('value1', 'value2', 'value3') );
CREATE TABLE example (
json_example JSON
);
MySQL 还支持用于地理信息系统 (GIS) 的空间数据类型:
CREATE TABLE example (
geometry_example GEOMETRY,
point_example POINT,
linestring_example LINESTRING,
polygon_example POLYGON
);
在MySQL中,插入数据的操作主要使用 INSERT INTO
语句。INSERT INTO
语句可以插入单行数据、多行数据,或者从一个表中选择数据插入到另一个表中。以下是 INSERT INTO
语句的语法结构以及案例讲解。
插入单行数据
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
INSERT INTO table_name (column1, column2, column3, ...)
VALUES
(value1, value2, value3, ...),
(value4, value5, value6, ...),
...;
INSERT INTO table_name (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM another_table
WHERE condition;
+示例
假设我们有一个名为 employees
的表,结构如下:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
hire_date DATE NOT NULL,
job_title VARCHAR(50) NOT NULL
);
INSERT INTO employees (first_name, last_name, email, hire_date, job_title)
VALUES ('John', 'Doe', 'john.doe@example.com', '2022-01-15', 'Software Engineer');
INSERT INTO employees (first_name, last_name, email, hire_date, job_title)
VALUES
('Jane', 'Smith', 'jane.smith@example.com', '2023-03-22', 'Data Scientist'),
('Mike', 'Johnson', 'mike.johnson@example.com', '2021-07-10', 'Project Manager'),
('Alice', 'Williams', 'alice.williams@example.com', '2022-08-01', 'UI/UX Designer');
假设我们有另一个名为 new_employees
的表,并且想将其中的数据插入到 employees
表中:
CREATE TABLE new_employees (
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(100),
hire_date DATE,
job_title VARCHAR(50)
);
INSERT INTO new_employees (first_name, last_name, email, hire_date, job_title)
VALUES
('Tom', 'Brown', 'tom.brown@example.com', '2024-01-10', 'Network Engineer'),
('Emma', 'Davis', 'emma.davis@example.com', '2023-12-20', 'Marketing Specialist');
将 new_employees
表中的数据插入到 employees
表中:
INSERT INTO employees (first_name, last_name, email, hire_date, job_title)
SELECT first_name, last_name, email, hire_date, job_title
FROM new_employees;
NULL
。email
),插入时要确保该列的值不重复,否则会导致错误。AUTO_INCREMENT
列,不需要在 INSERT
语句中指定该列的值,MySQL 会自动生成。假设我们要创建一个名为 products
的表,并插入一些商品数据:
CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
quantity INT NOT NULL
);
INSERT INTO products (product_name, price, quantity)
VALUES
('Laptop', 899.99, 50),
('Smartphone', 499.99, 200),
('Tablet', 299.99, 150);
查询 products
表中的数据:
SELECT * FROM products;
通过上述语法和示例,您可以熟练地在 MySQL 中插入数据,满足不同的业务需求。
在MySQL中,查询数据是使用 SELECT
语句进行的。SELECT
语句的基本语法结构以及常见用法和实例如下所述。
SELECT column1, column2, ...
FROM table_name
WHERE condition
GROUP BY column
HAVING condition
ORDER BY column
LIMIT number;
*
查询所有列。DESC
表示降序。假设我们有一个名为 employees
的表,结构如下:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
hire_date DATE NOT NULL,
job_title VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) NOT NULL
);
查询 employees
表的所有列:
SELECT * FROM employees;
只查询 first_name
和 last_name
列:
SELECT first_name, last_name FROM employees;
查询职位为 Software Engineer
的员工:
SELECT * FROM employees WHERE job_title = 'Software Engineer';
查询工资大于 50000
的员工:
SELECT * FROM employees WHERE salary > 50000;
按 hire_date
升序排序查询结果:
SELECT * FROM employees ORDER BY hire_date;
按 salary
降序排序查询结果:
SELECT * FROM employees ORDER BY salary DESC;
查询前5条记录:
SELECT * FROM employees LIMIT 5;
查询每个职位的平均工资:
SELECT job_title, AVG(salary) AS average_salary
FROM employees
GROUP BY job_title;
查询每个职位的员工数量:
SELECT job_title, COUNT(*) AS number_of_employees
FROM employees
GROUP BY job_title;
查询员工数量大于1的职位及其员工数量:
SELECT job_title, COUNT(*) AS number_of_employees
FROM employees
GROUP BY job_title
HAVING COUNT(*) > 1;
假设我们有另一个表 departments
,结构如下:
CREATE TABLE departments (
department_id INT AUTO_INCREMENT PRIMARY KEY,
department_name VARCHAR(100) NOT NULL
);
在 employees
表中增加一个 department_id
列:
ALTER TABLE employees ADD department_id INT;
插入一些数据:
INSERT INTO departments (department_name) VALUES ('Engineering'), ('Marketing'), ('Sales');
UPDATE employees SET department_id = 1 WHERE job_title = 'Software Engineer';
UPDATE employees SET department_id = 2 WHERE job_title = 'Marketing Specialist';
UPDATE employees SET department_id = 3 WHERE job_title = 'Sales Representative';
查询员工及其所属部门的信息:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
JOIN departments ON employees.department_id = departments.department_id;
查询工资最高的员工:
SELECT * FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);
查询平均工资以上的员工:
SELECT * FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
DELETE FROM table_name
WHERE condition;
START TRANSACTION;
COMMIT;
ROLLBACK;
CREATE INDEX index_name
ON table_name (column1, column2, ...);
DROP INDEX index_name
ON table_name;
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
DROP VIEW view_name;
在MySQL中,常用的统计函数有助于对数据进行汇总、计算和分析。这些函数包括 COUNT()
, SUM()
, AVG()
, MIN()
, MAX()
等。下面是这些常用统计函数的说明和实例详解。
功能: 计算表中某列的行数。
语法:
COUNT(column_name)
实例: 计算 employees
表中员工的总数。
SELECT COUNT(*) AS total_employees FROM employees;
计算 employees
表中每个职位的员工数量:
SELECT job_title, COUNT(*) AS number_of_employees
FROM employees
GROUP BY job_title;
功能: 计算某列的总和。
语法:
SUM(column_name)
实例: 计算 employees
表中所有员工的总工资。
SELECT SUM(salary) AS total_salary FROM employees;
计算每个职位的总工资:
SELECT job_title, SUM(salary) AS total_salary
FROM employees
GROUP BY job_title;
功能: 计算某列的平均值。
语法:
AVG(column_name)
实例: 计算 employees
表中所有员工的平均工资。
SELECT AVG(salary) AS average_salary FROM employees;
计算每个职位的平均工资:
SELECT job_title, AVG(salary) AS average_salary
FROM employees
GROUP BY job_title;
功能: 找出某列的最小值。
语法:
MIN(column_name)
实例: 查找 employees
表中最低的工资。
SELECT MIN(salary) AS minimum_salary FROM employees;
查找每个职位的最低工资:
SELECT job_title, MIN(salary) AS minimum_salary
FROM employees
GROUP BY job_title;
功能: 找出某列的最大值。
语法:
MAX(column_name)
实例: 查找 employees
表中最高的工资。
SELECT MAX(salary) AS maximum_salary FROM employees;
查找每个职位的最高工资:
SELECT job_title, MAX(salary) AS maximum_salary
FROM employees
GROUP BY job_title;
假设我们有一个 sales
表,结构如下:
CREATE TABLE sales (
sale_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10, 2) NOT NULL,
sale_date DATE NOT NULL
);
插入一些数据:
INSERT INTO sales (product_name, quantity, price, sale_date)
VALUES
('Laptop', 5, 899.99, '2023-01-15'),
('Smartphone', 10, 499.99, '2023-01-16'),
('Tablet', 8, 299.99, '2023-01-17'),
('Laptop', 3, 899.99, '2023-01-18'),
('Smartphone', 6, 499.99, '2023-01-19');
SELECT SUM(quantity * price) AS total_sales FROM sales;
SELECT product_name, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY product_name;
SELECT product_name, MAX(quantity) AS max_quantity_sold
FROM sales
GROUP BY product_name;
SELECT AVG(price) AS average_price FROM sales;
SELECT MIN(sale_date) AS earliest_sale_date, MAX(sale_date) AS latest_sale_date FROM sales;
mysqldump -u username -p database_name > backup_file.sql
mysql -u username -p database_name < backup_file.sql
通过系统化的学习和实践,你将能够熟练掌握MySQL数据库的各个方面。多动手操作,多查阅资料,可以帮助你更好地理解和应用所学知识。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。