diff --git "a/30 \351\203\255\350\213\245\346\230\225/20230213 MySQL\346\246\202\345\277\265.md" "b/30 \351\203\255\350\213\245\346\230\225/20230213 MySQL\346\246\202\345\277\265.md" new file mode 100644 index 0000000000000000000000000000000000000000..a27e5eaccc7e96cef6b4bb641bc33092bc3bee5e --- /dev/null +++ "b/30 \351\203\255\350\213\245\346\230\225/20230213 MySQL\346\246\202\345\277\265.md" @@ -0,0 +1,50 @@ +# 笔记 + + + +## 一、概念 + +1.数据库(DataBase,DB):存储和管理数据的仓库,是存储在计算机内有组织、可共享的数据和数据对象的集合。 + +2.数据库系统(DataDase System,DBS):是以计算机软硬件为工具,把数据组织成数据库形式并对其进行存储、管理、处理和维护的高效能的信息处理系统。 + +3.数据库管理系统(Database Managenment System,DBMS):是数据库系统的核心软件,是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。 + +4.SQL:结构化查询语言,人类通过该语言进行管理、运行DBMS。 + +其关系如下图 + +![image-20230225152525724](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230225152525724.png) + + + + + +## 二、安装与配置MySQL + +1.安装MySQL:在搜索引擎中搜索“MySQL官网”,进行下载并安装。 + +2.配置MySQL:在高级系统设置的环境变量中增加MySQL。 + +3.连接MySQL服务 + +(1)启动与停止MySQL服务:在任务管理器点击服务,启动或关闭MySQL;通过命令窗口启动或关闭 + +(2)连接MySQL服务器:登录MySQL数据库(mysql - h hostname - p 3306 - u username -p) + +## 三、字符集 + +1.字符集及字符序 + +(1)字符:人类语言最小的表义符号。对每个字符赋予一个数值,用这个数值来代表对应字符,这个数值就是字符编码。 + +(2)字符集:给字符并赋予对应编码后,所有的字符和编码对组成的集合就是字符字符集。 + +(3)字符序:同一字符集内字符间的比较规则(ci:表示大小写不敏感,cs:大小写敏感)。 + +2.修改数据库字符集 + +(1)修改数据库字符集:alter database 库名 default character set + +(2)修改表名字符集:alter table 表名 convert to character set + diff --git "a/30 \351\203\255\350\213\245\346\230\225/20230215 \345\273\272\345\272\223\345\273\272\350\241\250.md" "b/30 \351\203\255\350\213\245\346\230\225/20230215 \345\273\272\345\272\223\345\273\272\350\241\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..3fd70d35ec15018028ac62263409ea81446592ee --- /dev/null +++ "b/30 \351\203\255\350\213\245\346\230\225/20230215 \345\273\272\345\272\223\345\273\272\350\241\250.md" @@ -0,0 +1,51 @@ +# 笔记 + +建库并设置字符集 + +```sql +create database 库名 charset utf8; +``` + +用库 + +```sql +use 库名; +``` + +建表 + +```sql +create table 表名 (); +``` + +插入数据 + +```sql +insert into 表名(字段1,字段2...) values(数据) +``` + + + +# 作业 + +```sql + +-- 建数据库class3 +create database class3 charset utf8; +-- 建表student +-- 字段:学号,姓名,性别,爱好,住址,联系方式,邮箱,QQ号 +use class3; +create table student( + id int, + name varchar(6), + sex enum('男','女'), + hobby set('唱歌','跳舞','画画'), + address varchar(100), + phone char(11), + email varchar(25), + qq varchar(20) +); +-- 并新增一条自己的记录。 +insert into student values (30,'郭若昕','女','唱歌','闽西职业技术学院',12345678910,10987654321,3692581470); +``` + diff --git "a/30 \351\203\255\350\213\245\346\230\225/20230216 DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" "b/30 \351\203\255\350\213\245\346\230\225/20230216 DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..7b1c06b3ae39783ee0e2cbeec2c7604d94dc3560 --- /dev/null +++ "b/30 \351\203\255\350\213\245\346\230\225/20230216 DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" @@ -0,0 +1,390 @@ +# 笔记 + +## 一、DDL + +### 数据库 + +建库 + +```sql +create database 数据库名 ; +create database 数据库名 charset 字符集; +``` + +查看库 + +```sql +show database(s);#有一个s,代表多个数据库 +``` + +用库 + +```sql +use 库名; +``` + +查看库的详细定义语句 + +```sql +show create database 数据库名; +show create database 数据库名\G +``` + +修改库字符集和校对规则 + +```sql +ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称 COLLATE 字符集对应校对规则; +``` + +删除库 + +```sql +drop database 库名; +``` + + + +### 数据表 + +查看表 + +```sql +use 库名; +show table(s);#有一个s,代表多个数据表 + +show tables from 库名 +``` + +建表 + +```sql +create table 表名(数据) +``` + +查看表详细定义语句 + +```sql +show create table 表名称; +show create table 表名称\G +``` + +修改表的详细定义语句 + +```sql +alter table 表名称 convert to character set utf8; +``` + +查看表结构 + +```sql +desc 表名称; +``` + +删除表 + +```sql +drop table 表名称; +``` + +修改表结构:删除字段 + +```sql +alter table 表名称 drop 【column】 字段名称; +``` + +修改表结构:增加字段 + +```sql +alter table 表名称 add 【column】 字段名称 数据类型; +alter table 表名称 add 【column】 字段名称 数据类型 first; +alter table 表名称 add 【column】 字段名称 数据类型 after 另一个字段; +``` + +修改表结构:修改字段的数据类型 + +```sql +alter table 表名称 modify 【column】 字段名称 新的数据类型; +``` + +修改表结构:修改字段的名称 + +```sql +alter table 表名称 change 【column】 旧字段名称 新的字段名称 新的数据类型; +``` + +修改表结构:修改字段位置 + +```sql +alter table 表名称 modify 【column】 字段名称 数据类型 first; +alter table 表名称 modify 【column】 字段名称 数据类型 after 另一个字段; +``` + +修改表名称 + +```sql +alter table 旧表名 rename 【to】 新表名; +rename table 旧表名称 to 新表名称; +``` + + + +## 二、DML + +### 添加语句 + + 值列表中的值的顺序、类型、个数必须与表结构一一对应!!! + +```sql +insert into 表名称 values(值列表); +insert into 表名称 (字段列表) values(值列表); +insert into 表名称 values(值列表),(值列表),(值列表); +``` + +### 修改语句 + +```sql +update 表名称 set 字段名 = 值, 字段名 = 值; #给所有行修改 +update 表名称 set 字段名 = 值, 字段名 = 值 where 条件; #给满足条件的行修改 +``` + +### 删除 + +```sql +delete from 表名称 where 条件; #删除部分行的数据 +delete from 表名称; #删除整张表的数据,但表结构留下 +truncate 表名称; #截断表,清空表中的数据,只留有表结构 +``` + +truncate表和delete表的区别: + +delete是一条一条删除记录的。如果在事务中,支持回滚。 + +truncate是把整个表drop,新建一张,效率更高。就算在事务中,也无法回滚。 + +# 作业 + +```sql + +-- ## 第1题 +-- 1、创建数据库test01_market +create database test01_market; + +-- 2、创建表格customers + +| -- | 字段名 | 数据类型 | +| ----------------------- | --------- | ----------- | +| -- | c_num | int(11) | +| -- | c_name | varchar(50) | +| -- | c_contact | varchar(50) | +| -- | c_city | varchar(50) | +| -- | c_birth | date | +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 +); +-- **要求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_num 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 to customers_info; + +-- **要求8:**删除字段c_city +ALTER table customers_info drop c_city; + + + + +-- ## 第2题 +-- 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(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 + + + + + + +-- ## 第3题 +-- 1、创建数据库test03_bookstore +create database test03_bookstore charset utf8; + +-- 2、创建book表 +-- +----------+--------------+------+-----+---------+----------------+ +-- | 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 | | +-- +----------+--------------+------+-----+---------+----------------+ +use test03_bookstore; +drop database test03_bookstore; +create table book( + id int(11) 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 +); +-- 尝试添加部分模拟数据,参考示例如下: +-- +----+-------------+------------+-------+-------+-------+----------------------------+ +-- | 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(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,并插入数据 +-- +----------+--------------+------+-----+---------+----------------+ +-- | 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 | | +-- +----------+--------------+------+-----+---------+----------------+ +-- 尝试添加部分模拟数据,参考示例如下: +-- +----+----------+----------------------------------+--------------------+ +-- | id | username | password | email | +-- +----+----------+----------------------------------+--------------------+ +-- | 1 | admin | 112233 | admin@mxdx.com | +-- +----+----------+----------------------------------+--------------------+ +create table users( + id int(11) primary key auto_increment, + username varchar(100) unique key, + password varchar(100) not null, + email varchar(100) +); +insert into users values(1,'admin',112233,'admin@mxdx.com') + +-- 4、创建订单表orders +-- +--------------+--------------+------+-----+---------+-------+ +-- | 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 | | +-- +--------------+--------------+------+-----+---------+-------+ +-- 尝试添加部分模拟数据,参考示例如下: +-- +----------------+---------------------+-------------+--------------+-------+---------+ +-- | id | order_time | total_count | total_amount | state | user_id | +-- +----------------+---------------------+-------------+--------------+-------+---------+ +-- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | +-- +----------------+---------------------+-------------+--------------+-------+---------+ +create table orders( + id varchar(100) 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 +); +insert into orders values (15294258455691,'2018-06-20 00:30:45',2,50.20,0,1); + +-- 5、创建订单明细表order_items +-- +----------+--------------+------+-----+---------+----------------+ +-- | 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 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 +); +-- 尝试添加部分模拟数据,参考示例如下: +-- +----+-----+-------+----------+----------+-------+-----------------------+----------------+ +-- | 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/30 \351\203\255\350\213\245\346\230\225/20230220 \347\272\246\346\235\237.md" "b/30 \351\203\255\350\213\245\346\230\225/20230220 \347\272\246\346\235\237.md" new file mode 100644 index 0000000000000000000000000000000000000000..5d93cc2d0a140e8cde18a38c8b663adf1919a099 --- /dev/null +++ "b/30 \351\203\255\350\213\245\346\230\225/20230220 \347\272\246\346\235\237.md" @@ -0,0 +1,608 @@ +# 笔记 + +## 主键约束 + +1.作用:用来唯一的确定一条记录 + +2.关键字:primary key + +3.特点 + +(1)唯一并且非空 + +(2)一个表最多**只能有一个**主键约束 + +(3)如果主键是由多列组成,可以使用复合主键 + +4.使用主键约束 + +```sql +create table 表名称( + 字段名 数据类型 primary key, + 字段名 数据类型, + 字段名 数据类型 +); + + +-- 复合主键 +create table 表名称( + 字段名 数据类型, + 字段名 数据类型, + 字段名 数据类型, + primary key(字段名) +); +``` + + + + + +## 唯一键约束 + +1.作用 + +单列唯一:用来限制某个字段/某列的值不能重复。 + +组合唯一:用来限定几个字段的值组合不能重复。 + +2.关键字:unique key + +3.特点 + +(1)一个表可以有**很多个**唯一键约束。 + +(2)每一个唯一键约束字段都会自动创建索引。 + +(3)唯一键约束允许为空 + +(4)唯一键约束也可以是复合唯一 + +(5)删除唯一键约束的索引来删除唯一键约束(索引名默认是字段名,复合唯一默认是第一个字段名)。 + +4.使用唯一键约束 + +```sql +create table 表名称( + 字段名 数据类型 unique key, +); + + +-- 复合唯一 +create table 表名称( + 字段名 数据类型, + 字段名 数据类型, + 字段名 数据类型, + unique key(字段列表) #字段列表中写的是多个字段名,多个字段名用逗号分隔,表示那么是复合唯一,即多个字段的组合是唯一的 +); +``` + + + + + +## 非空约束 + +1.作用:限定某个字段/某列的值不允许为空。 + +2.关键字:not null + +3.特点:一个表可以有很多列都分别限定了非空 + +4.使用非空约束 + +```sql +create table 表名称( + 字段名 数据类型 not null, +); +``` + + + + + +## 默认值约束 + +1.作用:给某个字段/某列指定默认值,当添加时或修改时,可以使用默认值 + +2.关键字:default + +3.使用默认值约束 + +```sql +create table 表名称( + 字段名 数据类型 primary key, + 字段名 数据类型 unique key not null, + 字段名 数据类型 unique key, + 字段名 数据类型 not null default 默认值, +); +create table 表名称( + 字段名 数据类型 default 默认值 , + 字段名 数据类型 not null default 默认值, + 字段名 数据类型 not null default 默认值,, + primary key(字段名), + unique key(字段名) +); + +-- 说明:默认值约束一般不在唯一键和主键列上加 +``` + + + + + +## 自增属性 + +1.作用:给某个字段自动赋值,这个值是一直往上增加,如果没有特意干扰的,每次自增1. + +2.关键字:auto_increment + +3.特点和要求 + +(1)一个表只能有一个自增字段,因为一个表只有一个AUTO_INCREMENT属性记录自增字段值 + +(2)并且自增字段只能是key字段,即定义了主键、唯一键等键约束的字段。一般都是给主键和唯一键加自增。 + +(3)自增字段应该是数值类型,一般都是整数类型。 + +(4)AUTO_INCREMENT属性值 必须 > 当前自增字段的最大值 + +(5)如果自增列指定了 0 和 null,会在当前最大值的基础上自增,如果自增列手动指定了具体值,直接赋值为具体值。 + +4.使用自增约束 + +```sql +create table 表名称( + 字段名 数据类型 primary key auto_increment, + 字段名 数据类型 unique key not null, +); +``` + + + + + +## 检查约束 + +1.作用:用于限制字段中的值的范围。 + +2.关键字:check + +3.使用检查约束 + +```sql +#在建表时,可以指定检查约束 +create table 表名称( + 字段名1 数据类型 check(条件), #在字段后面直接加检查约束 + 字段名2 数据类型, + 字段名3 数据类型, + check (条件) #可以限定两个字段之间的取值条件 +); +``` + + + + + +## 外键约束 + +1.作用:限定某个表的某个字段的引用完整性。 + +2.关键字:foreign key + +3.特点 + +(1)在“从表”中指定外键约束,并且一个表可以建立多个外键约束 + +(2)创建(create)表时就指定外键约束的话,先创建主表,再创建从表 + +(3)删表时,先删从表(或先删除外键约束),再删除主表 + +(4)从表的外键列,必须引用/参考主表的键列(主键或唯一键) + +为什么?因为被依赖/被参考的值必须是唯一的 + +(5)从表的外键列的数据类型,要与主表被参考/被引用的列的数据类型一致,并且逻辑意义一致。 + +例如:都是表示部门编号,都是int类型。 + +(6)外键列也会自动建立索引(根据外键查询效率很高,很多) + +(7)外键约束的删除,所以不会自动删除,如果要删除对应的索引,必须手动删除 + +4.使用外键约束 + +```sql +create table 主表名称( + 字段1 数据类型 primary key, + 字段2 数据类型 +); + +create table 从表名称( + 字段1 数据类型 primary key, + 字段2 数据类型, + foreign key (从表的某个字段) references 主表名(被参考字段) +); +#(从表的某个字段)的数据类型必须与主表名(被参考字段)的数据类型一致,逻辑意义也一样 +#(从表的某个字段)的字段名可以与主表名(被参考字段)的字段名一样,也可以不一样 +``` + + + +# 作业 + +## 第1题 + +1、创建数据库test01_company + +```sql +create database test01_company charset utf8; +``` + +2、创建表格offices + +```sql +use test01_company; +``` + + + +| 字段名 | 数据类型 | +| ---------- | ----------- | +| officeCode | int | +| city | varchar(30) | +| address | varchar(50) | +| country | varchar(50) | +| postalCode | varchar(25) | + +```sql +create table offices( +officeCode int, +city varchar(30), +address varchar(50), +country varchar(50), +postalCode varchar(25) +); +``` + +3、创建表格employees + +| 字段名 | 数据类型 | +| ------------- | ---------------------------- | +| empNum | int(11) | +| lastName | varchar(50) | +| firstName | varchar(50) | +| mobile | varchar(25) | +| code | int | +| jobTitle | varchar(50) | +| birth | date | +| Note | varchar(255) | +| Sex | varchar(5) | + +```sql +use test01_company; + +create table employees( +empNum int(11), +lastName varchar(50), +firstName varchar(50), +mobile varchar(25), +code int, +jobTitle varchar(50), +birth date, +Note varchar(255), +Sex varchar(5) +); +``` + +**要求4:**将表employees的mobile字段修改到code字段后面。 + +```sql +alter table employees modify mobile varchar(25) after code; +``` + +**要求5:**将表employees的birth字段改名为birthday; + +```sql +alter table employees change birth birthday date; +``` + +**要求6:**修改sex字段,数据类型为char(1)。 + +```sql +alter table employees modify sex char(1); +``` + +**要求7:**删除字段note; + +```sql +alter table employees drop Note; +``` + +**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); + +```sql +alter table employees add column favoriate_activity varchar(100); +``` + +**要求9:**将表employees的名称修改为 employees_info + +```mysql +alter table employees rename to employees_info; +``` + + + +## 第2题 + +1、创建数据库test02db + +```sql +create database test02db charset utf8; +USE test02db; +``` + +2、创建表格pet + +| 字段名 | 字段说明 | 数据类型 | +| ------- | -------- | ----------- | +| name | 宠物名称 | varchar(20) | +| owner | 宠物主人 | varchar(20) | +| species | 种类 | varchar(20) | +| sex | 性别 | char(1) | +| birth | 出生日期 | year | +| death | 死亡日期 | year | + +```sql +create table pet( + name varchar(20) comment '宠物名称', + owner varchar(20) comment '宠物主人', + species varchar(20) comment '种类', + sex char(1) comment '性别', + birth year comment '出生日期', + death year comment '死亡日期' +); +``` + +3、添加记录 + +| name | owner | species | sex | birth | death | +| ------ | ------ | ------- | ---- | ----- | ----- | +| Fluffy | harold | Cat | f | 2003 | 2010 | +| Claws | gwen | Cat | m | 2004 | | +| Buffy | | Dog | f | 2009 | | +| Fang | benny | Dog | m | 2000 | | +| bowser | diane | Dog | m | 2003 | 2009 | +| Chirpy | | Bird | f | 2008 | | + +```sql +insert into pet values ('Fluffy','harold','Cat','f',2003,2010),('Claws','gwen','Cat','m',2004,null),('Buffy',null,'Dog','f',2009,null),('Fang','benny','Dog','m',2000,null),('bowser','diane','Dog','m',2003,2009),('Chirpy',null,'Bird','f',2008,null); +``` + +4、 添加字段主人的生日owner_birth。 + +```sql +alter table pet add owner_birth year; +``` + +5、 将名称为Claws的猫的主人改为kevin + +``` +update pet set owner='kevin' where name='Claws'; +``` + +6、 将没有死的狗的主人改为duck + +``` +update pet set owner='duck' where death is Null; +``` + +7、 查询没有主人的宠物的名字; + +```sql +select name from pet where owner is null; +``` + +8、 查询已经死了的cat的姓名,主人,以及去世时间; + +```sql +select name ,owner, death from pet where death is not null and species='Cat'; +``` + +9、 删除已经死亡的狗 + +```sql +delete from pet where death is not null ; +``` + +10、查询所有宠物信息 + +```sql +select *from pet; +``` + + + + + + + +## 第3题 + +1、创建数据库:test03_company + +```sql +create database test03_company charset utf8; +``` + +2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 + +A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 + +```mysql +use test03_company ; +create table department( + depid int primary key auto_increment, + depname char(10) not null unique key, + deinfo varchar(200) +) +``` + +B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 + +* ​ 雇员编号为主键; +* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); +* ​ 性别默认为男; + +```mysql +create table employee ( + empid int primary key auto_increment, + name varchar(10) not null, + sex enum('男','女') not null default '男', + title varchar(10), + birthday date, + depid int foreign key references department(depid)on update cascade on delete set null +); +``` + +C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 + +3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) + +```sql +create table salary( + empid int primary key auto_increment, + basesalary int, + titlesalary int , + dascade int, + foreign key(empid) references employee(empid)on update cascade on delete cascade +); +``` + +4、添加数据如下: + +部门表: + +| 部门编号 | 部门名称 | 部门简介 | +| -------- | -------- | ------------ | +| 111 | 生产部 | Null | +| 222 | 销售部 | Null | +| 333 | 人事部 | 人力资源管理 | + +```sql +insert into department values (111,'生产部',null),(222,'销售部',null),(333,'人事部','人力资源管理'); +``` + + 雇员表: + +| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | +| -------- | ---- | ---- | ---------- | ---------- | ------------ | +| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | +| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | +| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | +| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | + +```sql +insert into employee values (1001,'张三','男','高级工程师','1975-1-1',111),(1002,'李四','女','助工','1985-1-1',111),(1003,'王五','男','工程师','1978-11-11',222),(1004,'张六','男','工程师','1999-1-1',222); +``` + + 工资表: + +| 雇员编号 | 基本工资 | 职务工资 | 扣除 | +| -------- | -------- | -------- | ---- | +| 1001 | 2200 | 1100 | 200 | +| 1002 | 1200 | 200 | NULL | +| 1003 | 2900 | 700 | 200 | +| 1004 | 1950 | 700 | 150 | + +```sql +insert into salary values (1001,2200,1100,200),(1002,1200,200,null),(1003,2900,700,200),(1004,1950,700,150); +``` + + + +## 第4题 + +1、创建一个数据库:test04_school + +```sql +create database test04_school charset utf8; +use test04_school; +``` + +2、创建如下表格 + +表1 Department表的定义 + +| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | +| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | +| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | +| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | +| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | + +```sql +create table Department( + DepNo int primary key not null auto_increment comment '部门号' , + DepName varchar(20)not null comment '部门名称', + DepNote varchar(50) comment '部门备注' +); +``` + +表2 Teacher表的定义 + +| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | +| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | +| Number | 教工号 | int | 是 | 否 | 是 | 是 | +| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | +| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | +| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | +| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | +| Salary | 工资 | float | 否 | 否 | 否 | 否 | +| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | + +```sql +create table Teacher( + Number int not null primary key auto_increment comment '教工号' , + Name varchar(30)not null comment'姓名', + sex varchar(4)comment'性别', + Birth date comment'出生日期', + depNo int comment'部门号', + Salary float comment'工资', + Address varchar(100), + foreign key(DepNo) references Department(DepNo) +) +``` + +3、添加记录 + +| **DepNo** | **DepName** | **DepNote** | +| --------- | ----------- | ------------------ | +| 601 | 软件技术系 | 软件技术等专业 | +| 602 | 网络技术系 | 多媒体技术等专业 | +| 603 | 艺术设计系 | 广告艺术设计等专业 | +| 604 | 管理工程系 | 连锁经营管理等专业 | + +| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | +| ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | +| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | +| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | +| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | +| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | +| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | + +```sql +insert into Department values(601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),(604,'管理过程系','连锁经营管理等专业'); + +insert into Teacher values(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),(2004,'James','女','1980-10-20',602,3500,'四川省成都市'),(2005,'Jack','男','1975-05-30',603,1500,'重庆市南岸区'); + +``` + +4、用SELECT语句查询Teacher表的所有记录。 + +```mysql +select *from Teacher; +``` + + + + + diff --git "a/30 \351\203\255\350\213\245\346\230\225/20230222 \345\237\272\347\241\200\346\237\245\350\257\242\344\270\216\350\277\220\347\256\227\347\254\246\344\275\234\344\270\232.md" "b/30 \351\203\255\350\213\245\346\230\225/20230222 \345\237\272\347\241\200\346\237\245\350\257\242\344\270\216\350\277\220\347\256\227\347\254\246\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..77215d62f9ebed08b62dce01bdef17f932a358fa --- /dev/null +++ "b/30 \351\203\255\350\213\245\346\230\225/20230222 \345\237\272\347\241\200\346\237\245\350\257\242\344\270\216\350\277\220\347\256\227\347\254\246\344\275\234\344\270\232.md" @@ -0,0 +1,279 @@ +# 一、笔记 + +## 查询 + +### 基本语法 + +```sql +SELECT 常量; +SELECT 表达式; +SELECT 函数; +``` + +### 查询数据表 + +```sql +select * from 表名;#查询所有字段 +select 字段1,字段2...from 表名;#查询指定字段 +select distinct 字段名 from 表名;#结果去重 +``` + +### 条件查询 + +```sql +select 字段1,字段2 from 表名 where 条件 +``` + + + +### 设置别名 + +```sql +select 字段名1 as 别名1, 字段名2 as 别名2 from 表名称 as 别名; +``` + + + +### 模糊查询 + +%:代表任意个字符 + +_:代表一个字符,如果两个下划线代表两个字符 + +```sql +#查询名字中包含'冰'字 +select * from t_employee where ename like '%冰%'; + +#查询名字以‘雷'结尾的 +select * from t_employee where ename like '%远'; + +#查询名字以’李'开头 +select * from t_employee where ename like '李%'; + +#查询名字有冰这个字,但是冰的前面只能有1个字 +select * from t_employee where ename like '_冰%'; +``` + + + +## 运算符 + +### 算术运算符 + +加:+(在MySQL +就是求和,没有字符串拼接) +减:- +乘:* +除:/(保留小数) div(只保留整数部分) +模:% mod + +【mysql中没有 +=等运算符】 + +### 比较运算符 + +大于:> +小于:< +大于等于:>= +小于等于:>= +等于:= 不能用于null判断 +不等于:!= 或 <> 不能用于null判断 +判断是null 用 is null 或 用 <=> null +判断不是null 用 is not null + +### 区间或集合范围比较运算符 + +```sql +#区间范围 +between 字段1and 字段2 +not between x and y +#集合范围 +in (x,x,x) +not in(x,x,x) +#结果包含两端的边界 +between ... and ... +``` + +### 逻辑运算符 + +```sql +逻辑与:&& 或 and +逻辑或:|| 或 or +逻辑非:! 或 not +逻辑异或: xor +``` + + + +# 二、作业 + +## 第1题:员工表 + +```mysql +drop table if exists `employee`; +#创建employee表 +CREATE TABLE employee( + id INT, + `name` VARCHAR(20), + sex VARCHAR(20), + tel VARCHAR(20), + addr VARCHAR(50), + salary FLOAT +); + +#添加信息 +INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES +(10001,'张一一','男','13456789000','广东韶关',10010.58), +(10002,'刘小红','女','13454319000','广东江门',12010.21), +(10003,'李四','男','0751-1234567','广东佛山',10040.11), +(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), +(10005,'王艳','男',NULL,'广东广州',14050.16); +``` + + + +| **id** | **name** | **sex** | **tel** | **addr** | **salary** | +| ------ | -------- | ------- | ------------ | -------- | ---------- | +| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | +| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | +| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | +| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | +| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | + +**要求1:**查询出薪资在12000~13000之间的员工信息。 + +```sql +select * from employee where salary between 12000 and 13000; +``` + +**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 + +```sql +select id,name,addr from employee where name like '刘%' +``` + +**要求3:**将“李四”的家庭住址改为“广东韶关” + +```sql +update employee set addr = '广东韶关' where name = '李四'; +``` + +**要求4:**查询出名字中带“小”的员工 + +```sql +select * from employee where name like '%小%'; +``` + +**要求5:**查询出薪资高于11000的男员工信息 + +```sql +select * from employee where salary >11000 and sex = '男'; +``` + +**要求6:**查询没有登记电话号码的员工 + +```sql +select * from employee where tel is null; +``` + +**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 + +```sql +select * from employee where salary >12000 and sex = '男' or addr ='广东深圳'or '广东广州'; +``` + +**要求8:**查询每个员工的年薪,显示“姓名、年薪” + +```mysql +select name,salary from employee; +``` + +## 第2题:国家信息表 + +countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 + +```mysql +DROP TABLE IF EXISTS `countries_info`; +CREATE TABLE `countries_info`( + `name` VARCHAR(100), + `continent` VARCHAR(100), + `area` INT, + population INT, + gdp BIGINT +); + +INSERT INTO countries_info VALUES +('Afghanistan','Asia',652230,25500100,20343000000), +('Albania','Europe',28748,2831741,12960000000), +('Algeria','Africa',2381741,37100000,188681000000), +('Andorra','Europe',468,78115,3712000000), +('Angola','Africa',1246700,20609294,100990000000); +``` + +表数据样例: + +```mysql ++-------------+-----------+---------+------------+--------------+ +| name | continent | area | population | gdp | ++-------------+-----------+---------+------------+--------------+ +| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | +| Albania | Europe | 28748 | 2831741 | 12960000000 | +| Algeria | Africa | 2381741 | 37100000 | 188681000000 | +| Andorra | Europe | 468 | 78115 | 3712000000 | +| Angola | Africa | 1246700 | 20609294 | 100990000000 | ++-------------+-----------+---------+------------+--------------+ +``` + +**要求1:** 查询大国 的国家名称、人口和面积。 + +如果一个国家满足下述两个条件之一,则认为该国是 大国 : + +- 面积至少为 300万平方公里(即,3000000 km2) +- 人口至少为 2500 万(即 25000000) + +```sql +select name,population,area from countries_info where area >=3000000 or population >= 25000000; +``` + +**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 + +```sql +select * from countries_info where continent = 'Asia'; +``` + +**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 + +```sql +select * from countries_info where area < 10000 and population < 1000000; +``` + +**要求4:**查询国家名字中包含“o“字母的国家信息 + +```sql +select * from countries_info where name like '%o%'; +``` + +**要求5:**查询GDP值超过10000000000的国家信息 + +```sql +select * from countries_info where gdp >10000000000; +``` + +**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” + +```sql +select name,population,gdp,gdp/population from countries_info; +``` + +**要求7:**查询人均贡献GDP值低于1000的国家信息。 + +```sql +select * from countries_info where gdp/population < 1000; + + +``` + +**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” + +```mysql +select name,area,population,area/population from countries_info; +``` + diff --git "a/30 \351\203\255\350\213\245\346\230\225/20230223 \347\263\273\347\273\237\351\242\204\345\256\232\344\271\211\345\207\275\346\225\260.md" "b/30 \351\203\255\350\213\245\346\230\225/20230223 \347\263\273\347\273\237\351\242\204\345\256\232\344\271\211\345\207\275\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..582b753e6acb11132c3fe0f768ae6f7be22dfdc5 --- /dev/null +++ "b/30 \351\203\255\350\213\245\346\230\225/20230223 \347\263\273\347\273\237\351\242\204\345\256\232\344\271\211\345\207\275\346\225\260.md" @@ -0,0 +1,127 @@ +# 笔记 + +## 函数简介 + +1、作用:对传递进来的参数进行处理,并返回一个处理结果,也就是返回一个值。 + +2、分类 + +(1)系统预定义函数 + +A.作用:由数据库提供的内部函数,帮助用户更便捷的处理表中数据。 + +B.分类 **分组函数**(聚合函数):对表中的多行记录一起做一个“运算”,得到一个结果。 + +​ **单行函数**:对表中的每一行记录分别计算。 + +(2)用户自定义函数:由用户通过CREATE FUNCTION语句定义。 + + + + + +## 分组函数 + +```sql +查询指定列的最大值: max(); +查询指定列的最小值: min(); +统计查询结果的行数: count(); +求和,返回指定列的总和: sum(); +求平均值,返回指定列的平均值: avg(); +``` + + + +## 单行函数 + +### 数学函数 + +```sql +select abs(n); #返回n的绝对值 +select ceiling(n); #返回不小于n的最小值整数 +select floor(n); #返回不大于n的最大值整数 +select mod(n,m); #返回n被m除的余数 +select rand(n);#返回范围0-1.0间的随机浮点值,n可作为初始值 +select round(n,m);#返回参数n的四舍五入的有m位的小数的值 +select truncate(n,m);#返回数字x截断为y位小数的结果 +select format(n,m);#强制保留小数点后y位,整数部分超过三位的时候以逗号分割,并且返回的结果是文本类型的 +select aqrt(n);#返回x的平方根 +select pow(n,m);#返回x的y次方 +...... + +``` + + + +### 字符串 + +```sql +select bit-length(); #返回字符串的长度 +select conv(n,from_base,to_base); #进制转换函数 +select concat(strl1,str2,...); #字符串合并函数 +select locate(substr,str); #求字符串位置函数 +select left(str,len); #取字符串函数 +...... +``` + + + +### 函数日期和时间函数 + +```sql +select dayofweek(date);#返回日期是星期几 +select dayofmonth(date);#返回日期是一月中的第几日 +select dayofyear(date);#返回日期是一年的第几日 +select weekday(date);#返回日期是星期几 +select week(date,first);#返回日期是一年的第几周 +..... +``` + + + +### 加密函数 + +```sql +-- 返回以密匙key对字符串str利用高级加密标准算法加密后的结果 +select ace_encrypt(str,key);#二进制字符串,以blob类型存储 +select ace_decrpy(str,key); +select encode(str,key); +select decode(str,key); +-- 使用UNIXcrypt()函数,用关键字salt加密字符串 +select encryrpt(str,salt); +``` + + + +### 系统信息函数 + +```sql +select user()#返回当前登录用户名 +select database()#返回默认值或当前数据库名称 +select version()#返回MySQL服务器的版本 +select benchmark(cont,expr)#将表达式expr重复运行count次 +select connection_id()#返回当前客户的连接id +select found_rows()#返回最后一个select查询进行检索的总行数 +``` + + + + + +### 条件判断函数 + +```sql +select IF(value,t,f);#如果value是真,返回t,否则返回f +select IFNULL(value1,value2);#如果value1不为空,返回value1,否则返回value2 +select CASE WHEN 条件1 THEN result1 WHEN 条件2 THEN result2 … ELSE resultn END;#哪个条件满足了,就返回对应的result,所有条件都不满足就返回ELSE的result。当所有WHEN后面的条件都不满足时则返回NULL值结果。 +select CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值2 THEN 值2 … ELSE 值n END;#找到匹配的就返回对应值,都不匹配就返回ELSE的值。当所有WHEN后面的常量值都不匹配时则返回NULL值结果。 +``` + + + +### 其他函数 + +1.格式化函数 + +2.锁函数 +