From 4c5d1099f7c0116e5a54c7a7819b4f8cb32de547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E6=81=A9=E6=B0=91?= <3256972080@qq.com> Date: Mon, 20 Feb 2023 08:56:09 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...54\344\270\200\346\254\241\350\257\276.md" | 80 +++++ ...54\344\272\214\346\254\241\350\257\276.md" | 312 ++++++++++++++++++ 2 files changed, 392 insertions(+) create mode 100644 "30 \350\256\270\346\201\251\346\260\221/2023.2.15MySQL\347\254\254\344\270\200\346\254\241\350\257\276.md" create mode 100644 "30 \350\256\270\346\201\251\346\260\221/2023.218MySQL\347\254\254\344\272\214\346\254\241\350\257\276.md" diff --git "a/30 \350\256\270\346\201\251\346\260\221/2023.2.15MySQL\347\254\254\344\270\200\346\254\241\350\257\276.md" "b/30 \350\256\270\346\201\251\346\260\221/2023.2.15MySQL\347\254\254\344\270\200\346\254\241\350\257\276.md" new file mode 100644 index 0000000..62d5ab5 --- /dev/null +++ "b/30 \350\256\270\346\201\251\346\260\221/2023.2.15MySQL\347\254\254\344\270\200\346\254\241\350\257\276.md" @@ -0,0 +1,80 @@ +数据库class3 +表student +字段:学号,姓名,性别,爱好,住址,联系方式,邮箱,QQ号 +并新增一条自己的记录。 + +```mysql +CREATE DATABASE class3; +USE class3; +CREATE TABLE student( + 学号 int(10), + 姓名 varchar(10), + 性别 enum('男','女'), + 爱好 set('唱歌','跳舞','听音乐'), + 住址 varchar(30), + 联系方式 int(11), + 邮箱 varchar(20), + QQ号 int(15) + ); + INSERT into student VALUES(2244310330,'许恩民',2,3,'安徽淮南市',17729901560,'3256972080@qq.com',3256972080); +``` + + + +# 第4章 SQL语句 + +### 4.1SQL的分类 + +| 名称 | 解释 | 命令 | +| :-------------------: | :-------------------------------------------: | :----------------------------------------------------------: | +| DDL (数据定义语言) | 定义和管理数据对象结构,如数据库,数据表等 | 创建(create),修改(alter),删除(drop) show(展示)结构 | +| DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | 增(insert),删(delete),改(update) 数据 | +| DQL (数据查询语言) | 用于查询数据库数据 | 查(select) | +| DCL (数据控制语 言) | 用于管理数据库的语言,包括管理权限及数 据更改 | grant(授权),commit(确认),rollback(回滚) | + +### 4.2 SQL语法规范 + +(1)mysql的sql语法不区分大小写 + +A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则。 + + ci(大小写不敏感),cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写) + + B:sql中的关键字,比如:create,insert等,**不区分大小写**。但是大家习惯上把关键字都“大写”。 + +(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 + +(3) 建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) + +(4)数据库和表名、字段名等对象名中间不要包含空格 + +(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名 + +### 4.3 SQL脚本中如何加注释 + +- 单行注释:#注释内容(mysql特有的) + +- 单行注释:--空格注释内容 其中--后面的空格必须有 + +- 多行注释:/* 注释内容 */ + +### 4.4 mysql脚本中的标点符号 + +1. 本身成对的标点符号必须成对,例如:(),'',""。 + +2. 所有标点符号必须英文状态下半角输入方式下输入。 + +单引号'':**字符串和日期类型的数据值使用单引号''引起来**,数值类型的不需要加标点符号 + +#### 1、CHAR(M)为固定长度的字符串 + +CHAR(M)为固定长度的字符串, M表示最多能存储的字符数,如果未指定(M)表示只能存储1个字符。 + +#### 2、VARCHAR(M)为可变长度的字符串 + +- M不可缺省,必须指定(M),否则报错。 +- 实际长度达不到M值时,以实际长度为准。 + + + +------ \ No newline at end of file diff --git "a/30 \350\256\270\346\201\251\346\260\221/2023.218MySQL\347\254\254\344\272\214\346\254\241\350\257\276.md" "b/30 \350\256\270\346\201\251\346\260\221/2023.218MySQL\347\254\254\344\272\214\346\254\241\350\257\276.md" new file mode 100644 index 0000000..31ad2a5 --- /dev/null +++ "b/30 \350\256\270\346\201\251\346\260\221/2023.218MySQL\347\254\254\344\272\214\346\254\241\350\257\276.md" @@ -0,0 +1,312 @@ +## 命令行客户端 + +### 数据库 + +1、查看所有的数据库 + +``` +show databases; +``` + +2、创建自己的数据库 + +``` +create database 数据库名 charset utf8; +#创建mxdx数据库 +create database mxdx; +``` + +3、删除数据库 + +``` +drop database 数据库名; +#删除mxdx数据库 +drop database mxdx; +``` + +4、使用自己的数据库 + +``` +use 数据库名; +#使用mxdx数据库 +use mxdx; +``` + +*use 只能给数据库用 + +*desc 用给表(查看表的结构)。 + +#### 数据表 + +1、查看某个库的所有表格 + +``` +show tables; #要求前面有use语句 + +show tables from 数据库名; +``` + +2、创建新的表格 + +``` +create table 表名称( + 字段名 数据类型, + 字段名 数据类型 +); +``` + +## 第1题 + +1、创建数据库test01_market + +2、创建表格customers + +| 字段名 | 数据类型 | +| --------- | ----------- | +| c_num | int(11) | +| c_name | varchar(50) | +| c_contact | varchar(50) | +| c_city | varchar(50) | +| c_birth | date | + +**要求3:**将c_contact字段移动到c_birth字段后面 + +**要求4:**将c_name字段数据类型改为 varchar(70) + +**要求5:**将c_contact字段改名为c_phone + +**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) + +**要求7:**将表名改为customers_info + +**要求8:**删除字段c_city + +```mysql +USE test01_market; +CREATE TABLE customers ( c_num INT ( 11 ), c_name VARCHAR ( 50 ), c_contact VARCHAR ( 50 ), c_city VARCHAR ( 50 ), c_birth DATE ); +SELECT + * +FROM + customers; +ALTER TABLE customers MODIFY c_contact VARCHAR ( 50 ) AFTER c_birth; +ALTER TABLE customers MODIFY c_name VARCHAR ( 70 ); +ALTER TABLE customers CHANGE c_contact c_phone VARCHAR ( 50 ); +ALTER TABLE customers ADD c_gender CHAR ( 1 ) AFTER c_name; +ALTER TABLE customers RENAME customers_info; +ALTER TABLE customers_info DROP c_city; +``` + +## 第2题 + +1、创建数据库test02_library + +2、创建表格books + +| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | +| ------- | -------- | ------------- | -------- | ---- | +| b_id | 书编号 | int(11) | 否 | 是 | +| b_name | 书名 | varchar(50) | 否 | 否 | +| authors | 作者 | varchar(100) | 否 | 否 | +| price | 价格 | float | 否 | 否 | +| pubdate | 出版日期 | year | 否 | 否 | +| note | 说明 | varchar(100) | 是 | 否 | +| num | 库存 | int(11) | 否 | 否 | + +3、向books表中插入记录 + +1) 指定所有字段名称插入第一条记录 + +2)不指定字段名称插入第二记录 + +3)同时插入多条记录(剩下的所有记录) + +| b_id | b_name | authors | price | pubdate | note | num | +| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | +| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | +| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | +| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | +| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | +| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | +| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | +| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | + +4、将小说类型(novel)的书的价格都增加5。 + +5、将名称为EmmaT的书的价格改为40。 + +6、删除库存为0的记录 + +```mysql +USE test02_library; +CREATE TABLE books ( + b_ids INT ( 11 ) COMMENT '书编号', + b_names VARCHAR ( 50 ) COMMENT '书名', + AUTHORS VARCHAR ( 100 ) COMMENT '作者', + prices FLOAT COMMENT '价格', + pubdate YEAR COMMENT '出版日期', + note VARCHAR ( 100 ) COMMENT '说明', + num INT ( 11 ) COMMENT '库存' +); +DROP TABLE books; +CREATE TABLE books ( + b_ids INT ( 11 ) COMMENT '书编号', + b_names VARCHAR ( 50 ) COMMENT '书名', + AUTHORS VARCHAR ( 100 ) COMMENT '作者', + prices FLOAT COMMENT '价格', + pubdate YEAR COMMENT '出版日期', + note VARCHAR ( 100 ) COMMENT '说明', + num INT ( 11 ) COMMENT '库存' +); +SELECT + * +FROM + books; +INSERT INTO books ( b_ids, b_names, AUTHORS, prices, pubdate, note, num ) +VALUES + ( 520, "三体", "许恩民", 390, 2004, "科幻", 1 ); +INSERT INTO books +VALUES + ( 5206, "三体2", "许恩民11", 39, 2041, "科幻1", 11 ); +INSERT INTO books +VALUES + ( 2, "EmmaT", "Jane lura", 35, 1993, "joke", 22 ), + ( 3, "Story of Jane", "Jane Tim", 40, 2001, "novel", 0 ), + ( 4, "Lovey Day", "George Byron", 20, 2005, "novel", 30 ), + ( 5, "Old land ", " Honore Blade", 30, 2010, "law", 0 ), + ( 6, "The Battle ", " Upton Sara ", 30, 1999, "medicine", 40 ), + ( 6, "Rose Hood", "Richard haggard", 28, 2008, "cartoon", 28 ); +UPDATE books +SET prices = 28 +WHERE + b_ids = 2; +UPDATE books +SET prices = 45 +WHERE + b_ids = 3; +UPDATE books +SET prices = 25 +WHERE + b_ids = 4; +UPDATE books +SET prices = 40 +WHERE + b_ids = 2; + DELETE from books where num = 0; + select *FROM BOOKS; +``` + + + +## 第3题 + +1、创建数据库test03_bookstore + +2、创建book表 + +```mysql ++----------+--------------+------+-----+---------+----------------+ +| Field | Type | Null | Key | Default | Extra | ++----------+--------------+------+-----+---------+----------------+ +| id | int(11) | NO | PRI | NULL | auto_increment | +| title | varchar(100) | NO | | NULL | | +| author | varchar(100) | NO | | NULL | | +| price | double(11,2) | NO | | NULL | | +| sales | int(11) | NO | | NULL | | +| stock | int(11) | NO | | NULL | | +| img_path | varchar(100) | NO | | NULL | | ++----------+--------------+------+-----+---------+----------------+ +``` + +尝试添加部分模拟数据,参考示例如下: + +```mysql ++----+-------------+------------+-------+-------+-------+----------------------------+ +| id | title | author | price | sales | stock | img_path | ++----+-------------+------------+-------+-------+-------+-----------------------------+ +| 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | +| 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | ++----+---------------+------------+-------+-------+-------+----------------------------+ +``` + +3、创建用户表users,并插入数据 + +```mysql ++----------+--------------+------+-----+---------+----------------+ +| Field | Type | Null | Key | Default | Extra | ++----------+--------------+------+-----+---------+----------------+ +| id | int(11) | NO | PRI | NULL | auto_increment | +| username | varchar(100) | NO | UNI | NULL | | +| password | varchar(100) | NO | | NULL | | +| email | varchar(100) | YES | | NULL | | ++----------+--------------+------+-----+---------+----------------+ +``` + +尝试添加部分模拟数据,参考示例如下: + +```mysql ++----+----------+----------------------------------+--------------------+ +| id | username | password | email | ++----+----------+----------------------------------+--------------------+ +| 1 | admin | 112233 | admin@mxdx.com | ++----+----------+----------------------------------+--------------------+ +``` + +4、创建订单表orders + +```mysql ++--------------+--------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++--------------+--------------+------+-----+---------+-------+ +| id | varchar(100) | NO | PRI | NULL | | +| order_time | datetime | NO | | NULL | | +| total_count | int(11) | NO | | NULL | | +| total_amount | double(11,2) | NO | | NULL | | +| state | int(11) | NO | | NULL | | +| user_id | int(11) | NO | MUL | NULL | | ++--------------+--------------+------+-----+---------+-------+ +``` + +尝试添加部分模拟数据,参考示例如下: + +```mysql ++----------------+---------------------+-------------+--------------+-------+---------+ +| id | order_time | total_count | total_amount | state | user_id | ++----------------+---------------------+-------------+--------------+-------+---------+ +| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | ++----------------+---------------------+-------------+--------------+-------+---------+ +``` + +5、创建订单明细表order_items + +```mysql ++----------+--------------+------+-----+---------+----------------+ +| Field | Type | Null | Key | Default | Extra | ++----------+--------------+------+-----+---------+----------------+ +| id | int(11) | NO | PRI | NULL | auto_increment | +| count | int(11) | NO | | NULL | | +| amount | double(11,2) | NO | | NULL | | +| title | varchar(100) | NO | | NULL | | +| author | varchar(100) | NO | | NULL | | +| price | double(11,2) | NO | | NULL | | +| img_path | varchar(100) | NO | | NULL | | +| order_id | varchar(100) | NO | MUL | NULL | | ++----------+--------------+------+-----+---------+----------------+ +``` + +尝试添加部分模拟数据,参考示例如下: + +```mysql ++----+-------+--------+---------+---------+-------+----------------+----------------+ +| id |count| amount| title | author | price | img_path | order_id | ++----+-------+--------+------------+----------+-------+----------------+----------------+ +| 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | +| 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | ++----+-------+--------+------------+----------+-------+------------+----------------+ +``` + +参考答案: + +```mysql + +``` + -- Gitee From 1b07ee14d294d473857bb5b0b5d69c192bbb8f13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E6=81=A9=E6=B0=91?= <12073458+xu-enmin@user.noreply.gitee.com> Date: Mon, 20 Feb 2023 01:58:52 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=2030?= =?UTF-8?q?=E8=AE=B8=E6=81=A9=E6=B0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...54\344\270\200\346\254\241\350\257\276.md" | 80 ----- ...54\344\272\214\346\254\241\350\257\276.md" | 312 ------------------ 2 files changed, 392 deletions(-) delete mode 100644 "30\350\256\270\346\201\251\346\260\221/2023.2.15MySQL\347\254\254\344\270\200\346\254\241\350\257\276.md" delete mode 100644 "30\350\256\270\346\201\251\346\260\221/2023.218MySQL\347\254\254\344\272\214\346\254\241\350\257\276.md" diff --git "a/30\350\256\270\346\201\251\346\260\221/2023.2.15MySQL\347\254\254\344\270\200\346\254\241\350\257\276.md" "b/30\350\256\270\346\201\251\346\260\221/2023.2.15MySQL\347\254\254\344\270\200\346\254\241\350\257\276.md" deleted file mode 100644 index 62d5ab5..0000000 --- "a/30\350\256\270\346\201\251\346\260\221/2023.2.15MySQL\347\254\254\344\270\200\346\254\241\350\257\276.md" +++ /dev/null @@ -1,80 +0,0 @@ -数据库class3 -表student -字段:学号,姓名,性别,爱好,住址,联系方式,邮箱,QQ号 -并新增一条自己的记录。 - -```mysql -CREATE DATABASE class3; -USE class3; -CREATE TABLE student( - 学号 int(10), - 姓名 varchar(10), - 性别 enum('男','女'), - 爱好 set('唱歌','跳舞','听音乐'), - 住址 varchar(30), - 联系方式 int(11), - 邮箱 varchar(20), - QQ号 int(15) - ); - INSERT into student VALUES(2244310330,'许恩民',2,3,'安徽淮南市',17729901560,'3256972080@qq.com',3256972080); -``` - - - -# 第4章 SQL语句 - -### 4.1SQL的分类 - -| 名称 | 解释 | 命令 | -| :-------------------: | :-------------------------------------------: | :----------------------------------------------------------: | -| DDL (数据定义语言) | 定义和管理数据对象结构,如数据库,数据表等 | 创建(create),修改(alter),删除(drop) show(展示)结构 | -| DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | 增(insert),删(delete),改(update) 数据 | -| DQL (数据查询语言) | 用于查询数据库数据 | 查(select) | -| DCL (数据控制语 言) | 用于管理数据库的语言,包括管理权限及数 据更改 | grant(授权),commit(确认),rollback(回滚) | - -### 4.2 SQL语法规范 - -(1)mysql的sql语法不区分大小写 - -A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则。 - - ci(大小写不敏感),cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写) - - B:sql中的关键字,比如:create,insert等,**不区分大小写**。但是大家习惯上把关键字都“大写”。 - -(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 - -(3) 建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) - -(4)数据库和表名、字段名等对象名中间不要包含空格 - -(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名 - -### 4.3 SQL脚本中如何加注释 - -- 单行注释:#注释内容(mysql特有的) - -- 单行注释:--空格注释内容 其中--后面的空格必须有 - -- 多行注释:/* 注释内容 */ - -### 4.4 mysql脚本中的标点符号 - -1. 本身成对的标点符号必须成对,例如:(),'',""。 - -2. 所有标点符号必须英文状态下半角输入方式下输入。 - -单引号'':**字符串和日期类型的数据值使用单引号''引起来**,数值类型的不需要加标点符号 - -#### 1、CHAR(M)为固定长度的字符串 - -CHAR(M)为固定长度的字符串, M表示最多能存储的字符数,如果未指定(M)表示只能存储1个字符。 - -#### 2、VARCHAR(M)为可变长度的字符串 - -- M不可缺省,必须指定(M),否则报错。 -- 实际长度达不到M值时,以实际长度为准。 - - - ------- \ No newline at end of file diff --git "a/30\350\256\270\346\201\251\346\260\221/2023.218MySQL\347\254\254\344\272\214\346\254\241\350\257\276.md" "b/30\350\256\270\346\201\251\346\260\221/2023.218MySQL\347\254\254\344\272\214\346\254\241\350\257\276.md" deleted file mode 100644 index 31ad2a5..0000000 --- "a/30\350\256\270\346\201\251\346\260\221/2023.218MySQL\347\254\254\344\272\214\346\254\241\350\257\276.md" +++ /dev/null @@ -1,312 +0,0 @@ -## 命令行客户端 - -### 数据库 - -1、查看所有的数据库 - -``` -show databases; -``` - -2、创建自己的数据库 - -``` -create database 数据库名 charset utf8; -#创建mxdx数据库 -create database mxdx; -``` - -3、删除数据库 - -``` -drop database 数据库名; -#删除mxdx数据库 -drop database mxdx; -``` - -4、使用自己的数据库 - -``` -use 数据库名; -#使用mxdx数据库 -use mxdx; -``` - -*use 只能给数据库用 - -*desc 用给表(查看表的结构)。 - -#### 数据表 - -1、查看某个库的所有表格 - -``` -show tables; #要求前面有use语句 - -show tables from 数据库名; -``` - -2、创建新的表格 - -``` -create table 表名称( - 字段名 数据类型, - 字段名 数据类型 -); -``` - -## 第1题 - -1、创建数据库test01_market - -2、创建表格customers - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -**要求3:**将c_contact字段移动到c_birth字段后面 - -**要求4:**将c_name字段数据类型改为 varchar(70) - -**要求5:**将c_contact字段改名为c_phone - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -**要求7:**将表名改为customers_info - -**要求8:**删除字段c_city - -```mysql -USE test01_market; -CREATE TABLE customers ( c_num INT ( 11 ), c_name VARCHAR ( 50 ), c_contact VARCHAR ( 50 ), c_city VARCHAR ( 50 ), c_birth DATE ); -SELECT - * -FROM - customers; -ALTER TABLE customers MODIFY c_contact VARCHAR ( 50 ) AFTER c_birth; -ALTER TABLE customers MODIFY c_name VARCHAR ( 70 ); -ALTER TABLE customers CHANGE c_contact c_phone VARCHAR ( 50 ); -ALTER TABLE customers ADD c_gender CHAR ( 1 ) AFTER c_name; -ALTER TABLE customers RENAME customers_info; -ALTER TABLE customers_info DROP c_city; -``` - -## 第2题 - -1、创建数据库test02_library - -2、创建表格books - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | -------- | ------------- | -------- | ---- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -3、向books表中插入记录 - -1) 指定所有字段名称插入第一条记录 - -2)不指定字段名称插入第二记录 - -3)同时插入多条记录(剩下的所有记录) - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -4、将小说类型(novel)的书的价格都增加5。 - -5、将名称为EmmaT的书的价格改为40。 - -6、删除库存为0的记录 - -```mysql -USE test02_library; -CREATE TABLE books ( - b_ids INT ( 11 ) COMMENT '书编号', - b_names VARCHAR ( 50 ) COMMENT '书名', - AUTHORS VARCHAR ( 100 ) COMMENT '作者', - prices FLOAT COMMENT '价格', - pubdate YEAR COMMENT '出版日期', - note VARCHAR ( 100 ) COMMENT '说明', - num INT ( 11 ) COMMENT '库存' -); -DROP TABLE books; -CREATE TABLE books ( - b_ids INT ( 11 ) COMMENT '书编号', - b_names VARCHAR ( 50 ) COMMENT '书名', - AUTHORS VARCHAR ( 100 ) COMMENT '作者', - prices FLOAT COMMENT '价格', - pubdate YEAR COMMENT '出版日期', - note VARCHAR ( 100 ) COMMENT '说明', - num INT ( 11 ) COMMENT '库存' -); -SELECT - * -FROM - books; -INSERT INTO books ( b_ids, b_names, AUTHORS, prices, pubdate, note, num ) -VALUES - ( 520, "三体", "许恩民", 390, 2004, "科幻", 1 ); -INSERT INTO books -VALUES - ( 5206, "三体2", "许恩民11", 39, 2041, "科幻1", 11 ); -INSERT INTO books -VALUES - ( 2, "EmmaT", "Jane lura", 35, 1993, "joke", 22 ), - ( 3, "Story of Jane", "Jane Tim", 40, 2001, "novel", 0 ), - ( 4, "Lovey Day", "George Byron", 20, 2005, "novel", 30 ), - ( 5, "Old land ", " Honore Blade", 30, 2010, "law", 0 ), - ( 6, "The Battle ", " Upton Sara ", 30, 1999, "medicine", 40 ), - ( 6, "Rose Hood", "Richard haggard", 28, 2008, "cartoon", 28 ); -UPDATE books -SET prices = 28 -WHERE - b_ids = 2; -UPDATE books -SET prices = 45 -WHERE - b_ids = 3; -UPDATE books -SET prices = 25 -WHERE - b_ids = 4; -UPDATE books -SET prices = 40 -WHERE - b_ids = 2; - DELETE from books where num = 0; - select *FROM BOOKS; -``` - - - -## 第3题 - -1、创建数据库test03_bookstore - -2、创建book表 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| sales | int(11) | NO | | NULL | | -| stock | int(11) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------------+------------+-------+-------+-------+----------------------------+ -| id | title | author | price | sales | stock | img_path | -+----+-------------+------------+-------+-------+-------+-----------------------------+ -| 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | -| 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | -+----+---------------+------------+-------+-------+-------+----------------------------+ -``` - -3、创建用户表users,并插入数据 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| username | varchar(100) | NO | UNI | NULL | | -| password | varchar(100) | NO | | NULL | | -| email | varchar(100) | YES | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+----------+----------------------------------+--------------------+ -| id | username | password | email | -+----+----------+----------------------------------+--------------------+ -| 1 | admin | 112233 | admin@mxdx.com | -+----+----------+----------------------------------+--------------------+ -``` - -4、创建订单表orders - -```mysql -+--------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+--------------+------+-----+---------+-------+ -| id | varchar(100) | NO | PRI | NULL | | -| order_time | datetime | NO | | NULL | | -| total_count | int(11) | NO | | NULL | | -| total_amount | double(11,2) | NO | | NULL | | -| state | int(11) | NO | | NULL | | -| user_id | int(11) | NO | MUL | NULL | | -+--------------+--------------+------+-----+---------+-------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----------------+---------------------+-------------+--------------+-------+---------+ -| id | order_time | total_count | total_amount | state | user_id | -+----------------+---------------------+-------------+--------------+-------+---------+ -| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | -+----------------+---------------------+-------------+--------------+-------+---------+ -``` - -5、创建订单明细表order_items - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| count | int(11) | NO | | NULL | | -| amount | double(11,2) | NO | | NULL | | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -| order_id | varchar(100) | NO | MUL | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------+--------+---------+---------+-------+----------------+----------------+ -| id |count| amount| title | author | price | img_path | order_id | -+----+-------+--------+------------+----------+-------+----------------+----------------+ -| 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | -| 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | -+----+-------+--------+------------+----------+-------+------------+----------------+ -``` - -参考答案: - -```mysql - -``` - -- Gitee From 24e0e6d6477c1cbac70af4e53c3e4b51063d9f3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E6=81=A9=E6=B0=91?= <3256972080@qq.com> Date: Tue, 21 Feb 2023 22:02:56 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=AC=A1=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...54\344\270\211\346\254\241\350\257\276.md" | 308 ++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100644 "30 \350\256\270\346\201\251\346\260\221/2023.2.20MYSQL\347\254\254\344\270\211\346\254\241\350\257\276.md" diff --git "a/30 \350\256\270\346\201\251\346\260\221/2023.2.20MYSQL\347\254\254\344\270\211\346\254\241\350\257\276.md" "b/30 \350\256\270\346\201\251\346\260\221/2023.2.20MYSQL\347\254\254\344\270\211\346\254\241\350\257\276.md" new file mode 100644 index 0000000..124bd2e --- /dev/null +++ "b/30 \350\256\270\346\201\251\346\260\221/2023.2.20MYSQL\347\254\254\344\270\211\346\254\241\350\257\276.md" @@ -0,0 +1,308 @@ +``` +-- 1、创建数据库test01_company +CREATE DATABASE test01_company CHARSET utf8 ; +-- 2、创建表格offices +USE test01_company ; +CREATE TABLE offices( +officeCode int, +city varchar(30), +address varchar(50), +country varchar(50), +postalCode varchar(25) +); + + +-- | 字段名 | 数据类型 | +-- | ---------- | ----------- | +-- | officeCode | int | +-- | city | varchar(30) | +-- | address | varchar(50) | +-- | country | varchar(50) | +-- | postalCode | varchar(25) | +-- +-- 3、创建表格employees +CREATE TABLE employees( +empNum int(11), +lastName varchar(50), +firstName varchar(50), +mobile varchar(25), +code int, +jobTitle varchar(50), +birth date, +Note varchar(255), +Sex varchar(5) +); +-- +-- | 字段名 | 数据类型 | +-- | --------- | ------------- | +-- | empNum | int(11) | +-- | lastName | varchar(50) | +-- | firstName | varchar(50) | +-- | mobile | varchar(25) | +-- | code | int | +-- | jobTitle | varchar(50) | +-- | birth | date | +-- | Note | varchar(255) | +-- | Sex | varchar(5) | +-- +-- **要求4:**将表employees的mobile字段修改到code字段后面。 +ALTER TABLE employees MODIFY mobile varchar(25) AFTER code ; +-- **要求5:**将表employees的birth字段改名为birthday; + ALTER TABLE employees CHANGE birth birthday date ; +-- **要求6:**修改sex字段,数据类型为char(1)。 +ALTER TABLE employees MODIFY sex char(1); +-- **要求7:**删除字段note; + ALTER TABLE employees DROP COLUMN Note ; +-- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); +ALTER TABLE employees ADD COLUMN favoriate_activity varchar(100); +-- **要求9:**将表employees的名称修改为 employees_info +ALTER TABLE employees RENAME employees_info ; +## 第2题 + +-- 1、创建数据库test02db +CREATE DATABASE test02db ; +-- 2、创建表格pet +USE test02db ; + CREATE TABLE pet( + name varchar(20) COMMENT "宠物名称", + owner varchar(20) COMMENT "宠物主人", + species varchar(20) COMMENT "种类", + sex char(1) COMMENT "性别", + birth year COMMENT "出生日期", + death year COMMENT "死亡日期" + ); +-- | 字段名 | 字段说明 | 数据类型 | +-- | ------- | -------- | ----------- | +-- | name | 宠物名称 | varchar(20) | +-- | owner | 宠物主人 | varchar(20) | +-- | species | 种类 | varchar(20) | +-- | sex | 性别 | char(1) | +-- | birth | 出生日期 | year | +-- | death | 死亡日期 | year | +-- +-- 3、添加记录 + INSERT INTO pet VALUES ("Fluffy","harold","Cat","f",2003,2010), + ("Claws","gwen","Cat","m",2004,null), + ("Buffy",null,"Dog","f",2009,null), + ("Fang","benny","Dog","m",2000,null), + ("bowser","diane","Dog","m",2003,2009), + ("Chirpy",null,"Bird","f",2008,null); +-- | name | owner | species | sex | birth | death | +-- | ------ | ------ | ------- | ---- | ----- | ----- | +-- | Fluffy | harold | Cat | f | 2003 | 2010 | +-- | Claws | gwen | Cat | m | 2004 | | +-- | Buffy | | Dog | f | 2009 | | +-- | Fang | benny | Dog | m | 2000 | | +-- | bowser | diane | Dog | m | 2003 | 2009 | +-- | Chirpy | | Bird | f | 2008 | | +-- +-- 4、 添加字段主人的生日owner_birth。 + ALTER TABLE pet ADD COLUMN owner_birth date; +-- 5、 将名称为Claws的猫的主人改为kevin + UPDATE pet set owner = "kevin" WHERE name ="Claws"; +-- 6、 将没有死的狗的主人改为duck + UPDATE pet set owner ="duck" WHERE death is null and species = "Dog"; +-- 7、 查询没有主人的宠物的名字; + SELECT name from pet WHERE owner is null ; +-- 8、 查询已经死了的cat的姓名,主人,以及去世时间; +SELECT name,owner,death from pet WHERE death is not null and species = "Cat" ; + +-- 9、 删除已经死亡的狗 + DELETE FROM pet WHERE death is not null and species="Dog"; + +-- 10、查询所有宠物信息 +SELECT * from pet ; +-- 1、创建数据库:test03_company +CREATE DATABASE test03_company CHARSET utf8; +-- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 +USE test03_company ; +-- A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 +CREATE TABLE department( +depid int PRIMARY KEY, +depname varchar(10) not null, +deinfo varchar(20) null +); +-- B. 雇员表(emoloyee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 +CREATE TABLE emoloyee( +empid int PRIMARY key , +name varchar(10), +sex enum('男','女') not null DEFAULT '男', +title varchar(10), +birthday date, +depid int, +FOREIGN key (depid) REFERENCES department(depid) on UPDATE cascade on delete set null +); +-- * ​ 雇员编号为主键; +-- * ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); +-- * ​ 性别默认为男; +-- +-- C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 +CREATE table salary( + empid int PRIMARY KEY, + basesalary int , + titlesalary int , + deduction int null, + FOREIGN KEY (empid) REFERENCES emoloyee(empid) on update cascade on DELETE cascade + ); + +-- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) +-- +-- 4、添加数据如下: +INSERT INTO department VALUES(111,'生产部',null), +(222,'销售部',null), +(333,'人事部','人力资源管理'); +-- 部门表: +-- +-- | 部门编号 | 部门名称 | 部门简介 | +-- | -------- | -------- | ------------ | +-- | 111 | 生产部 | Null | +-- | 222 | 销售部 | Null | +-- | 333 | 人事部 | 人力资源管理 | +-- +-- 雇员表: +INSERT INTO emoloyee VALUES (1001,'张三','男','高级工程师','1975-1-1',111), +(1002,'李四','女','助工','1985-1-1',111), +(1003,'王五','男','工程师','1978-11-11',222), +(1004,'张六', '男','工程师','1999-1-1',222); +-- | 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | +-- | -------- | ---- | ---- | ---------- | ---------- | ------------ | +-- | 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | +-- | 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | +-- | 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | +-- | 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | +-- +-- 工资表: +INSERT into salary VALUES(1001,2200,1100,200), +(1002,1200,200,null), +(1003,2900,700,200), +(1004,1950,700,150); +-- +-- | 雇员编号 | 基本工资 | 职务工资 | 扣除 | +-- | -------- | -------- | -------- | ---- | +-- | 1001 | 2200 | 1100 | 200 | +-- | 1002 | 1200 | 200 | NULL | +-- | 1003 | 2900 | 700 | 200 | +-- | 1004 | 1950 | 700 | 150 | +-- +``` + +``` +-- 1、创建一个数据库:test04_school +CREATE DATABASE test04_school CHARSET utf8; +-- 2、创建如下表格 + USE test04_school; + create table Department( + DepNo int(10) COMMENT '部门号' PRIMARY KEY , + DepName varchar(20) COMMENT '部门名称' not null, + DepNote varchar(50) COMMENT '部门备注' null + ); + +-- 表1 Department表的定义 +-- +-- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | +-- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | +-- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | +-- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | +-- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | +-- +-- 表2 Teacher表的定义 +CREATE table Teacher( +Number int COMMENT '教工号' PRIMARY KEY, +Name varchar(30) COMMENT '姓名' not null, +Sex varchar(4) COMMENT '性别' null, +Birth date COMMENT '出生日期' null, +DepNo int COMMENT '部门号' , +Salary float COMMENT '工资' null, +Address varchar(100) COMMENT '家庭住址' null, +FOREIGN KEY (DepNo) REFERENCES Department(DepNo) +); + +-- +-- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | +-- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | +-- | Number | 教工号 | int | 是 | 否 | 是 | 是 | +-- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | +-- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | +-- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | +-- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | +-- | Salary | 工资 | float | 否 | 否 | 否 | 否 | +-- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | +-- +-- 3、添加记录 +INSERT INTO Department VALUES(601,'软件技术系','软件技术等专业'), +(602,'网络技术系','多媒体技术等专业'), +(603,'艺术设计系','广告艺术设计等专业'), +(604,'管理工程系','连锁经营管理等专业'); +-- +-- | **DepNo** | **DepName** | **DepNote** | +-- | --------- | ----------- | ------------------ | +-- | 601 | 软件技术系 | 软件技术等专业 | +-- | 602 | 网络技术系 | 多媒体技术等专业 | +-- | 603 | 艺术设计系 | 广告艺术设计等专业 | +-- | 604 | 管理工程系 | 连锁经营管理等专业 | +INSERT INTO Teacher VALUES(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), +(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), +(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), +(2004,'James','女','1980-10-20',602,3500,'四川省成都市'), +(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); +-- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | +-- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | +-- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | +-- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | +-- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | +-- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | +-- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | +-- +-- 4、用SELECT语句查询Teacher表的所有记录。 +SELECT * FROM Teacher ; +``` + +# 约束 + +1、主键约束 (1)关键字是primary key (2)特点 A:每一个表只能有一个主键约束 B:主键约束的字段值是不允许为null C: 也不允许重复的 + +``` +CREATE TABLE t1( + tid INT PRIMARY KEY, + tname VARCHAR(20) +); +``` + +2、唯一键约束: (1)关键字:unique key +(2)特点 A:允许为null B: 不能重复 B:一个表可以有多个唯一键约束 + +\#建表后增加唯一键约束 + +``` +ALTER TABLE 表名称 ADD UNIQUE KEY (字段列表); + +ALTER TABLE student ADD UNIQUE KEY(sname); +``` + +3、如果某个字段,不要求唯一,但是要求非空。那么就可以给字段加非空约束。(not null) + +4、默认值约束(DEFAULT) 如果某个字段,在添加数据时未指定值时,希望不要用NULL处理,而是按照一个默认值处理, 就可以使用默认值约束。 例如:学生性别,在未指定时,默认按照 男 处理 + +``` +#删除gender的非空约束,保留默认值约束 + ALTER TABLE student MODIFY gender ENUM('男','女') DEFAULT '男'; + + #保留非空和默认值约束 + + ALTER TABLE student MODIFY gender ENUM('男','女') DEFAULT '男' NOT NULL; +``` + +5、外键约束 约束两个表的关系,或者是一个表的两个字段之间的关系。 + +(1)主表(父表)和从表(子表) 主表:被依赖,被参考 从表:依赖别人的,参考别人的 + +例如:员工表(从)和部门表(主) + +(2)外键的建立和指定要在从表中定义 (3)关键字 foreign key (4)格式 foreign key (从表的字段) references 主表(被依赖字段【主键】) (5)要求 A:主表必须先存在 B:主表被依赖字段必须有索引,所以通常是主键列或唯一键列等才能作为被依赖字段。 C:删除表时,要么先删除从表,再删除主表,要么先解除外键约束,然后各自删除。 D:从(子)表的依赖字段的数据,必须在主(父)表被依赖字段中选择。 添加和修改都是这样的。 E:主(父)表被依赖字段的数据不能轻易的删除和修改,要看是否被引用 + +外键约束等级为 on update/delete cascade /(set null) + +6、自增属性 维护某个字段的值自动增长的一个属性。 它的要求: (1)一个表最多只能有一个字段是自增的 (2)自增的字段必须是整数类型 (3)自增的字段必须是键约束的字段(通常是主键、唯一键) + +自增字段赋值为null和0的时候,会自增, 如果赋值为其他的值,按照你指定的值来。 + -- Gitee