diff --git "a/29 \347\216\213\351\233\257\351\235\231/20230218 DML\350\257\255\350\250\200\345\222\214\344\275\234\344\270\232.md" "b/29 \347\216\213\351\233\257\351\235\231/20230218 DML\350\257\255\350\250\200\345\222\214\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..c9f130b56b408346afc96594f55d6e3dc823ca74 --- /dev/null +++ "b/29 \347\216\213\351\233\257\351\235\231/20230218 DML\350\257\255\350\250\200\345\222\214\344\275\234\344\270\232.md" @@ -0,0 +1,414 @@ +## 第1题 + +```sql +-- 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题 + +```sql +-- 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题 + +```sql +-- 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) +); +-- +----------+--------------+------+-----+---------+----------------+ +-- | 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" ); +-- +----+-------------+------------+-------+-------+-------+----------------------------+ +-- | 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) +); +-- +----------+--------------+------+-----+---------+----------------+ +-- | 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" ); +-- +----+----------+----------------------------------+--------------------+ +-- | 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) +); +-- +--------------+--------------+------+-----+---------+-------+ +-- | 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); +-- +----------------+---------------------+-------------+--------------+-------+---------+ +-- | 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) +); +-- +----------+--------------+------+-----+---------+----------------+ +-- | 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"); +-- +----+-------+--------+---------+---------+-------+----------------+----------------+ +-- | 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 | +-- +----+-------+--------+------------+----------+-------+------------+----------------+ +-- ``` +``` + +# **笔记:** + +# **DDL** + +数据库的查看,当前用户登录后,可以看到哪些数据库 + +show databases; + +创建自己的数据库 + +create database [IF not EXISTS] 数据库名; + +例如: + +create database IF NOT EXISTS kunkun; + +删除数据库 + +DROP DATABASE [IF EXISTS] 数据库名称; + +例如: + +drop database if exists kunkun; + +查看某个数据库的详细定义 + +SHOW CREATE DATABASE 数据库名称; + +例如: + +show create database one; + +修改数据库的编码 + +ALTER DATABASE 数据库名 CHARACTER SET 新的字符集名称 COLLATE 校对规则; + +# 校对规则 可理解成排序规则 + +例如 + +alter database one charset utf8; + +一般先要指定在哪个数据库中对表进行操作 + +使用哪个数据库 + +USE 数据库名; + +use one; + +查看当前数据库下面,当前用户可以查看的表有哪些 + +show tables; + +# 在当前数据库下面,查看另一个数据库下面,当前用户可以查看的表有哪些 + +show tables from mxdx; + +创建表格 + +CREATE TABLE IF NOT EXISTS 表名称  ( + +   字段名1 数据类型, + +   字段名2 数据类型, + +   字段名3 数据类型 + +); + +表格:student + +学号,姓名,生日,成绩,性别,体重,手机号码 + +CREATE table student( + + id int, + + name VARCHAR(10), + + birthday date, + + score float(5,2), + + gender enum('男','女','保密'), + + weight double(5,2), + + tel char(11)   -- 最后一个字段,不写,号 + +); + +查看表结构 + +DESC 表名称; + +例如: + +desc student; + +查看表的详细定义 + +SHOW CREATE TABLE  表名称; + +例如: + +show create table student; + +删除表格 + +DROP TABLE IF EXISTS 表名称; + +例如: + +use mxdx; + +use one; + +drop table IF EXISTS test ; + +# 有关表的修改的各种操作 + +例如 + +修改表的字符集和校对规则 + +ALTER TABLE 表名称 CHARSET=新字符集 COLLATE=新校对规则; + +例如: + +alter table student charset=gbk; #  修改字符集编码,只能之后的操作有效。之前的影响不到 + +增加一个字段 + +ALTER TABLE 表名称 ADD COLUMN 字段名 数据类型; + +例如: + +alter table student add height float; + +删除一个字段 + +ALTER TABLE 表名称 DROP COLUMN 字段名; + +例如: + +alter table student drop sss; + +修改一个字段名称 + +ALTER TABLE 表名称 CHANGE 旧字段名称 新的字段名称 数据类型; + +例如: + +alter table student change tel telphone char(11); + +修改一个字段的数据类型 + +ALTER TABLE 表名称 MODIFY 字段名称 新数据类型; + +例如: + +alter table student modify height double(5,2); + +desc student; + +修改字段的位置,顺序 + +ALTER TABLE 表名称 MODIFY 字段名称 数据类型  AFTER 另一个字段; + +ALTER TABLE 表名称 MODIFY 字段名称 数据类型  FIRST; + +例如: + +alter table xueshen modify birthday date after id; # 放在id后面 + +alter table xueshen modify birthday date first; # 放在第一个 + +怎么放最后一个 + +alter table xueshen modify birthday date after height; + +重命名表 + +ALTER TABLE 表名称 RENAME TO 新名称; + +例如: + +alter table student rename to xueshen; + +SHOW tables;