From 35cbc9c65d1582fec6c4581ebbc0a0bf5c6afaf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E5=9B=BD=E4=BA=AE?= <647597435@qq.com> Date: Fri, 17 Feb 2023 20:34:01 +0800 Subject: [PATCH 1/2] =?UTF-8?q?SQL=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20230217 SQL\350\257\255\345\217\245.md" | 256 ++++++++++++++++++ 1 file changed, 256 insertions(+) create mode 100644 "19\345\224\220\345\233\275\344\272\256/20230217 SQL\350\257\255\345\217\245.md" diff --git "a/19\345\224\220\345\233\275\344\272\256/20230217 SQL\350\257\255\345\217\245.md" "b/19\345\224\220\345\233\275\344\272\256/20230217 SQL\350\257\255\345\217\245.md" new file mode 100644 index 0000000..e9010e8 --- /dev/null +++ "b/19\345\224\220\345\233\275\344\272\256/20230217 SQL\350\257\255\345\217\245.md" @@ -0,0 +1,256 @@ +## 1 SQL的分类 + +| 名称 | 解释 | 命令 | +| :-------------------: | :-------------------------------------------: | :----------------------------------------------------------: | +| DDL (数据定义语言) | 定义和管理数据对象结构,如数据库,数据表等 | 创建(create),修改(alter),删除(drop) show(展示)结构 | +| DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | 增(insert),删(delete),改(update) 数据 | +| DQL (数据查询语言) | 用于查询数据库数据 | 查(select) | +| DCL (数据控制语 言) | 用于管理数据库的语言,包括管理权限及数 据更改 | grant(授权),commit(确认),rollback(回滚) | + +## 2 SQL语法规范 + +1)mysql的sql语法不区分大小写 + +2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 + +3)建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) + +4)数据库和表名、字段名等对象名中间不要包含空格 + +```mysql +reate database my mxdx; + +ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mxdx' at line 1 +``` + +5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名 + +## 3 SQL脚本中如何加注释 + +```mysql +create table tt( + id int, #编号 + `name` varchar(20), -- 姓名 + gender enum('男','女') + /* + 性别只能从男或女中选择一个, + 不能两个都选,或者选择男和女之外的 + */ +); +``` + +## 4 mysql脚本中的标点符号 + +1. ### 小括号(): + + - 在创建表、添加数据、函数使用、子查询、计算表达式等等会用()表示某个部分是一个整体结构。 + - 思考: 2+3 * 6 =20 和 (2+3) * 6 =30的区别 + +2. 单引号'':**字符串和日期类型的数据值使用单引号''引起来**,数值类型的不需要加标点符号。 + +3. “2023-10--10” + +4. 双引号"":列的别名可以使用引号"",**给表名取别名不要用引号**。 + +5. 在MySQL中双引号通常等价于单引号 + +```mysql +create table tt( + id int + ; + +ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2 +``` + +# MySQL支持的数据类型 + +### 数值类型:包括整数和小数 + +1 整数类型 + +对于整数类型,MySQL还支持在类型名称后面加小括号(M),而小括号中的M表示显示宽度,M的取值范围是(0, 255)。int(M)这个M在字段的属性中指定了unsigned(无符号)和zerofill(零填充)的情况下才有意义。表示当整数值不够M位时,用0填充。如果整数值超过M位但是没有超过当前数据类型的范围时,就按照实际位数存储。当M宽度超过当前数据类型可存储数值范围的最大宽度时,也是以实际存储范围为准。 + +实例 + +```mysql +#演示整数类型 +#创建一个表格,表格的名称“t_int”, +#包含两个字段i1和i2,分别是int和int(2)类型 +#create table t_int(i1 int,i2 int(2)); +create table t_int( + i1 int, + i2 int(2) #没有unsigned zerofill,(2)没有意义 +); + +#查看当前数据库的所有表格 +show tables; +show tables from 数据库名; + +#查看表结构 +desc 表名称; +desc t_int; + +mysql> desc t_int; ++-------+------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+------+------+-----+---------+-------+ +| i1 | int | YES | | NULL | | +| i2 | int | YES | | NULL | | ++-------+------+------+-----+---------+-------+ +2 rows in set (0.01 sec) + +#创建一个表格,表格的名称“t_int2”, +#包含两个字段i1和i2,分别是int和int(2)类型 +create table t_int2( + i1 int, + i2 int(2) unsigned zerofill +); + +mysql> desc t_int2; ++-------+--------------------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+--------------------------+------+-----+---------+-------+ +| i1 | int | YES | | NULL | | +| i2 | int(2) unsigned zerofill | YES | | NULL | | ++-------+--------------------------+------+-----+---------+-------+ +2 rows in set (0.01 sec) + +#添加数据到表格中 +insert into 表名称 values(值列表); +insert into t_int values(1234,1234); +insert into t_int2 values(1234,1234); + +#查询数据 +select * from 表名称; +select * from t_int; +select * from t_int2; + +#添加数据到表格中 +insert into 表名称 values(值列表); +insert into t_int values(1,1); +insert into t_int2 values(1,1); + +insert into t_int values(12222228854225548778455,12222228854225548778455); +mysql> insert into t_int values(12222228854225548778455,12222228854225548778455); +ERROR 1264 (22003): Out of range value for column 'i1' at row +``` + +2 小数类型 + +MySQL中使用浮点数和定点数来表示小数。 + +浮点数有两种类型:单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数只有DECIMAL。浮点数和定点数都可以用(M,D)来表示。 + +- M是精度,表示该值总共显示M位,包括整数位和小数位,对于FLOAT和DOUBLE类型来说,M取值范围为0~255,而对于DECIMAL来说,M取值范围为0~65。 +- D是标度,表示小数的位数,取值范围为0~30,同时必须<=M。 + +DECIMAL实际是以字符串形式存放的,在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL类型会比较好。浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围,它的缺点是会引起精度问题。 + +实例 + +```mysql +#演示小数类型 +#创建表格 +create table t_double( + d1 double, + d2 double(5,2) #-999.99~999.99 +); + +#查看表结构 +desc t_double; + +#添加数据 +insert into t_double values(2.5,2.5); + +#查看数据 +select * from t_double; +mysql> select * from t_double; ++------+------+ +| d1 | d2 | ++------+------+ +| 2.5 | 2.50 |#d2字段小数点后不够2位用0补充 ++------+------+ +1 row in set (0.00 sec) + +#添加数据 +insert into t_double values(2.5526,2.5526); +insert into t_double values(2.5586,2.5586); + +mysql> select * from t_double; ++--------+------+ +| d1 | d2 | ++--------+------+ +| 2.5 | 2.50 | +| 2.5526 | 2.55 |#小数点后有截断现象,并且会四舍五入 +| 2.5586 | 2.56 |#小数点后有截断现象,并且会四舍五入 ++--------+------+ +3 rows in set (0.00 sec) + + +#添加数据 +insert into t_double values(12852.5526,12852.5526); + +#d2字段整数部分超过(5-2=3)位,添加失败 +mysql> insert into t_double values(12852.5526,12852.5526); +ERROR 1264 (22003): Out of range value for column 'd2' at row 1 + + +#创建表格 +create table t_decimal( + d1 decimal, #没有指定(M,D)默认是(10,0) + d2 decimal(5,2) +); + + +#查看表结构 +desc t_decimal; +mysql> desc t_decimal; ++-------+---------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------+---------------+------+-----+---------+-------+ +| d1 | decimal(10,0) | YES | | NULL | | +| d2 | decimal(5,2) | YES | | NULL | | ++-------+---------------+------+-----+---------+-------+ +2 rows in set (0.01 sec) + +#添加数据 +insert into t_decimal values(2.5,2.5); + +#查看数据 +select * from t_decimal; +mysql> select * from t_decimal; ++------+------+ +| d1 | d2 | ++------+------+ +| 3 | 2.50 | #d1字段小数点后截断 ++------+------+ +1 row in set (0.00 sec) + +insert into t_decimal values(12852.5526,12852.5526); + +-- 把小数赋值给整数类型的字段时,会截断小数部分,考虑四舍五入 +insert into t_int2 values(1.5,1.5); +``` + +# 作业 + +```mysql +USE student; +CREATE TABLE gxq1( +id int(10), +studentname VARCHAR(4), +sex enum('男','女'), +hobby set ('吃饭','睡觉','打豆豆'), +phone int (20), +email VARCHAR(18), +qq int(10) +); +ALTER DATABASE student CHARSET utf8; +SELECT * FROM gxq1; +INSERT INTO gxq1 VALUES(319,'唐国亮',1,7,183501183,'6475974@qq.com',647597435); +desc gxq1; +``` + +截图 + +![屏幕截图 2023-02-17 201137](C:\Users\64759\Desktop\屏幕截图 2023-02-17 201137.png) \ No newline at end of file -- Gitee From a3f72927264a58527cd9d123c15c80dd9f1eb801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E5=9B=BD=E4=BA=AE?= <647597435@qq.com> Date: Sun, 19 Feb 2023 20:08:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?MYSQL=E7=BB=83=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...40\345\217\212\344\275\234\344\270\232.md" | 324 ++++++++++++++++++ 1 file changed, 324 insertions(+) create mode 100644 "19\345\224\220\345\233\275\344\272\256/20230219 MYSQL\347\273\203\344\271\240\345\217\212\344\275\234\344\270\232.md" diff --git "a/19\345\224\220\345\233\275\344\272\256/20230219 MYSQL\347\273\203\344\271\240\345\217\212\344\275\234\344\270\232.md" "b/19\345\224\220\345\233\275\344\272\256/20230219 MYSQL\347\273\203\344\271\240\345\217\212\344\275\234\344\270\232.md" new file mode 100644 index 0000000..c4a26d6 --- /dev/null +++ "b/19\345\224\220\345\233\275\344\272\256/20230219 MYSQL\347\273\203\344\271\240\345\217\212\344\275\234\344\270\232.md" @@ -0,0 +1,324 @@ +-- 1、创建数据库test01_market + +```MYSQL +CREATE DATABASE test01_market; +USE test01_market +``` + +-- 2、创建表格customers + +| -- | 字段名 | 数据类型 | | +| ---- | --------- | ----------- | ---- | +| -- | c_num | int(11) | | +| -- | c_name | varchar(50) | | +| -- | c_contact | varchar(50) | | +| -- | c_city | varchar(50) | | +| -- | c_birth | date | | +```mysql +CREATE TABLE customers( +c_num INT, +c_name varchar(50), +c_contact varchar(50), +c_city varchar(50), +c_birth DATE +); +``` + +-- **要求3:**将c_contact字段移动到c_birth字段后面 + +```MYSQL +ALTER TABLE customers MODIFY COLUMN c_contact varchar(50) AFTER c_birth; +``` + +-- **要求4:**将c_name字段数据类型改为 varchar(70) + +```mysql +ALTER TABLE customers MODIFY c_name varchar(70); +``` + +-- **要求5:**将c_contact字段改名为c_phone + +```MYSQL +ALTER TABLE customers CHANGE c_contact c_phone varchar(50); +``` + +-- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) + +```MYSQL +ALTER TABLE customers ADD COLUMN c_gender char(1) AFTER c_name; +``` + +-- **要求7:**将表名改为customers_info + +```MYSQL +ALTER TABLE customers RENAME TO customers_info; +``` + +-- **要求8:**删除字段c_city + +```MYSQL +ALTER TABLE customers_info DROP c_city; +DESC customers_info; +``` + +作业2 + +-- 1、创建数据库test02_library + +```MYSQL +CREATE DATABASE test02_library; +use 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) | 否 | 否 | | +```MYSQL +CREATE table books( +b_id int(11) not null UNIQUE COMMENT '书编号', +b_name VARCHAR(50) not null COMMENT '书名', +`authors` VARCHAR(100) not null COMMENT '作者', +price float not null comment '价格', +pubdate year not null COMMENT '出版日期', +note VARCHAR(100) COMMENT '说明' , +num int(11) not null COMMENT '库存'); +show full COLUMNS FROM books; +``` + +-- 3、向books表中插入记录 +-- +-- 1) 指定所有字段名称插入第一条记录 + +``` +INSERT into books(b_id,b_name,`authors`,price,pubdate,note,num) values(1,'Tal of AAA','Dickes',23,'1995','novel',11); +``` + +(-- 2)不指定字段名称插入第二记录 +INSERT into books VALUES(2,'EmmaT','Jane lura ',35,'1993','joke',22); +(-- 3)同时插入多条记录(剩下的所有记录) + +``` +INSERT INTO books VALUES(3,'Story of Jane','Jane Tim ',40,'2001','novel',0), +(4,'Lovey Day','George Byro',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); +SELECT * from books; +``` + + + +| -- | 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。 + +```MYSQL +update books set price=price+5 where note='novel'; +``` + +-- 5、将名称为EmmaT的书的价格改为40。 + +```MYSQL +UPDATE books set price=40 where b_name='EmmaT'; +``` + +-- 6、删除库存为0的记录 + +```MYSQL +DELETE from books where num=0; +``` + +作业3 + +1、创建数据库test03_bookstore + +```MYSQL +CREATE DATABASE test03_bookstore; +USE test03_bookstore; +``` + + +2、创建book表 + +```MYSQL +CREATE TABLE book( +id int(11) not null PRIMARY key auto_increment, +title VARCHAR(100) not null, +author VARCHAR(100) not null, +price DOUBLE(11,2) not null, +sales int(11) not null, +stock int(11) not null, +img_path VARCHAR(100) not null); +``` + + + +```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 +INSERT INTO book values(1,'解忧杂货店','东野圭吾',21.20,102,98,'upload/books/解忧杂货店.jpg'),( +2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg '); +``` + + + + + +```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 +CREATE table users(id int(11) not null PRIMARY KEY auto_increment,username VARCHAR(100) not null unique,`password` VARCHAR(100) not null,email VARCHAR(100)); +``` + + + +```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 +INSERT into users VALUES(1,'admin',112233,'admin@mxdx.com'); +``` + + + +```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 +CREATE TABLE orders( +id VARCHAR(100) not null PRIMARY KEY, +order_time datetime not null, +total_count int(11) not null, +total_amount double(11,2) not null, +state int(11) not null, +user_id int(11) not null); +ALTER table orders MODIFY COLUMN user_id int(11) not null, +add key(user_id); +``` + + + + +尝试添加部分模拟数据,参考示例如下: + +```mysql ++----------------+---------------------+-------------+--------------+-------+---------+ +| id | order_time | total_count | total_amount | state | user_id | ++----------------+---------------------+-------------+--------------+-------+---------+ +| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | ++----------------+---------------------+-------------+--------------+-------+---------+ +``` +```MYSQL +INSERT into orders values(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 +CREATE table order_items( +id int(11) not null PRIMARY KEY auto_increment, +count int(11) not null, +amount double(11,2) not null, +title VARCHAR(100) not null, +author VARCHAR(100) not null, +price double(11,2) not null, +img_path VARCHAR(100) not null, +order_id varchar(100) not 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 +INSERT INTO order_items values(1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'),(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15294258455691'); +SELECT * from order_items; +``` + -- Gitee