diff --git "a/02 \346\236\227\344\275\263\346\263\275/20230215 sql\350\257\255\345\217\245 \346\225\260\346\215\256\347\261\273\345\236\213.md" "b/02 \346\236\227\344\275\263\346\263\275/20230215 sql\350\257\255\345\217\245 \346\225\260\346\215\256\347\261\273\345\236\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..bac60e435a01f4d8fb073903e6959b15605ca6f1 --- /dev/null +++ "b/02 \346\236\227\344\275\263\346\263\275/20230215 sql\350\257\255\345\217\245 \346\225\260\346\215\256\347\261\273\345\236\213.md" @@ -0,0 +1,189 @@ +# 20230215 sql语句 数据类型 + +### 1.sql语句的规范 + +​ (1)mysql的sql语法不区分大小写 + +​ A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则。 + +​ ci(大小写不敏感),cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写) + +​ (2)命名 + +​ 使用26个英文字母大小写,数字0-9,下划线 + +​ 建议不使用Mysql关键词命名,或用`飘号括起来命名 + +例子: + +```mysql +CREATE DATABASE `student` +``` + +​ 命名不可以重名,包括库、表、类型不可重名 + +### 2.sql脚本的注释 + +​ (1)单行注释: + +```mysql +#这是单行注释的一种 +-- 这也是单行注释一种(--后面需要加空格) +``` + +​ (2)多行注释: + +```mysql +/* +这是多行注释 +*/ +``` + +### 3.mysql中的标点符号 + +​ mysql脚本对符号有以下要求: + +​ 本身成对的标点符号必须成对,例如:(),'',""。 + +​ 所有标点符号必须英文状态下半角输入方式下输入。 + +​ 单引号'':**字符串和日期类型的数据值使用单引号''引起来**,数值类型的不需要加标点符号。 + +​ 双引号"":列的别名可以使用引号"",**给表名取别名不要用引号**。、 + +​ 在MySQL中双引号通常等价于单引号 + +### 4.MySQL支持的数据类型 + +#### 4.1 整数类型:常用类型为int + +​ int类型后面可以加小括号,如int(M),M表示显示的宽度,M的取值范围是(0, 255)。int(M)这个M在字段的属性中指定了unsigned(无符号)和zerofill(零填充)的情况下才有意义。表示当整数值不够M位时,用0填充。如果数值超过M位但是没有超过int数据类型的范围,即可正常显示。、 + +#### 4.2 小数类型: + +​ 单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数只有DECIMAL。浮点数和定点数都可以用(M,D)来表示。 + +- M是精度,表示该值总共显示M位,包括整数位和小数位,对于FLOAT和DOUBLE类型来说,M取值范围为0~255,而对于DECIMAL来说,M取值范围为0~65。 +- D是标度,表示小数的位数,取值范围为0~30,同时必须<=M。 + +DECIMAL实际是以字符串形式存放的,在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL类型会比较好。浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围,它的缺点是会引起精度问题。 + +#### 4.3 字符串类型: + +​ + +​ char(X),是固定长度,一旦声明长度,不管多长,都以声明长度占用空间,如果没有没有设置(X)那么char的长度只有1个字符,(X)的取值范围是0~255字符。 + +​ VARCHAR(M)为可变长度的字符串,M表示最多能存储的字符数,最大范围由字符集及M共同决定,M不可缺省,必须指定(M),否则报错,实际长度达不到M值时,以实际长度为准。 + +- VARBINARY类型的数据除了存储数据本身外,还需要1或2个字节来存储数据的字节 + +**使用场景**: + +- 身份证号、手机号码、QQ号、用户名username、密码password、银行卡号等固定长度的文本字符串适合使用CHAR类型; +- 评论、朋友圈、微博不定长度的文本字符串更适合使用VARCHAR类型。 + +#### 4.4**日期时间类型**: + +​ (1)如果只表示年份使用YEAR,格式为“YYYY”,取值范围1901~2155 + +​ (2)如果表示年月日,使用DATE,格式为"YYYY-MM-DD",例如“2023-02-15” + +​ (3)如果表示时间,使用TIME,格式为"HH:MM:SS",例如"19:00:01" + +​ (4)如果想表示年月日又要有时间,使用DATATIME类型,格式为"YYYY-MM-DD HH:MM:SS",例如"2023-02-15 19:00:01" + +​ (5)如果需要经常插入或更新日期时间为系统日期时间,则通常使用TIMESTAMP类型,格式为“YYYY-MM-DD HH:MM:SS”,例如“2022-02-04 10:08:08”。只支持1970-01-01 00:00:01 UTC至2038-01-19 03:14:07 UTC范围的日期时间值,其中UTC是世界标准时间。 + +​ (6)修改当前的时区 set time_zone = '+9:00'; + +#### 4.4**Enum和Set类型**: + +​ (1)Enum类型只能在指定的枚举中取值,而且一次只能取其中一个,枚举列表最多可以有65535个成员,ENUM值在内部用整数表示,每个枚举值均有一个索引值, MySQL存储的就是这个索引编号。 + +​ (2)Set类型可以选取列表中1个或者多个值的组合,SET最多只能有64个成员。 + +### 5、Mysql数据库格式: + +```mysql +#1、创建数据库 +CREATE DATABASE `数据库名`; +#例子 +CREATE DATABASE `class3`; + +#2、使用(选择)数据库 +USE `数据库名`; +#例子 +USE `class3`; + +#3、创建数据表 +CREATE TABLE `数据表名`( + `表列名` 类型 +); +#例子 +CREATE TABLE `student`( + `id` int(2) NOT NULL AUTO_INCREMENT COMMENT '学号', + `name` VARCHAR(10) NOT NULL COMMENT '姓名', + `sex` ENUM('男','女') NOT NULL COMMENT '性别', + `hobby` SET('运动','学习','游戏','旅游') NOT NULL COMMENT '爱好', + `address` VARCHAR(100) NOT NULL COMMENT '地址', + `tel` CHAR(11) NOT NULL COMMENT '电话', + `email` VARCHAR(50) NOT NULL COMMENT '邮箱', + `QQ` CHAR(11) NOT NULL COMMENT 'QQ', +); + +#4、添加数据 +INSERT INTO `student` VALUES(01,'林佳泽','男','学习,旅游,游戏','福建','13110884745','565619801@qq.com','565619801'); + +#5、查询数据 +SELECT * FROM `student` + +#6、修改数据 +UPDATE `student` SET `id` = 02 WHERE `id` = 01; + +#7、删除数据 +DELETE FROM `student` WHERE `id` + +#8、删除数据库 +DROP DATABASE `class3` +``` + +### 6、作业: + +![1](.\img\1.png) + +```mysql +#1、创建数据库 +CREATE DATABASE `class3`; + +#2、使用(选择)数据库 +USE `class3`; + +#3、创建数据表 +CREATE TABLE `student`( + `id` int(2) NOT NULL COMMENT '学号', + `name` VARCHAR(10) NOT NULL COMMENT '姓名', + `sex` ENUM('男','女') NOT NULL COMMENT '性别', + `hobby` SET('运动','学习','游戏','旅游') NOT NULL COMMENT '爱好', + `address` VARCHAR(100) NOT NULL COMMENT '地址', + `tel` CHAR(11) NOT NULL COMMENT '电话', + `email` VARCHAR(50) NOT NULL COMMENT '邮箱', + `QQ` CHAR(11) NOT NULL COMMENT 'QQ' +); + +#4、添加数据 +INSERT INTO `student` VALUES(01,'林佳泽','男','学习,旅游,游戏','福建','13110884745','565619801@qq.com','565619801'); + +#5、查询数据 +SELECT * FROM `student` + +#6、修改数据 +UPDATE `student` SET `id` = 02 WHERE `id` = 01; + +#7、删除数据 +DELETE FROM `student` WHERE `id` + +#8、删除数据库 +DROP DATABASE `class3` +``` + diff --git "a/02 \346\236\227\344\275\263\346\263\275/20230218 ddl dml\350\257\255\345\217\245\345\222\214\344\275\234\344\270\232.md" "b/02 \346\236\227\344\275\263\346\263\275/20230218 ddl dml\350\257\255\345\217\245\345\222\214\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..4f7d38c1b1a37ff36aca71eb674ca4f556500fb9 --- /dev/null +++ "b/02 \346\236\227\344\275\263\346\263\275/20230218 ddl dml\350\257\255\345\217\245\345\222\214\344\275\234\344\270\232.md" @@ -0,0 +1,290 @@ +# 20230218 ddl dml语句和作业 + + + +### 1、ddl语句主要的命令 + +​ 创建 create CREATE DATABASE `test01_market`; + +​ 修改alter + +```mysql +#修改字段名和字段类型: +alter table `表名` change `字段名` `新字段名` `类型`; + +#移动字段 向后移动: +alter table `表名` modify `需要移动的字段` `类型` after `移动到某字段后` ; + +#修改字段类型: +alter table `表名` modify `字段名` `类型`; + +#添加字段: +alter table `表名` add `字段名` `类型` after `字段名` ;-- after 添加在某字段后面 + +#表重命名: +alter table `表名` rename `新表名`; + +#删除表中name这行 +alter table `表名` drop `name`; +``` + +### 2、dml语句主要的命令 + +​ 新增inster into + +​ 修改update + +```mysql +#修改id 1006和1007的性别为男 +update `表名` set `字段` = ' 男' where id >= 1006 and id <= 1007; + +#修改性别为空的null性别改为男 +update `表名` set `字段` = '男' where `字段` is null; + +#将qq不为空的修改为qq号为1111 +update `表名` set qq=1111 where qq is not null; + +#删除列数据 +update `表名` set `字段名` = null; +``` + +​ 删除delete + +```mysql +#删除id为1006这行 +delete from `表名` where id = 1006; +``` + +### 3、作业 + +```mysql +-- 第一题 +-- 1、创建数据库test01_market +CREATE DATABASE `test01_market`; +-- 2、创建表格customers +USE `test01_market`; +-- | 字段名 | 数据类型 | +-- | --------- | ----------- | +-- | c_num | int(11) | +-- | c_name | varchar(50) | +-- | c_contact | varchar(50) | +-- | c_city | varchar(50) | +-- | c_birth | date | +CREATE TABLE `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字段后面 +ALTER TABLE `customers` MODIFY `c_contact` VARCHAR(50) AFTER `c_birth`; +-- **要求4:**将c_name字段数据类型改为 varchar(70) +ALTER TABLE `customers` MODIFY `c_name` VARCHAR(70); +DESC `customers` +-- **要求5:**将c_contact字段改名为c_phone +ALTER TABLE `customers` CHANGE `c_contact` `c_phone` VARCHAR(50); +-- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) +ALTER TABLE `customers` ADD `c_gender` char(1) AFTER `c_name`; +-- **要求7:**将表名改为customers_info +ALTER TABLE `customers` RENAME `customers_info`; +-- **要求8:**删除字段c_city +ALTER TABLE `customers_info` DROP `c_city`; +``` + +```mysql +-- 第二题 +-- 1、创建数据库test02_library +CREATE DATABASE `test02_library`; +-- 2、创建表格books +USE `test02_library`; +-- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | +-- | ------- | -------- | ------------- | -------- | ---- | +-- | b_id | 书编号 | int(11) | 否 | 是 | +-- | b_name | 书名 | varchar(50) | 否 | 否 | +-- | authors | 作者 | varchar(100) | 否 | 否 | +-- | price | 价格 | float | 否 | 否 | +-- | pubdate | 出版日期 | year | 否 | 否 | +-- | note | 说明 | varchar(100) | 是 | 否 | +-- | num | 库存 | int(11) | 否 | 否 | +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 "库存" +); +-- 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 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); +-- | 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。 +UPDATE `books` set `price`=`price` + 5 WHERE `note` = 'novel'; +-- 5、将名称为EmmaT的书的价格改为40。 +UPDATE `books` set `price`=40 WHERE `b_name` = 'EmmaT'; +-- 6、删除库存为0的记录 +DELETE FROM `books` WHERE num=0; +``` + +```mysql +-- 第三题 +-- 1、创建数据库test03_bookstore +CREATE DATABASE `test03_bookstore`; +-- 2、创建book表 +USE `test03_bookstore`; +-- ```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 | | +-- +----------+--------------+------+-----+---------+----------------+ +-- ``` +CREATE TABLE `book`( +`id` int(10) PRIMARY KEY, +`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 +); +DESC `book`; +-- 尝试添加部分模拟数据,参考示例如下: + +-- ```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 | +-- +----+---------------+------------+-------+-------+-------+----------------------------+ +-- ``` +INSERT INTO `book` VALUES (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 | | +-- +----------+--------------+------+-----+---------+----------------+ +-- ``` +CREATE TABLE `users`( +`id` int(11) NOT NULL PRIMARY key, +`username` varchar(100) NOT NULL UNIQUE key, +`password` varchar(100) NOT NULL, +`email` varchar(100) +); +-- 尝试添加部分模拟数据,参考示例如下: + +-- ```mysql +-- +----+----------+----------------------------------+--------------------+ +-- | id | username | password | email | +-- +----+----------+----------------------------------+--------------------+ +-- | 1 | admin | 112233 | admin@mxdx.com | +-- +----+----------+----------------------------------+--------------------+ +-- ``` +INSERT INTO `users` VALUES (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 | | +-- +--------------+--------------+------+-----+---------+-------+ +-- ``` +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 +); +-- 尝试添加部分模拟数据,参考示例如下: + +-- ```mysql +-- +----------------+---------------------+-------------+--------------+-------+---------+ +-- | id | order_time | total_count | total_amount | state | user_id | +-- +----------------+---------------------+-------------+--------------+-------+---------+ +-- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | +-- +----------------+---------------------+-------------+--------------+-------+---------+ +-- ``` +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 | | +-- +----------+--------------+------+-----+---------+----------------+ +-- ``` +create table `order_items`( +`id` int(11) primary key, +`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 | +-- +----+-------+--------+------------+----------+-------+------------+----------------+ +-- ``` +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'); +``` + diff --git "a/02 \346\236\227\344\275\263\346\263\275/img/1.png" "b/02 \346\236\227\344\275\263\346\263\275/img/1.png" new file mode 100644 index 0000000000000000000000000000000000000000..646d257b30bbff5ddf77242e4effa0292df872ee Binary files /dev/null and "b/02 \346\236\227\344\275\263\346\263\275/img/1.png" differ