免费做网站,网站的备案的要多少钱,做热处理工艺的网站有哪些,兖州网站制作本文内容涵盖了使用MySQL创建数据库和表、添加数据、处理字符集错误、解决外键约束问题以及使用SQL查询数据的过程。通过创建表、插入数据和调整字符集等操作#xff0c;成功解决了数据库表中的字符集问题#xff0c;并使用INSERT语句向各个表中添加了示例数据。同时#xf…本文内容涵盖了使用MySQL创建数据库和表、添加数据、处理字符集错误、解决外键约束问题以及使用SQL查询数据的过程。通过创建表、插入数据和调整字符集等操作成功解决了数据库表中的字符集问题并使用INSERT语句向各个表中添加了示例数据。同时通过ALTER TABLE语句解决了外键约束问题确保数据的完整性。最后通过SELECT语句验证了数据的插入情况确认数据库表的创建和数据写入均成功完成。 目录 一、数据库查询二、数据写入数据库三、外键约束解决方法四、表的创建五、sql完整代码文件执行方法 一、数据库查询
要完整查看以上创建的表的所有数据您可以使用以下步骤
登录到MySQL客户端 使用以下命令登录到MySQL数据库服务器
mysql -h 主机名 -u 用户名 -p输入密码后您将进入MySQL客户端的交互式命令行界面。
选择使用shtd_store数据库 在MySQL客户端中执行以下命令来选择使用shtd_store数据库
USE shtd_store;查看表数据 对于每个表您可以使用以下命令来查看完整的表数据
SELECT * FROM 表名;将 表名 替换为您要查看的具体表的名称。这将显示该表中的所有行和所有列的数据。
例如如果要查看user_info表的所有数据可以执行以下命令
SELECT * FROM user_info;重复这个步骤您可以逐个查看其他表的数据。 此外您还可以使用 DESC 命令查看特定表的结构和字段
DESC 表名;将 表名 替换为您要查看的具体表的名称。
二、数据写入数据库
先创建
-- 创建数据库shtd_store
CREATE DATABASE IF NOT EXISTS shtd_store;-- 使用数据库shtd_store
USE shtd_store;-- 创建表user_info
CREATE TABLE IF NOT EXISTS user_info (user_id INT,username VARCHAR(50),create_time TIMESTAMP,PRIMARY KEY (user_id)
);-- 创建表sku_info
CREATE TABLE IF NOT EXISTS sku_info (sku_id INT,sku_name VARCHAR(100),price DECIMAL(10, 2),create_time TIMESTAMP,PRIMARY KEY (sku_id)
);-- 创建表base_province
CREATE TABLE IF NOT EXISTS base_province (province_id INT,province_name VARCHAR(50),create_time TIMESTAMP,PRIMARY KEY (province_id)
);-- 创建表base_region
CREATE TABLE IF NOT EXISTS base_region (region_id INT,region_name VARCHAR(50),create_time TIMESTAMP,PRIMARY KEY (region_id)
);-- 创建表order_info
CREATE TABLE IF NOT EXISTS order_info (order_id INT,user_id INT,order_date DATE,total_amount DECIMAL(10, 2),create_time TIMESTAMP,PRIMARY KEY (order_id),FOREIGN KEY (user_id) REFERENCES user_info(user_id)
);-- 创建表order_detail
CREATE TABLE IF NOT EXISTS order_detail (order_detail_id INT,order_id INT,sku_id INT,quantity INT,price DECIMAL(10, 2),create_time TIMESTAMP,PRIMARY KEY (order_detail_id),FOREIGN KEY (order_id) REFERENCES order_info(order_id),FOREIGN KEY (sku_id) REFERENCES sku_info(sku_id)
);
要合理地向这些表中写入数据您可以使用 INSERT INTO 语句将数据插入到每个表中。以下是一个示例展示了如何向每个表中插入一些示例数据
-- 向 user_info 表中插入示例数据
INSERT INTO user_info (user_id, username, create_time) VALUES
(1, 张三, 2024-04-09 10:00:00),
(2, 李四, 2024-04-09 11:00:00),
(3, 王五, 2024-04-09 12:00:00);-- 向 order_info 表中插入示例数据
INSERT INTO order_info (order_id, user_id, order_date, total_amount, create_time) VALUES
(101, 1, 2024-04-09, 100.00, 2024-04-09 10:05:00),
(102, 2, 2024-04-09, 150.00, 2024-04-09 11:10:00),
(103, 3, 2024-04-09, 200.00, 2024-04-09 12:15:00);-- 向 order_detail 表中插入示例数据
INSERT INTO order_detail (order_detail_id, order_id, sku_id, quantity, price, create_time) VALUES
(201, 101, 1, 2, 50.00, 2024-04-09 10:05:00),
(202, 101, 2, 1, 30.00, 2024-04-09 10:05:00),
(203, 102, 3, 3, 50.00, 2024-04-09 11:10:00);-- 向 sku_info 表中插入示例数据
INSERT INTO sku_info (sku_id, sku_name, price, create_time) VALUES
(1, 商品A, 50.00, 2024-04-09 10:00:00),
(2, 商品B, 30.00, 2024-04-09 10:00:00),
(3, 商品C, 50.00, 2024-04-09 11:00:00);-- 向 base_province 表中插入示例数据
INSERT INTO base_province (province_id, province_name, create_time) VALUES
(1, 省份A, 2024-04-09 10:00:00),
(2, 省份B, 2024-04-09 11:00:00);-- 向 base_region 表中插入示例数据
INSERT INTO base_region (region_id, region_name, create_time) VALUES
(1, 地区A, 2024-04-09 10:00:00),
(2, 地区B, 2024-04-09 11:00:00);您可以根据需要修改示例数据的具体值并根据表结构确保插入的数据符合表的约束条件。然后在MySQL客户端中执行以上SQL语句将示例数据插入到每个表中。完成后您可以使用 SELECT * FROM 表名; 查询每个表中的数据确保数据已成功插入。
但是操作以上命令的时候报错 -- 向 user_info 表中插入示例数据
mysql INSERT INTO user_info (user_id, username, create_time) VALUES- (1, 张三, 2024-04-09 10:00:00),- (2, 李四, 2024-04-09 11:00:00),- (3, 王五, 2024-04-09 12:00:00);
ERROR 1366 (HY000): Incorrect string value: \xE5\xBC\xA0\xE4\xB8\x89 for column username at row 1这个错误通常是由于字符集不匹配导致的。MySQL数据库表默认使用的字符集可能不支持插入包含特定字符的字符串。解决这个问题的方法是确保数据库表和连接使用的字符集是兼容的并且能够支持您要插入的字符。
您可以尝试以下方法来解决这个问题
指定字符集 在创建表时使用 CHARACTER SET 参数指定表的字符集。例如可以将表的字符集设置为 utf8 或 utf8mb4这些字符集支持更广泛的字符范围。示例代码如下
CREATE TABLE user_info (user_id INT,username VARCHAR(50) CHARACTER SET utf8mb4,create_time TIMESTAMP,PRIMARY KEY (user_id)
);修改连接字符集 在连接到数据库时可以指定连接的字符集。例如在连接命令中添加 --default-character-setutf8mb4 参数。示例命令如下
mysql -h 主机名 -u 用户名 -p 数据库名 --default-character-setutf8mb4调整字符串编码 如果您要插入的字符串包含特殊字符您可以尝试使用转义序列或调整字符串的编码方式。
请根据您的具体情况尝试这些方法来解决错误。如果问题仍然存在请提供更多细节以便我们进一步帮助您解决。
但是以上内容操作之后出现下面的报错
mysql CREATE TABLE user_info (- user_id INT,- username VARCHAR(50) CHARACTER SET utf8mb4,- create_time TIMESTAMP,- PRIMARY KEY (user_id)- );
ERROR 1050 (42S01): Table user_info already exists
以上这个错误表明名为 user_info 的表已经存在于数据库中无法再次创建相同名称的表。解决这个问题的方法是要么删除现有的表然后重新创建要么使用现有的表进行操作。
三、外键约束解决方法
如果您想要重新创建表并且不需要保留表中的数据可以执行以下步骤
删除现有的 user_info 表
DROP TABLE IF EXISTS user_info;但是又出现下面的报错
DROP TABLE IF EXISTS user_info;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
这个错误表示无法删除表 user_info因为它可能有其他表的外键引用存在外键约束。解决这个问题的方法是先删除对该表的引用然后再删除表本身。您可以按照以下步骤操作
找到引用该表的外键约束 使用以下命令查询引用了 user_info 表的外键约束
SELECT TABLE_NAME, CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME user_info;其他类似
删除引用该表的外键约束 对于查询到的每个约束使用 ALTER TABLE 语句删除该约束
ALTER TABLE 表名 DROP FOREIGN KEY 约束名;将 表名 替换为包含外键约束的表的名称将 约束名 替换为要删除的外键约束的名称。
再次尝试删除表 删除外键约束后再次尝试删除 user_info 表
DROP TABLE IF EXISTS user_info;请确保在删除表或约束之前做好备份并在操作前谨慎考虑以免造成数据丢失或不可逆转的更
操作记录
SELECT TABLE_NAME, CONSTRAINT_NAME- FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE- WHERE REFERENCED_TABLE_NAME user_info;
-------------------------------
| TABLE_NAME | CONSTRAINT_NAME |
-------------------------------
| order_info | order_info_ibfk_1 |
-------------------------------
1 row in set (0.92 sec)根据查询结果发现 order_info 表中有一个外键约束 order_info_ibfk_1 引用了 user_info 表。因此在删除 user_info 表之前需要先删除这个外键约束。
您可以按照以下步骤操作
删除外键约束 使用以下命令删除 order_info 表中的外键约束
ALTER TABLE order_info DROP FOREIGN KEY order_info_ibfk_1;再次尝试删除表 删除外键约束后再次尝试删除 user_info 表
DROP TABLE IF EXISTS user_info;执行这些步骤后应该可以成功删除 user_info 表。请记得在操作前做好备份并谨慎考虑可能的影响。
以上完成之后就可以创建表
INSERT INTO user_info (user_id, username, create_time) VALUES- (1, 张三, 2024-04-09 10:00:00),- (2, 李四, 2024-04-09 11:00:00),- (3, 王五, 2024-04-09 12:00:00);操作记录 mysql ALTER TABLE order_info DROP FOREIGN KEY order_info_ibfk_1;
Query OK, 0 rows affected (0.12 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql DROP TABLE IF EXISTS user_info;
Query OK, 0 rows affected (0.22 sec)mysql CREATE TABLE user_info (- user_id INT,- username VARCHAR(50) CHARACTER SET utf8mb4,- create_time TIMESTAMP,- PRIMARY KEY (user_id)- );
Query OK, 0 rows affected (0.37 sec)mysql SELECT * FROM user_info;
Empty set (0.01 sec)mysql INSERT INTO user_info (user_id, username, create_time) VALUES- (1, 张三, 2024-04-09 10:00:00),- (2, 李四, 2024-04-09 11:00:00),- (3, 王五, 2024-04-09 12:00:00);
Query OK, 3 rows affected (0.07 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql SELECT * FROM user_info;
----------------------------------------
| user_id | username | create_time |
----------------------------------------
| 1 | 张三 | 2024-04-09 10:00:00 |
| 2 | 李四 | 2024-04-09 11:00:00 |
| 3 | 王五 | 2024-04-09 12:00:00 |
----------------------------------------
3 rows in set (0.00 sec)mysql 四、表的创建
类似以上添加的表user_info请合理添加和补充下面表的数据sku_info、base_province、base_region、order_info、order_detail
下面批量处理约束情况
SELECT TABLE_NAME, CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME IN (user_info, sku_info, base_province, base_region, order_info, order_detail);
操作记录
删除外键约束 对于每个约束使用 ALTER TABLE 语句删除该约束。例如
ALTER TABLE order_detail DROP FOREIGN KEY order_detail_ibfk_1;
ALTER TABLE order_detail DROP FOREIGN KEY order_detail_ibfk_2;重新创建表 删除约束后您可以重新创建相关的表以确保满足您的需求。例如
CREATE TABLE order_detail (order_detail_id INT,order_id INT,sku_id INT,quantity INT,price DECIMAL(10, 2),create_time TIMESTAMP,PRIMARY KEY (order_detail_id),FOREIGN KEY (order_id) REFERENCES order_info(order_id),FOREIGN KEY (sku_id) REFERENCES sku_info(sku_id)
);操作记录 mysql SELECT TABLE_NAME, CONSTRAINT_NAME- FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE- WHERE REFERENCED_TABLE_NAME user_info;
Empty set (0.00 sec)mysql SELECT TABLE_NAME, CONSTRAINT_NAME- FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE- WHERE REFERENCED_TABLE_NAME IN (user_info, sku_info, base_province, base_region, order_info, order_detail);
-----------------------------------
| TABLE_NAME | CONSTRAINT_NAME |
-----------------------------------
| order_detail | order_detail_ibfk_1 |
| order_detail | order_detail_ibfk_2 |
-----------------------------------
2 rows in set (0.00 sec)mysql ALTER TABLE order_detail DROP FOREIGN KEY order_detail_ibfk_1;KEY order_detail_ibfk_2;
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql ALTER TABLE order_detail DROP FOREIGN KEY order_detail_ibfk_2;
Query OK, 0 rows affected (0.15 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql INSERT INTO user_info (user_id, username, create_time) VALUES- (1, 张三, 2024-04-09 10:00:00),- (2, 李四, 2024-04-09 11:00:00),- (3, 王五, 2024-04-09 12:00:00);
ERROR 1062 (23000): Duplicate entry 1 for key PRIMARY
mysql INSERT IGNORE INTO user_info (user_id, username, create_time) VALUES- (1, 张三, 2024-04-09 10:00:00),- (2, 李四, 2024-04-09 11:00:00),- (3, 王五, 2024-04-09 12:00:00);
Query OK, 0 rows affected, 3 warnings (0.01 sec)
Records: 3 Duplicates: 3 Warnings: 3mysql INSERT INTO sku_info (sku_id, sku_name, price, create_time) VALUES- (1, 商品A, 100.00, 2024-04-09 10:00:00),- (2, 商品B, 150.00, 2024-04-09 11:00:00),- (3, 商品C, 200.00, 2024-04-09 12:00:00);
ERROR 1366 (HY000): Incorrect string value: \xE5\x95\x86\xE5\x93\x81... for column sku_name at row 1
mysql ALTER TABLE sku_info CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 0 rows affected (0.86 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql INSERT INTO sku_info (sku_id, sku_name, price, create_time) VALUES- (1, CONVERT(商品A USING utf8mb4), 100.00, 2024-04-09 10:00:00),- (2, CONVERT(商品B USING utf8mb4), 150.00, 2024-04-09 11:00:00),- (3, CONVERT(商品C USING utf8mb4), 200.00, 2024-04-09 12:00:00);
Query OK, 3 rows affected (0.09 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql INSERT INTO base_province (province_id, province_name, create_time) VALUES- (1, 省份A, 2024-04-09 10:00:00),- (2, 省份B, 2024-04-09 11:00:00);
ERROR 1366 (HY000): Incorrect string value: \xE7\x9C\x81\xE4\xBB\xBD... for column province_name at row 1
mysql ALTER TABLE base_province CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 0 rows affected (1.02 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql INSERT INTO base_province (province_id, province_name, create_time) VALUES- (1, CONVERT(省份A USING utf8mb4), 2024-04-09 10:00:00),- (2, CONVERT(省份B USING utf8mb4), 2024-04-09 11:00:00);
Query OK, 2 rows affected (0.11 sec)
Records: 2 Duplicates: 0 Warnings: 0mysql INSERT INTO base_region (region_id, region_name, create_time) VALUES- (1, 地区A, 2024-04-09 10:00:00),- (2, 地区B, 2024-04-09 11:00:00);
ERROR 1366 (HY000): Incorrect string value: \xE5\x9C\xB0\xE5\x8C\xBA... for column region_name at row 1
mysql ALTER TABLE base_region CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 0 rows affected (1.03 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql INSERT INTO base_region (region_id, region_name, create_time) VALUES- (1, CONVERT(地区A USING utf8mb4), 2024-04-09 10:00:00),- (2, CONVERT(地区B USING utf8mb4), 2024-04-09 11:00:00);
Query OK, 2 rows affected (0.07 sec)
Records: 2 Duplicates: 0 Warnings: 0mysql INSERT INTO order_info (order_id, user_id, order_date, total_amount, create_time) VALUES- (101, 1, 2024-04-09, 250.00, 2024-04-09 10:05:00),- (102, 2, 2024-04-09, 300.00, 2024-04-09 11:10:00),- (103, 3, 2024-04-09, 400.00, 2024-04-09 12:15:00);
Query OK, 3 rows affected (0.05 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql INSERT INTO order_detail (order_detail_id, order_id, sku_id, quantity, price, create_time) VALUES- (201, 101, 1, 2, 100.00, 2024-04-09 10:05:00),- (202, 101, 2, 1, 150.00, 2024-04-09 10:05:00),- (203, 102, 3, 3, 200.00, 2024-04-09 11:10:00);
Query OK, 3 rows affected (0.06 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql 以上操作涉及到MySQL数据库的结构定义、约束管理、字符集设置以及数据插入等方面的技术原理。
表结构定义 在MySQL中使用 CREATE TABLE 语句来定义表的结构。这包括了表的名称以及表中的列名、数据类型和约束。在创建表时我们需要考虑到每个字段的数据类型和长度以及是否需要设置主键、外键或其他约束。
外键约束 外键约束用于确保表之间的关联关系。在MySQL中可以使用 ALTER TABLE 语句来添加或删除外键约束。通过添加外键约束我们可以定义表与表之间的关联关系保持数据的一致性。而通过删除外键约束我们可以解除表之间的关联关系从而更改表的结构或数据。
字符集设置 MySQL支持多种字符集包括utf8、utf8mb4等。字符集设置决定了表中可以存储的字符类型例如英文、中文、特殊字符等。通过使用 ALTER TABLE 语句可以将表的字符集转换为适合存储各种语言字符的字符集以确保数据库能够正确地存储和检索这些字符。
数据插入 使用 INSERT INTO 语句可以向表中插入数据。在插入数据时需要确保插入的数据符合表的结构定义包括数据类型、长度和约束等。如果插入的数据违反了约束条件例如重复插入了主键值或唯一键值MySQL将会返回相应的错误信息。
通过以上操作我们可以实现对MySQL数据库的结构和数据进行管理确保数据库的结构合理、数据的完整性和一致性以满足实际业务需求。
经过以上创建给出下面表格的查询结果
-- 查看 user_info 表
SELECT * FROM user_info;-- 查看 sku_info 表
SELECT * FROM sku_info;-- 查看 base_province 表
SELECT * FROM base_province;-- 查看 base_region 表
SELECT * FROM base_region;-- 查看 order_info 表
SELECT * FROM order_info;-- 查看 order_detail 表
SELECT * FROM order_detail;
操作命令输出结果如下
mysql -- 查看 user_info 表
mysql SELECT * FROM user_info;
----------------------------------------
| user_id | username | create_time |
----------------------------------------
| 1 | 张三 | 2024-04-09 10:00:00 |
| 2 | 李四 | 2024-04-09 11:00:00 |
| 3 | 王五 | 2024-04-09 12:00:00 |
----------------------------------------
3 rows in set (0.00 sec)mysql
mysql -- 查看 sku_info 表
mysql SELECT * FROM sku_info;
-----------------------------------------------
| sku_id | sku_name | price | create_time |
-----------------------------------------------
| 1 | 商品A | 100.00 | 2024-04-09 10:00:00 |
| 2 | 商品B | 150.00 | 2024-04-09 11:00:00 |
| 3 | 商品C | 200.00 | 2024-04-09 12:00:00 |
-----------------------------------------------
3 rows in set (0.00 sec)mysql
mysql -- 查看 base_province 表
mysql SELECT * FROM base_province;
-------------------------------------------------
| province_id | province_name | create_time |
-------------------------------------------------
| 1 | 省份A | 2024-04-09 10:00:00 |
| 2 | 省份B | 2024-04-09 11:00:00 |
-------------------------------------------------
2 rows in set (0.00 sec)mysql
mysql -- 查看 base_region 表
mysql SELECT * FROM base_region;
---------------------------------------------
| region_id | region_name | create_time |
---------------------------------------------
| 1 | 地区A | 2024-04-09 10:00:00 |
| 2 | 地区B | 2024-04-09 11:00:00 |
---------------------------------------------
2 rows in set (0.00 sec)mysql
mysql -- 查看 order_info 表
mysql SELECT * FROM order_info;
------------------------------------------------------------------
| order_id | user_id | order_date | total_amount | create_time |
------------------------------------------------------------------
| 101 | 1 | 2024-04-09 | 250.00 | 2024-04-09 10:05:00 |
| 102 | 2 | 2024-04-09 | 300.00 | 2024-04-09 11:10:00 |
| 103 | 3 | 2024-04-09 | 400.00 | 2024-04-09 12:15:00 |
------------------------------------------------------------------
3 rows in set (0.00 sec)mysql
mysql -- 查看 order_detail 表
mysql SELECT * FROM order_detail;
--------------------------------------------------------------------------
| order_detail_id | order_id | sku_id | quantity | price | create_time |
--------------------------------------------------------------------------
| 201 | 101 | 1 | 2 | 100.00 | 2024-04-09 10:05:00 |
| 202 | 101 | 2 | 1 | 150.00 | 2024-04-09 10:05:00 |
| 203 | 102 | 3 | 3 | 200.00 | 2024-04-09 11:10:00 |
--------------------------------------------------------------------------
3 rows in set (0.00 sec)因此一开始要合理创建数据库和表类型方便写入数据。
五、sql完整代码文件执行方法
执行SQL文件 如果您将以上SQL代码保存在一个SQL文件中可以使用以下命令来运行该文件
mysql -h 主机名 -u 用户名 -p 数据库名 文件路径例如如果文件名为 create_tables.sql您可以使用以下命令
mysql -h 主机名 -u 用户名 -p shtd_store create_tables.sql在执行此命令之前请确保您已登录到MySQL客户端并切换到了正确的数据库。
检查数据库和表是否创建成功 在MySQL客户端中您可以使用 SHOW DATABASES; 命令来查看已创建的数据库并使用 SHOW TABLES; 命令来查看特定数据库中的表。您也可以执行 DESC 表名; 命令来查看表的结构和字段。
当您使用 mysql 命令执行 SQL 文件时需要提供 MySQL 数据库的主机名和用户名。以下是如何使用主机名和用户名的示例
假设您的 MySQL 数据库的主机名是 localhost用户名是 root并且您希望连接到名为 shtd_store 的数据库。您可以执行以下命令
mysql -h localhost -u root -p shtd_store create_tables.sql在这个示例中
-h localhost 指定了数据库的主机名为 localhost。 -u root 指定了用户名为 root。您可以根据您的设置更改用户名。 -p 表示需要输入密码来登录数据库。 shtd_store 是要连接的数据库名称。 create_tables.sql 指定了要执行的 SQL 文件路径。