diff --git "a/37 \347\216\213\346\231\264/2023.2.15.SQL\350\257\255\345\217\245.md" "b/37 \347\216\213\346\231\264/2023.2.15.SQL\350\257\255\345\217\245.md" new file mode 100644 index 0000000000000000000000000000000000000000..7996d5fd3a2c646d8ef94575dd45067b3bc8edad --- /dev/null +++ "b/37 \347\216\213\346\231\264/2023.2.15.SQL\350\257\255\345\217\245.md" @@ -0,0 +1,83 @@ +### 作业 + +数据库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(2244310337,'王晴',2,7,'福云南省昆明市',15883385370,'691705597@qq.com',691705597); +``` + + + +# 第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值时,以实际长度为准。 + + + +------ + diff --git "a/37 \347\216\213\346\231\264/2023.2.18.DDL\345\222\214DML\347\273\203\344\271\240.md" "b/37 \347\216\213\346\231\264/2023.2.18.DDL\345\222\214DML\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..d656b0b50a24c22b9078ed4f76d08b9878af2e15 --- /dev/null +++ "b/37 \347\216\213\346\231\264/2023.2.18.DDL\345\222\214DML\347\273\203\344\271\240.md" @@ -0,0 +1,325 @@ +# 1、 + +```mysql +-- 1、创建数据库test01_market +CREATE DATABASE test01_market CHARSET utf8; +-- 2、创建表格customers +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 +); + +-- | 字段名 | 数据类型 | +-- | --------- | ----------- | +-- | 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(10); +-- **要求5:**将c_contact字段改名为c_phone + ALTER TABLE customers CHANGE c_contact c_phone varchar(11); +-- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) +ALTER TABLE customers ADD COLUMN c_gender char(1) after c_name ; +-- **要求7:**将表名改为customers_info + ALTER TABLE customers RENAME TO customers_info; +-- **要求8:**删除字段c_city +ALTER TABLE customers_info DROP c_city; +``` + +# 2、 + +```mysql +-- 1、创建数据库test02_library +CREATE DATABASE test02_library CHARSET utf8; +-- 2、创建表格books +USE test02_library; +CREATE TABLE books( + b_id int(11) COMMENT "书编号", + b_name varchar(50) COMMENT "书名", + authors varchar(100) COMMENT "作者", + price float COMMENT "价格", + pubdate year COMMENT "出版日期", + note varchar(100) COMMENT "说明", + num int(11) COMMENT "库存" + ); +-- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | +-- | ------- | -------- | ------------- | -------- | ---- | +-- | b_id | 书编号 | int(11) | 否 | 是 | +-- | b_name | 书名 | varchar(50) | 否 | 否 | +-- | authors | 作者 | varchar(100) | 否 | 否 | +-- | price | 价格 | float | 否 | 否 | +-- | pubdate | 出版日期 | year | 否 | 否 | +-- | note | 说明 | varchar(100) | 是 | 否 | +-- | num | 库存 | int(11) | 否 | 否 | +-- +-- 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(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), + (6,"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 = 28 WHERE b_id = 1; +UPDATE books SET price = 45 WHERE b_id=3; +UPDATE books SET price = 25 WHERE b_id=4; +-- 5、将名称为EmmaT的书的价格改为40。 +UPDATE books set price=40 WHERE b_name = "EmmaT"; +-- 6、删除库存为0的记录 +DELETE FROM books WHERE num=0; +``` + +# 3、 + +```mysql +-- 1、创建数据库test03_bookstore +CREATE DATABASE test03_bookstore CHARSET UTF8 ; +-- 2、创建book表 +USE test03_bookstore; +CREATE TABLE book( +id int(11), +title varchar(100), +author varchar(100), +price double(11,2), +sales int(11), +stock int(11), +img_path varchar(100) +); +-- ```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 | | +-- +----------+--------------+------+-----+---------+----------------+ +-- ``` +-- 尝试添加部分模拟数据,参考示例如下: +INSERT INTO book VALUES(1,"解忧杂货店","东野圭吾",27.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,并插入数据 +CREATE TABLE users( +id int(11), +username varchar(100), +password varchar(100), +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 | | +-- +----------+--------------+------+-----+---------+----------------+ +-- ``` +-- 尝试添加部分模拟数据,参考示例如下: + INSERT INTO users VALUES(1,"admin","112233","admin@mxdx.com" ); +-- ```mysql +-- +----+----------+----------------------------------+--------------------+ +-- | id | username | password | email | +-- +----+----------+----------------------------------+--------------------+ +-- | 1 | admin | 112233 | admin@mxdx.com | +-- +----+----------+----------------------------------+--------------------+ +-- ``` +-- +-- 4、创建订单表orders +CREATE TABLE orders( +id varchar(100), +order_time datetime, +total_count int(11), +total_amount double(11,2), +state int(11), +user_id int(11) +); +-- ```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 | | +-- +--------------+--------------+------+-----+---------+-------+ +-- ``` +-- +-- 尝试添加部分模拟数据,参考示例如下: +INSERT INTO orders VALUES ("15294258455691 ","2018-06-20 00:30:45",2,50.20,0,1); +-- ```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 +CREATE TABLE order_items( +id int(11), +count int(11), +amount double(11,2), +title varchar(100), +author varchar(100), +price double(11,2), +img_path varchar(100), +order_id varchar(100) +); +-- ```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 | | +-- +----------+--------------+------+-----+---------+----------------+ +-- ``` +-- +-- 尝试添加部分模拟数据,参考示例如下: +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"); +-- ```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 | +-- +----+-------+--------+------------+----------+-------+------------+----------------+ +-- ``` + +``` + +------ + +# 客户端使用演示 + +## 命令行客户端 + +### 数据库 + +1、查看所有的数据库 + +```mysql +show databases; +``` + +2、创建自己的数据库 + +```mysql +create database 数据库名 charset utf8; +#创建mxdx数据库 +create database mxdx; +``` + +3、删除数据库 + +```mysql +drop database 数据库名; +#删除mxdx数据库 +drop database mxdx; +``` + +4、使用自己的数据库 + +```mysql +use 数据库名; +#使用mxdx数据库 +use mxdx; +``` + +*use 只能给数据库用 + +*desc 用给表(查看表的结构)。 + +#### 数据表 + +1、查看某个库的所有表格 + +```mysql +show tables; #要求前面有use语句 + +show tables from 数据库名; +``` + +2、创建新的表格 + +```mysql +create table 表名称( + 字段名 数据类型, + 字段名 数据类型 +); +``` + +说明:如果是最后一个字段,后面就用加逗号,因为逗号的作用是分割每个字段。 + +3、查看定义好的表结构 + +```mysql +desc 表名称; +``` + +4、添加一条记录 + +```mysql +insert into 表名称 values(值列表); +``` + +5、查看一个表的数据 + +```mysql +select * from 表名称; +``` + +6、删除表 + +```mysql +drop table 表名称; +``` +