diff --git "a/14 \345\256\213\345\256\217\346\211\254/20230218\345\205\263\344\272\216DDL\345\222\214DML\345\221\275\344\273\244\347\232\204\345\237\272\347\241\200\345\272\224\347\224\250\345\217\212\344\275\234\344\270\232.md" "b/14 \345\256\213\345\256\217\346\211\254/20230218\345\205\263\344\272\216DDL\345\222\214DML\345\221\275\344\273\244\347\232\204\345\237\272\347\241\200\345\272\224\347\224\250\345\217\212\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..3f9c15108eda7e4d136094eb23e63836ea96b647 --- /dev/null +++ "b/14 \345\256\213\345\256\217\346\211\254/20230218\345\205\263\344\272\216DDL\345\222\214DML\345\221\275\344\273\244\347\232\204\345\237\272\347\241\200\345\272\224\347\224\250\345\217\212\344\275\234\344\270\232.md" @@ -0,0 +1,336 @@ +# DDL + +```mysql +-- 创建数据库 +create database 数据库名 ; +create database 数据库名 charset 字符集; +-- 查看所有的数据库 +show databases; #有一个s,代表多个数据库 +-- 查看某个数据库的所有表格 +use 数据库名; +show tables; +-- 查看某个数据库的详细定义语句 +show create database 数据库名; +-- 删除数据库 +drop database 数据库名; +-- 使用数据库 +use 数据库名; +-- 创建表格 +create table 数据表名称( + 字段名 数据类型, + 字段名 数据类型 + ... +); +-- 查看表的详细定义信息,即查看建表语句 +show create table 表名称; +-- 修改数据表编码 +alter table 表名称 convert to character set utf8; +-- 查看表结构 +desc 表名称; +-- 删除表格,包括表结构和里面的数据 +drop table 表名称; +-- 修改表结构:删除字段 +alter table 表名称 drop 【column】 字段名称; #column可以省略 +-- 修改表结构:增加字段 +alter table 表名称 add 【column】 字段名称 数据类型; #column表示列,字段,可以省略 +alter table 表名称 add 【column】 字段名称 数据类型 first;#在最前面增加字段 +alter table 表名称 add 【column】 字段名称 数据类型 after 另一个字段;#在某字段之后增加字段 +-- 修改表结构:修改字段的数据类型 +alter table 表名称 modify 【column】 字段名称 新的数据类型; +-- 修改表结构:修改字段的名称 +alter table 表名称 change 【column】 旧字段名称 新的字段名称 新的数据类型; +-- 修改表结构:修改字段位置 +alter table 表名称 modify 【column】 字段名称 数据类型 first; +alter table 表名称 modify 【column】 字段名称 数据类型 after 另一个字段; +-- 修改表名称(重命名表) +alter table 旧表名 rename 【to】 新表名; +rename table 旧表名称 to 新表名称; +``` + +# DML + +```mysql +-- 添加一条记录到某个表中 +insert into 表名称 values(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 +insert into 表名称 (字段列表) values(值列表); #值列表中的值的顺序、类型、个数必须与(字段列表)一一对应 +-- 添加多条记录到某个表中 +insert into 表名称 values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 +insert into 表名称 (字段列表) values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与(字段列表)一一对应 +-- 修改所有行 +update 表名称 set 字段名 = 值, 字段名 = 值; #给所有行修改 +-- 修改部分行 +update 表名称 set 字段名 = 值, 字段名 = 值 where 条件; #给满足条件的行修改 +-- 删除部分行的数据 +delete from 表名称 where 条件; +-- 删除整张表的数据,但表结构留下 +delete from 表名称; +-- 截断表,清空表中的数据,只留有表结构 +truncate 表名称; +/* +delete是一条一条删除记录的。如果在事务中,事务提交之前支持回滚。 +truncate是把整个表drop,新建一张,效率更高。就算在事务中,也无法回滚。 +*/ + +``` + +# 作业 + +## 第1题 + +```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, +c_name varchar(50), +c_contact varchar(50), +c_city varchar(50), +c_birth date +); +-- **要求3:**将c_contact字段移动到c_birth字段后面 +alter table customers change c_contact c_city1 varchar(50); +alter table customers change c_city c_contact varchar(50); +alter table customers change c_city1 c_city varchar(50); +-- **要求4:**将c_name字段数据类型改为 varchar(70) +alter table customers modify c_name varchar(70); +-- **要求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_into; +-- **要求8:**删除字段c_city +alter table customers drop c_city; +``` + +## 第2题 + +```mysql +-- 1、创建数据库test02_library +create database 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) | 否 | 否 | +use test02_library; +create table books( +b_id int, +b_name varchar(50), +`authors` varchar(100), +price float, +pubdate year, +note varchar(100), +num int +); +desc books; +select * 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(b_id,b_name,`authors`,price,pubdate,note,num) 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; +``` + + + +## 第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 +-- 1、创建数据库test03_bookstore +create database test03_bookstore; +use test03_bookstore; +-- 2、创建book表 + create table book( +id int primary key auto_increment, +title varchar(100), +author varchar(100), +price double(11,2), +sales int, +stock int, +img_path varchar(100) +); +desc book; +select * from book; +-- 尝试添加部分模拟数据 +insert into book(id,title,author,price,sales,stock,img_path) values(1,'解忧杂货店','东野圭吾',27.20,102,98,'upload/books/解忧杂货店.jpg'),(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); +-- 3、创建用户表users,并插入数据 +create table users( +id int primary key auto_increment, +username varchar(100), +password varchar(100), +email varchar(100) +); +desc users; +select * from users; +-- 尝试添加部分模拟数据: +insert into users values(1,'admin',112233,'admin@mxdx.com'); +-- 4、创建订单表orders +create table orders( +id varchar(100), +order_time datetime, +total_count int, +total_amount double(11,2), +state int, +user_id int +); +desc orders; +select * from orders; +-- 尝试添加部分模拟数据 +insert into orders values(15294258455691,'2018-06-20 00:30:45',2,50.20,0,1); +-- 5、创建订单明细表order_items +create table order_items( +id int primary key auto_increment, +count int, +amount double(11,2), +title varchar(100), +author varchar(100), +price double(11,2), +img_path varchar(100), +order_id varchar(100) +); +desc order_items; +select * from order_items; +-- 尝试添加部分模拟数据 +insert into order_items values(1,1,27.2,'解忧杂货店','东野圭吾',27.2,'static/img/default.jpg',15294258455691),(2,1,23,'边城','沈从文',23,'static/img/default.jpg',15294258455691) +``` +