任务描述:熟悉Ubuntu安装MySQL的整个过程,掌握使用SQL对数据库、数据库表进行的操作,学会根据具体的数据选择相应的字段类型。
MySQL 是一个关系数据库管理系统(Relational Database Management System, RDBMS),是非常流行的关系数据库管理系统之一。
MySQL的安装步骤如下。
步骤1:在Ubuntu中,默认情况下只有最新版本的MySQL被包含在APT软件包存储库中。要安装MySQL,只需更新服务器上的包索引并安装默认包apt-get,具体如下。
# 命令1 sudo apt-get update # 命令2 sudo apt-get install mysql-server
在安装MySQL服务时,系统会提示是否继续,这时输入Y即可继续安装。本步骤所涉及的内容如图1-7~图1-9所示。
图1-7 更新服务器上的包索引并安装默认包apt-get
图1-8 输入Y继续安装MySQL
图1-9 安装过程中弹出的界面
步骤2:初始化配置,具体如下。
ubuntu@ubuntu:~$ sudo mysql_secure_installation [sudo] password for ubuntu: Securing the MySQL server deployment. Connecting to MySQL using a blank password. # 修改密码 VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? # 是否启用密码安全级别校验 Press y|Y for Yes, any other key for No: y # 启用密码安全级别校验 There are three levels of password validation policy: # 0 长度 >= 8, 低级别;1 长度 >= 8, 数字 + 混合大小写 + 特殊字符;2长度 >= 8, 强长度, # 数字 + 混合大小写 + 特殊字符和字典 LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0 # 测试可以选择低级别 Please set the password for root here. # 输入新密码 New password: Re-enter new password: Estimated strength of the password: 25 # 是否继续使用所提供的密码 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y # 是 By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is in tended only for testing, and to make the installation go a bit smoother. # You should remove them before moving into a production environment. # 是否删除匿名账户,MySQL数据库默认在user表中,有一条记录,其host字段为localhost,user # 字段为空,password字段为空。该记录表明MySQL数据库中具有一个匿名账户,可以通过本地localhost # 域名连接数据库。根据项目需求进行相应设置即可 Remove anonymous users? (Press y|Y for Yes, any other key for No) : N # 否 ... skipping. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y Success. # 默认情况下,MySQL附带一个名为“test”的数据库,任何人都可以访问。这仅用于测试,在进入生产前 # 应将其移除 By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. # 是否删除test Remove test database and access to it? (Press y|Y for Yes, any other key for No): N # 否 ... skipping. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. # 是否加载特权表 Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y # 是 Success. All done!
步骤3:使用systemctl status mysql.service命令检查MySQL服务状态,如图1-10所示。可以看出,Active为active (running),这说明MySQL服务状态是正常的。
图1-10 MySQL服务状态
步骤4:MySQL客户端连接服务器。使用客户端工具MySQL进入MySQL命令提示符下,连接MySQL。下面是一个从命令行中连接MySQL服务器的简单实例。
ubuntu@ubuntu:~$ sudo mysql -uroot -p [sudo] password for ubuntu: Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.33-0ubuntu0.16.04.1 (Ubuntu) Copyright (c) 2000, 2021, Oracle and/or its affiliates. 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>
登录成功后会出现MySQL命令提示窗口,其上可以执行任何SQL语句。退出MySQL命令提示窗口可以使用EXIT命令,具体如下。
mysql> EXIT Bye
登录MySQL服务后,使用CREATE命令创建MySQL数据库。
语法:CREATE DATABASE 数据库名。
实例如下。
mysql> CREATE DATABASE test; Query OK, 1 row affected (0.00 sec)
语法: SHOW DATABASES。
实例如下。
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 5 rows in set (0.00 sec):
普通用户需要特定的权限才能创建或者删除MySQL数据库,而root用户拥有最高权限,因此本书使用root用户账号进行登录,以便展示相关操作。删除MySQL数据库时必须十分谨慎,因为在执行删除命令后,所有数据会被清空。
语法:DROP DATABASE 数据库名。
实例如下。
# 删除名为 test 的MySQL数据库 mysql> DROP DATABASE test; Query OK, 0 rows affected (0.01 sec)
连接到MySQL数据库后,用户按照所具有的权限来操作对应的MySQL数据库。接下来需选择要操作的数据库。
语法:USE 数据库名。
实例如下。
# 选择数据库名为testdb mysql> USE testdb Database changed
创建MySQL数据表时需要设置表名和表字段名,定义每个表字段和数据类型。
语法:CREATE TABLE table_name (column_name column_type)。
实例如下。
# 在 testdb数据库中创建数据表test_tbl mysql>CREATE TABLE IF NOT EXISTS 'test_tbl'( -> 'test_id' INT UNSIGNED AUTO_INCREMENT, -> 'test_code' VARCHAR(100) NOT NULL, -> 'test_name' VARCHAR(40) NOT NULL, -> 'test_date' DATE, -> PRIMARY KEY ( 'test_id' ) -> )ENGINE = InnoDB DEFAULT CHARSET = utf8; Query OK, 0 rows affected (0.01 sec)
实例解析如下。
● 若不想字段为NULL,则设置字段的属性为NOT NULL。
● AUTO_INCREMENT用于定义列的属性为自增,即列数会自动加1,一般用于主键。
● PRIMARY KEY用于定义列为主键。
● ENGINE用于设置存储引擎。
● CHARSET用于设置编码。
删除MySQL数据表时要非常小心,因为执行删除命令后,所有数据会被清空。
语法: DROP TABLE table_name 。
实例如下。
# 删除数据表test_tbl mysql> DROP TABLE test_tbl ; Query OK, 0 rows affected (0.12 sec)
MySQL数据表使用INSERT INTO SQL语句来插入数据。
语法: NSERT INTO table_name(field1,field2,…,fieldN) VALUES(value1,value2,…,valueN)。
如果数据是字符型,则必须使用单引号或者双引号,如"value"。
实例如下。
# 向 test_tbl 数据表插入两条数据 mysql> INSERT INTO test_tbl -> (test_code, test_name, test_date) -> VALUES -> ("MySQL数据库1", "test001", NOW()); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> INSERT INTO test_tbl -> (test_code, test_name, test_date) -> VALUES -> ("MySQL数据库2", "test002", NOW()); Query OK, 1 row affected, 1 warning (0.00 sec)
MySQL数据表使用SELECT命令来查询数据。
语法: SELECT column_name, column_name FROM table_name [WHERE clause] [LIMIT N] [OFFSET M]。
实例如下。
# 返回数据表test_tbl的所有记录 mysql> SELECT * FROM test_tbl; +---------+-----------------+-----------+------------+ | test_id | test_code | test_name | test_date | +---------+-----------------+-----------+------------+ | 1 | MySQL数据库1 | test001 | 2023-08-14 | | 2 | MySQL数据库2 | test002 | 2023-08-14 | +---------+-----------------+-----------+------------+ 2 rows in set (0.00 sec)
实例解析如下。
● 使用多个数据表时,表之间使用逗号(,)进行分隔。
● SELECT命令可以读取一条或者多条记录。
● 使用星号(*)来代替其他字段时,SELECT 命令会返回 MySQL 数据表的所有字段数据。
● 使用WHERE语句来设置查询条件。
● 使用LIMIT命令来设置返回的记录数。
● 使用OFFSET命令来指定SELECT命令开始查询的数据偏移量,默认情况下的偏移量为0。
MySQL数据表的数据可以使用UPDATE命令进行修改或更新。
语法: UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE clause]。
实例如下。
# 更新数据表中test_id 为 1 的 test_name 字段值为test001_update mysql> UPDATE test_tbl SET test_name = 'test001_update' WHERE test_id = 1; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM test_tbl; +---------+-----------------+----------------+------------+ | test_id | test_code | test_name | test_date | +---------+-----------------+----------------+------------+ | 1 | MySQL数据库1 | test001_update | 2023-08-14 | | 2 | MySQL数据库2 | test002 | 2023-08-14 | +---------+-----------------+----------------+------------+ 2 rows in set (0.00 sec)
MySQL数据表的数据可以使用DELETE命令进行删除。删除数据时必须十分谨慎,因为执行删除命令后数据会被清空。
语法: DELETE FROM table_name [WHERE clause]。若没有指定WHERE子句,MySQL数据表中的所有记录将被删除。WHERE子句中可以指定任何条件。
实例如下。
# 删除 test_tbl 数据表中 test_id 为2 的记录 mysql> DELETE FROM test_tbl WHERE test_id = 2; Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM test_tbl; +---------+-----------------+----------------+------------+ | test_id | test_code | test_name | test_date | +---------+-----------------+----------------+------------+ | 1 | MySQL数据库1 | test001_update | 2023-08-14 | +---------+-----------------+----------------+------------+ 1 row in set (0.01 sec)