当前位置: 首页 > news >正文

<MySQL——L2>

<MySQL——L2>

文章目录

  • <MySQL——L2>
    • 1.DDL(Data Define Language )数据定义语言
      • 1.1库的管理
      • 1.2数据类型
      • 1.3表的管理
      • 1.4完整性约束
    • 2.DML(Data Manipulation Language)数据操作语言

1.DDL(Data Define Language )数据定义语言

1.1库的管理

-- DDL:Data Define Language 数据定义语言,用于对数据库和表的管理和操作 create / drop / alter / desc########### 库的管理 ############
-- 1.查看所有的数据库
show databases;-- 2.切换数据库
use hero;
select * from employees;  --  1146 - Table 'hero.employees' doesn't exist-- 3.查看当前正在使用的数据库
select database();-- 4.创建数据库
-- 语法:create database if not EXISTS 数据库名称;
create database if not EXISTS test;
create database if not EXISTS test2509;-- 5.删除数据库
-- 语法:drop database if EXISTS 数据库名称;
drop database if EXISTS test2500;
drop database if EXISTS test2509;

1.2数据类型

-- DDL:Data Define Language 数据定义语言,用于对数据库和表的管理和操作 create / drop / alter / desc########### 数据类型 #############-------- 1.数据类型-数值型 ---------#
/*一、数值型1.int:整型,默认长度是11,int(11),此处的11指的是出现数据的长度2.double/float:浮点数类型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;3.decimal:定点数类型,在表示钱方面使用该类型,因为不会出现精度缺失问题;二、注意①.浮点数和定点数都可以用类型名称后加“(M,D)”的方式来表示。M:精度 ,该值的整数位+小数位一共显示M位数字D:标度, 小数位数一共显示D位数字,如果不够后面用0补齐,如果超过,则四舍五入②.浮点数和定点数的区别:a) 定点数在MySQL内部以“字符串”形式存放,比浮点数更精确,适合用于表示货币等精度高的数据;b) 在不指定精度时,浮点数默认会按照实际的精度来显示,而定点数在不指定精度时,默认M=10,D=0;三、使用场景1.int类型,整型,例如:学号、年龄,自增的主键 等字段2.double/float类型,浮点型,例如:成绩、薪资、提成等字段3.decimal类型,定点型,例如:余额、透支额,涉及到小数位较长、精确度要求较高等字段
*/
-- 删除表结构
-- #语法:drop table if EXISTS 表名;
-- 创建表结构
-- #语法:create table if not EXISTS 表名(字段名1 字段类型 , 字段名2 字段类型 ,....);
-- 插入数据
-- #语法:insert into 表名 values(值1,值2,....);drop table if EXISTS test;
create table if not EXISTS test(c1 int(11) UNSIGNED,     -- 整型 默认int(11),此处11指的是允许写数值长度为11位,int占4个字节   UNSIGNED无符号限制只能是正数c2 double(5,2), -- 浮点型 有效位数是5,小数点位数2,即最大值999.99  四舍五入c3 float(6,2),  -- 浮点型 有效位数是6,小数点位数2,即最大值9999.99 四舍五入c4 decimal(10,1)-- 定点型 默认decimal(10,0) 精度M=10 标度D=0
);insert into test values(-111,999.99,9999.99,8888.8);
insert into test values(111,999.99,9999.99,8888.8);-- 1264 - Out of range value for column 'c2' at row 1  四舍五入 999.995 -> 1000.00
insert into test values(111,999.995,9999.99,8888.8);
-- 四舍五入 999.994 -> 999.99
insert into test values(111,999.994,9999.99,8888.8);-- 1264 - Out of range value for column 'c1' at row 1
insert into test values(111111111112,999.99,9999.99,8888.8);select * from test;#-------- 2.数据类型-字符型 ---------#
/*一、字符型1.char:   固定长度字符串类型;char(n)    n范围是0-255之间的整数2.varchar:可变长度字符串类型;varchar(n) n范围是0~65535之间的整数3.text:字符串类型;表示存储较长文本二、特点char1.固定长度字符串类型,建表时多长实际就占多长2.声明时,可以不指定长度,默认char(1)3.char(n)    n范围是0-255之间的整数4.插入数据时,若末尾有空格,会自动去除空格5.使用场景:性别、状态、标识等varchar1.可变长度字符串类型,会根据实际插入的数据长度进行占用2.声明时,必须指定长度3.varchar(n) n范围是0~65535之间的整数4.插入数据时,若末尾有空格,不会自动去除空格,保留空格5.使用场景:姓名、手机号、地址等text1.字符串类型;表示存储较长文本2.使用场景:描述、评价、评论等
*/
drop table if EXISTS test;
create table if not EXISTS test(c1 char(9),c2 varchar(9),c3 text
);insert into test values('abc','abc','aaabbbccc');insert into test values('   abc   ','   abc   ','aaabbbccc');
insert into test values('abc   ','abc   ','aaabbbccc');select * from test;
-- 测试对末尾空格的敏感度
select concat('###',c1,'###') , concat('###',c2,'###') from test;
select length(c1) , length(c2) from  test;#------- 3.数据类型-时间类型 --------#
/*一、时间类型date:日期类型,格式为:yyyy-MM-dd;time:时间类型,格式为:hh:mm:ssdatetime: 日期+时间 格式为:yyyy-MM-dd hh:mm:ss 或者 yyyyMMddhhmmsstimestamp:时间戳类型;(除非自己写入数据,否则将直接获取当前平台时间进行写入)二、使用场景date:日期类型,例如:生日、入职日期等datetime:日期于时间类型,例如:生产日期、入库和出库时间、记录的创建和更新时间等
*/
drop table if EXISTS test;
create table if not EXISTS test(c1 date,c2 time,c3 datetime,c4 timestamp DEFAULT CURRENT_TIMESTAMP  -- 设置默认值为当前系统时间 CURRENT_TIMESTAMP
);desc test;insert into test values(now() , now() , now() , now());
insert into test(c1) values('2025-12-12');
insert into test(c2) values('12:12:12');
insert into test(c3) values('2025-12-12 12:12:12'); -- yyyy-MM-dd HH:mm:ss
insert into test(c3) values(20251212121212);        -- yyyyMMddHH:mm:ss
insert into test(c1,c2,c3) values(now() , now() , now());select * from test;

1.3表的管理

-- DDL:Data Define Language 数据定义语言,用于对数据库和表的管理和操作 create / drop / alter / desc########### 表的管理 ############
-- 1.新建表结构
-- #语法:create table if not EXISTS 表名(字段名1 字段类型 , 字段名2 字段类型 ,....); 
-- 2.删除表结构
-- #语法:drop table if EXISTS 表名;
drop table if EXISTS stus;
create table if not EXISTS stus(id int,name varchar(255),major varchar(255),gender char(1),grade double(3,1)
);-- 2.查看表结构
-- 语法:desc 表名;
desc stus;-- 查看当前数据库中所有表名称
SHOW TABLES;-- 查看指定表的创建语句
SHOW CREATE TABLE stus;
CREATE TABLE `stus` (`id` int DEFAULT NULL,`name` varchar(255) DEFAULT NULL,`major` varchar(255) DEFAULT NULL,`gender` char(1) DEFAULT NULL,`grade` double(3,1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3-- 3.修改表结构
-- 修改之 修改表名称RENAME:修改stus表名称为student
-- 语法:alter table 表名 rename 新表名;
alter table stus rename student;-- 修改之 添加列ADD:给stus表添加classname列:
-- 语法:alter table 表名 add 新字段名称;
alter table student add classname varchar(25);-- 修改之 修改列名change:修改stus表的gender列名为sex:
-- 语法:alter table 表名 change  旧字段名  新字段名 数据类型;
alter table student change gender sex char(1);
alter table student change name name varchar(100);-- 修改之 修改列类型MODIFY:修改stus表的gender列类型为CHAR(2):
-- 语法:alter table 表名 modify 字段名  新数据类型;
alter table student modify name varchar(300);-- 修改之 删除列DROP:删除stus表的classname列:
-- 语法:alter table 表名 drop 字段名;
alter table student drop classname;desc student;-- 5.复制表结构
-- A.仅仅复制表的结构
-- 语法:CREATE TABLE 新表名 LIKE 表;
-- 特点:复制时不会携带数据,仅仅只是将表结构进行复制,例如:主键、外键、自增长等约束条件
create table emp like employees;
desc emp;
select * from emp;-- B.复制表的结构+数据
-- 语法:CREATE TABLE 新表名 SELECT * FROM 表;
-- 特点:复制时会携带数据,但是不会携带 主键、外键、自增长等约束条件
create table emps select * from employees;-- 案例:复制employees表中的last_name,department_id,salary字段到新表new_emp表,但不复制数据
create table new_emp select last_name,department_id,salary from employees where 1=2;
desc new_emp;
select * from new_emp;####  DDL 拓展  ####
-- 创建索引
create index idx_name on employees(first_name); -- 创建视图
create view v_emp as select first_name , salary , department_id from employees;
select * from v_emp where salary BETWEEN 10000 and 15000;-- 创建函数
-- create function -- 创建存储过程
-- create procedure-- 创建触发器
-- create trigger################### 作业1 ####################
/*#设计一张员工信息表,要求如下1.编号(整型)2.员工工号(长度不超过10位)3.员工姓名(长度不超过255位)4.性别(存储男/女)5.年龄(不能存储负数)6.身份证号(18位,身份证中可能会出现X字符)7.入职时间(年-月-日)
*/
drop table if exists empinfo;
create table if not exists empinfo(num int PRIMARY KEY,      employee_id VARCHAR(10) UNIQUE,          employee_name VARCHAR(255) NOT NULL,gender CHAR(1) CHECK(gender IN('男','女')),age int UNSIGNED,personId CHAR(18) UNIQUE,                hiredate date
);
desc empinfo;select * from empinfo;################### 作业2 ####################
-- 1. 创建表 dept1
-- name Null? type
-- id int(7)
-- name varchar(25)
drop table if exists dept1;
create table if not exists dept1(id int(7),name VARCHAR(25));
desc dept1;-- 2. 将表 departments 中的数据插入新表 dept2 中
drop table if exists dept2;
create table if not exists dept2 as select * from departments;
desc dept2;
select * from dept2;-- 3. 创建表 emp5
-- name Null? type
-- id int(7)
-- First_name Varchar (25)
-- Last_name Varchar(25)
-- Dept_id int(7)
drop table if exists emp5;
create table if not exists emp5(id int(7),First_name VARCHAR(25),Last_name VARCHAR(25),Dept_id int(7)
);
desc emp5;-- 4. 将列 Last_name 的长度增加到 50
ALTER TABLE emp5 MODIFY Last_name VARCHAR(50);-- 5. 根据表 employees 创建 employees2
drop table if exists employees2;
create table if not exists employees2 as select * from employees;
desc employees2;
select * from employees2;-- 6. 删除表 emp5
drop table if exists emp5;-- 7. 将表 employees2 重命名为 emp5 
alter table employees2 RENAME to emp5;
desc employees2;-- 8 在表 dept1 和 emp5 中添加新列 test_column,并检查所作的操作
desc dept1;
ALTER TABLE dept1 ADD test_column VARCHAR(50);
desc emp5;
ALTER TABLE emp5 ADD test_column VARCHAR(50);-- 9.直接删除表 emp5 中的列 department_id
desc emp5;
ALTER TABLE emp5 drop department_id;

1.4完整性约束

-- DDL:Data Define Language 数据定义语言,用于对数据库和表的管理和操作 create / drop / alter / desc########### 完整性约束 ############
/*
-- 非空约束:not null
用于限制该字段为必填项-- 默认约束:default
严格来说,并不算约束。用于限制该字段没有显示插入值时,则直接使用默认值。-- 主键约束:primary key
用于限制该字段值不能重复,设置为主键的字段默认不能为空。
一个表只能有一个主键,也可以是组合主键。-- 唯一约束:unique用于限制该字段值不能重复。主键和唯一键的区别:其中主键字段不能为空,一个表中只能有一个主键;唯一键字段可以为空,一个表中可以有多个唯一键。-- 检查约束:check
用于限制该字段值必须满足指定条件。
check (age between 1 and 100),检查此时操作的年龄必须在1~100之间,但是MySQL没有检查约束,在mysql中加上不报错,但是没有效果。-- 外键约束:foreign key
用于限制两个表的关系,要求外键的字段值必须来自主表的关联列。
要求
1.主表的关联列和从表的关联列的数据类型一致,含义一样,命名无要求
2.主表的关联列必须为主键
*/        ############# 案例 ##############
/*建表stu学生表,字段id为整型,且是主键;字段name为字符型长度为255,且是唯一不为空;字段gender为字符型长度为1,且默认为男;字段email为字符型长度为20,且不为空;字段age为整型,且是检查约束(0-100);字段majorId整型,外键关联major表中的id主键。建表major专业表,字段id为整型,且是主键;字段name为字符型长度为25,且是不为空。
*/
drop table if EXISTS major;
create table if not EXISTS major(id int PRIMARY KEY,name varchar(25) not null
);insert into major values(10,'计算机'),(20,'大数据'),(30,'网络安全'); 
select * from major;#------------ 一、列级约束  -------------#
/*列级约束 1.在创建表,声明字段时,可直接在其后面声明约束条件   语法:字段名  数据类型  约束条件2.支持约束:主键、非空、唯一、默认、检查3.不支持约束:外键4.不能自定义约束名字
*/
drop table if EXISTS stu;
create table if not EXISTS stu(id int PRIMARY KEY,                   -- 主键约束name varchar(255) UNIQUE not null,    -- 非空且唯一gender char(1) DEFAULT '男',          -- 默认约束email varchar(20) not null,           -- 非空约束age int check(age between 0 and 100), -- 检查约束majorId int -- FOREIGN KEY major(id)  列级约束中,不支持写外键
);-- 查看表结构
desc stu;
-- 测试约束条件是否生效
insert into stu values(1,'小宫',DEFAULT,'123@qq.com',18,10);
-- 1062 - Duplicate entry '1' for key 'stu.PRIMARY'  主键约束要求唯一
-- 1048 - Column 'id' cannot be null  主键约束要求非空
insert into stu values(null,'小宫',DEFAULT,'123@qq.com',18,10);
-- 1062 - Duplicate entry '小宫' for key 'stu.name'   唯一约束UNIQUE
-- 1048 - Column 'name' cannot be null    非空约束not null
insert into stu values(2,null,DEFAULT,'123@qq.com',18,10);
insert into stu values(2,'小小','女','123@qq.com',18,10);
-- 3819 - Check constraint 'stu_chk_1' is violated.   检查约束check
insert into stu values(3,'小红花','女','123@qq.com',100,10);
select * from stu;#------------ 二、表级约束  -------------#
/*表级约束1.在申明表时,在所有字段申明完结后,再添加约束条件  语法:constraint 约束名 约束条件(字段) [REFERENCES 表(字段)]2.支持约束:主键、唯一、检查、外键3.不支持的约束:非空、默认4.可以支持自定义约束名称
*/
drop table if EXISTS stu;
create table if not EXISTS stu(id int,                name varchar(255) not null,    gender char(1) DEFAULT '女',          email varchar(20) ,           age int, majorId int,-- 添加表级约束条件-- 语法:constraint 约束名 约束条件(字段名) [REFERENCES 表(字段名)]-- 主键约束PRIMARY KEY(id),-- 唯一约束constraint un_name UNIQUE(name),-- 检查约束constraint ck_gender check(gender in('男','女')),-- 外键约束constraint fk_majorId FOREIGN KEY(majorId) REFERENCES major(id)
);-- 查看表结构
desc stu;-- 测试约束条件是否生效
insert into stu values(1,'小宫',DEFAULT,'123@qq.com',18,10);
-- 1062 - Duplicate entry '1' for key 'stu.PRIMARY'  主键约束要求唯一
-- 1048 - Column 'id' cannot be null  主键约束要求非空
insert into stu values(1,'小宫',DEFAULT,'123@qq.com',18,10);
-- 1062 - Duplicate entry '小宫' for key 'stu.name'   唯一约束UNIQUE
-- 1048 - Column 'name' cannot be null    非空约束not null
insert into stu values(2,null,DEFAULT,'123@qq.com',18,10);
-- 1452 - Cannot add or update a child row: a foreign key constraint fails (`testdql2509`.`stu`, CONSTRAINT `fk_majorId` FOREIGN KEY (`majorId`) REFERENCES `major` (`id`))  外键约束
insert into stu values(2,'小小','女','123@qq.com',18,40);
-- 3819 - Check constraint 'ck_gender' is violated.   检查约束check
insert into stu values(3,'小红花','非','123@qq.com',100,10);
select * from stu;#------------ 三、alter命令 添加 | 删除 约束  -------------#
drop table if EXISTS stu;
create table if not EXISTS stu(id int,name varchar(20),gender char(1),email varchar(20),age int,majorId int
);
desc stu;-- 3.1 alter 添加 | 删除  主键约束
-- 列级约束
alter table stu modify id int primary key;
-- 表级约束
alter table stu add primary key(id);
-- 删除主键约束
alter table stu drop primary key;-- 3.2 alter 添加 | 删除  外键约束
-- 表级约束 携带名字
alter table stu add constraint fk_majorId FOREIGN KEY(majorId) REFERENCES major(id);
-- 删除外键约束
alter table stu drop FOREIGN KEY fk_majorId;-- 表级约束 不携带名字
alter table stu add FOREIGN KEY(majorId) REFERENCES major(id);
-- 删除外键约束
alter table stu drop FOREIGN KEY stu_ibfk_1;-- 3.3 alter 添加 | 删除  唯一约束
-- 列级约束
alter table stu modify name varchar(255) unique;
-- 表级约束
alter table stu add constraint un_name UNIQUE(name);
-- 删除唯一约束
alter table stu drop index name;
desc stu;-- 3.4 alter 添加 | 删除  非空约束
-- 列级约束
alter table stu modify email varchar(25) not null;
-- 删除非空约束
alter table stu modify email varchar(25);
desc stu;-- 3.5 alter 添加 | 删除  默认约束
-- 列级约束
alter table stu modify gender varchar(1) DEFAULT '女';
-- 删除默认约束
alter table stu modify gender varchar(1);
desc stu;-- 3.6 alter 添加 | 删除  检查约束
-- 列级约束
alter table stu modify gender varchar(1) check(gender in('男','女'));
-- 表级约束
alter table stu add constraint ck_gender check(gender in('男','女'));
-- 删除检查约束
alter table stu drop check ck_gender;
insert into stu value(2,'小草','非','123@qq.com',19,20);
select * from stu;/*总结 - alter添加表的约束1.默认约束 、 非空约束-- 列级约束alter table 表名 modify 字段 数据类型 [DEFAULT 默认值] | [NOT NULL];-- 删除约束alter table 表名 modify 字段 数据类型;2.外键约束、唯一约束、检查约束-- 表级约束alter table 表名 add constraint 约束名 [FOREIGN KEY  | UNIQUE | CHECK](字段名) [REFERENCES 表(字段)];-- 删除约束alter table 表名 drop [FOREIGN KEY  | index | CHECK] 约束名;3.主键约束-- 表级约束alter table 表名 add PRIMARY KEY(字段名);-- 删除约束alter table 表名 drop PRIMARY KEY;
*/##############################  通用写法  ##################################
drop table if EXISTS stu;
create table if not EXISTS stu(id int PRIMARY KEY,                      -- 主键约束name varchar(20) UNIQUE not null,        --  唯一和非空约束gender char(1) DEFAULT '男',             --  默认约束email varchar(20) not null,              --  非空约束age int check(age BETWEEN 1 and 120),    --  检查约束majorId int,FOREIGN KEY(majorId) REFERENCES major(id) -- 外键约束
);
desc stu;##############################  面试题 - 主键和唯一键区别 ############################## 
#----------- 主键约束  primary key  非空且唯一   有且仅有一个    联合主键
#----------- 唯一约束  unique       唯一         可以有多个     联合唯一键
drop table if EXISTS stu;
create table if not EXISTS stu(id int,                      -- 主键约束name varchar(20) ,           --  唯一约束email varchar(25)
);
desc stu;-- 测试意义
insert into stu values(1,'小张' , '123@qq.com');
-- 1062 - Duplicate entry '1' for key 'stu.PRIMARY'   主键约束不允许重复
insert into stu values(1,'小张' , '123@qq.com');
-- 1048 - Column 'id' cannot be null                  主键约束不允许为空
insert into stu values(null,'小张' , '123@qq.com');-- 1062 - Duplicate entry '小张' for key 'stu.name'   -- 唯一约束不允许重复
insert into stu values(2,'小张' , '123@qq.com');
insert into stu values(2,null , '123@qq.com');        -- 唯一约束允许为null
insert into stu values(3,null , '123@qq.com');        -- 唯一约束允许为null-- 测试是否支持联合
-- 测试联合主键,允许设置联合主键
alter table stu add primary key(id,name);
insert into stu values(1,'小张' , '123@qq.com');
insert into stu values(1,'小小' , '123@qq.com');
insert into stu values(2,'小小' , '123@qq.com');
-- 1062 - Duplicate entry '2-小小' for key 'stu.PRIMARY'  
-- 当两个字段的值都相同才认定为同一个数据,则不允许重复插入
insert into stu values(2,'小小' , '123@qq.com');-- 测试联合唯一键,允许设置唯一键联合唯一键
alter table stu add constraint un_key UNIQUE(name , email);
insert into stu values(1,'小张' , '123@qq.com');
insert into stu values(1,'小小' , '123@qq.com');
-- 1062 - Duplicate entry '小小-123@qq.com' for key 'stu.un_key'
-- 当两个字段的值都相同才认定为同一个数据,则不允许重复插入
insert into stu values(2,'小小' , '123@qq.com');select * from stu;################### 作业1 ####################
-- 创建表qqinfo,里面包含qqid,添加主键约束、昵称nickname,添加唯一约束、邮箱email(添加非空约束)、性别gender
-- 删除表qqinfo
drop table if exists qqinfo;
create table if not exists qqinfo(qqid int PRIMARY KEY,nickname VARCHAR(25) UNIQUE,email VARCHAR(20) not null,gender char(1)
);
desc qqinfo;################### 作业2 ####################
-- 1. 向表 emp5 的 employee_id 列中添加 PRIMARY KEY 约束(my_emp_id_pk)
desc emp5;
alter table emp5 add constraint my_emp_id_pk  PRIMARY KEY (employee_id);
-- 2. 向表 dept2 的 department_id 列中添加 PRIMARY KEY 约束(my_dept_id_pk)
desc dept2;
alter table dept2 add constraint my_dept_id_pk  PRIMARY KEY (department_id);
-- 3. 向表 emp5 中添加列dept_id ,并在其中定义 FOREIGN KEY 约束,与之相关联的列是dept2 表中的department_id列。
desc emp5;
alter table emp5 add dept_id int;alter table emp5 add constraint fk_emp5_dept2 foreign key (dept_id) references dept2(department_id);################### 作业3 ####################
-- 设计英雄游戏 表结构设计,编写DDL语句
-- 英雄表、角色表、装备 |符文 | 羁绊-- 删除表
drop table if exists hero_equipment;
drop table if exists hero;
drop table if exists role;
drop table if exists equipment;-- 角色表
create table if not exists role(role_id int PRIMARY KEY,role_name varchar(20) not null UNIQUE,role_type varchar(10) not null
);-- 装备表  
create table if not exists equipment(equip_id int PRIMARY KEY,equip_name varchar(30) not null UNIQUE,equip_type varchar(10) not null,price int not null
);-- 英雄表
create table if not exists hero(hero_id int PRIMARY KEY,hero_name varchar(20) not null UNIQUE, role_id int not null,position varchar(20),foreign key (role_id) references role(role_id)
);-- 英雄装备关联表
create table if not exists hero_equipment(hero_id int,equip_id int,PRIMARY KEY(hero_id,equip_id),foreign key (hero_id) references hero(hero_id),foreign key (equip_id) references equipment(equip_id)
);-- 插入数据
INSERT INTO role (role_id, role_name, role_type) VALUES
(1, '战士', '近战'),
(2, '法师', '远程'),
(3, '射手', '远程');INSERT INTO equipment (equip_id, equip_name, equip_type, price) VALUES
(101, '无尽战刃', '攻击', 2140),
(102, '博学者之怒', '法术', 2300), 
(103, '不祥征兆', '防御', 2180);INSERT INTO hero (hero_id, hero_name, role_id, position) VALUES
(1001, '亚瑟', 1, '上路'),
(1002, '安琪拉', 2, '中路'),
(1003, '后羿', 3, '下路');INSERT INTO hero_equipment (hero_id, equip_id) VALUES
(1001, 103),
(1002, 102), 
(1003, 101);-- 查看所有英雄基本信息
SELECT h.hero_name as '英雄',r.role_name as '职业',h.position as '位置'
FROM hero h
JOIN role r ON h.role_id = r.role_id;-- 查看英雄装备信息
SELECT h.hero_name as '英雄',e.equip_name as '装备',e.equip_type as '类型'
FROM hero h
JOIN hero_equipment he ON h.hero_id = he.hero_id
JOIN equipment e ON he.equip_id = e.equip_id;-- 统计各职业英雄数量
SELECT role_name as '职业',COUNT(*) as '英雄数量'
FROM role r
JOIN hero h ON r.role_id = h.role_id
GROUP BY r.role_id;drop table if EXISTS stu;
create table if not EXISTS stu(id int,                      -- 主键约束name varchar(20) ,           --  唯一约束grade CHAR(3));
insert into stu values(1,"的","以发热");
desc stu;use mysql;
select * from user;

2.DML(Data Manipulation Language)数据操作语言

-- DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据) insert / update / delete drop table if EXISTS stu;
create table if not EXISTS stu(id int PRIMARY key auto_increment,   -- 主键 自增长name  varchar(255) UNIQUE,grade char(3)	DEFAULT "一年级"
);############# 插入操作 ##############
-- 1.1 插入全部数据
-- 语法:insert into 表名 values(值1,值2,....);
insert into stu values(NULL , "小张同学" , "一年级");
insert into stu values(NULL , "小王同学" , "一年级");
insert into stu values(NULL , "小陈同学" , "二年级");
insert into stu values(NULL , "小孙同学" , "三年级");
insert into stu values(NULL , "小李同学" , "一年级");
select * from stu;-- 1.2 插入部分数据
-- 语法:insert into 表名(字段1,字段2,...) values(值1,值2,....);
insert into stu(name) values("小张同学");
insert into stu(name) values("小王同学");
insert into stu(name) values("小孙同学");
select * from stu;-- 1.3 批量插入数据
-- 语法:insert into 表名 values(值1,值2,....),(值1,值2,....),(值1,值2,....);
insert into stu values(NULL,"小黄同学",DEFAULT),(NULL,"小李同学",DEFAULT),(NULL,"小何同学",DEFAULT);############# 主键自增长 ##############
drop table if EXISTS stu;
create table if not EXISTS stu(id int,  name  varchar(255) UNIQUE,grade char(3)	DEFAULT "一年级"
);-- 修改stu表中id字段为自增长
alter table stu modify id int PRIMARY KEY auto_increment;
insert into stu(name) values("小张同学");
insert into stu(name) values("小王同学");
insert into stu(name) values("小孙同学");
select * from stu;-- 查看自增长相关的变量数据
show variables like '%auto_increment%';
-- 自增长 起始值auto_increment_offset=1 , 步长auto_increment_increment=1
-- 设置变量,仅仅只能在当前会话生效
set auto_increment_offset = 10;
set auto_increment_increment = 10;/*
关于自增长的情况
1.查看自增长相关数据 show VARIABLES like '%auto_increment%';2.修改自增长的起始值和步长
set auto_increment_offset = 10;
set auto_increment_increment = 10;3.auto_increment是不是只能用在int类型的数据列上?
1063 - Incorrect column specifier for column 'name'
否,只要数据是数值类型,都可以使用auto_increment自增长,即int,double都可以使用;
但是字符型例如varchar,不能够使用auto_increment自增长。4.auto_increment只能搭配primary key使用么?
1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
否,搭配key键一起使用,例如:UNIQUE 、 FOREIGN KEY 、 PRIMARY KEY都可以。5.auto_increment能够在一张表中多次使用么?
1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
否,auto_increment只能搭配表中的一个列字段使用。
*/############# 主键  无须自增长 UUID() ##############
drop table if EXISTS stu;
create table if not EXISTS stu(id varchar(36) PRIMARY KEY,   -- 主键:唯一且不为空name  varchar(255) UNIQUE,grade char(3)	DEFAULT "一年级"
);
insert into stu values(UUID() , "小张同学" , DEFAULT);
insert into stu values(UUID() , "小孙同学" , DEFAULT);
insert into stu values(UUID() , "小黄同学" , DEFAULT);
select * from stu;############# 主键  无须自增长 UUID_SHORT() ##############
drop table if EXISTS stu;
create table if not EXISTS stu(id BIGINT PRIMARY KEY,   -- 主键:唯一且不为空name  varchar(255) UNIQUE,grade char(3)	DEFAULT "一年级"
);
insert into stu values(UUID_SHORT() , "小张同学" , DEFAULT);
insert into stu values(UUID_SHORT() , "小孙同学" , DEFAULT);
insert into stu values(UUID_SHORT()  , "小黄同学" , DEFAULT);
select * from stu;############# 更新操作 ##############
-- 语法:update 表名 set 字段1=新值 , 字段2=值 where 条件;
update stu set grade = '二年级';
update stu set grade = '三年级' where name like '%孙%';
select * from stu;############# 删除操作 ##############
-- 语法:delete from 表名 where 条件;
delete from stu;
delete from stu where id = 6;insert into stu(name) values("小张同学");
insert into stu(name) values("小王同学");
insert into stu(name) values("小孙同学");
select * from stu;-- 语法:truncate table 表名;   截断数据
truncate table stu;insert into stu(name) values("小张同学");
insert into stu(name) values("小王同学");
insert into stu(name) values("小孙同学");select * from stu;-- 语法:drop table 表名;  删除表结构
drop table stu;
select * from stu;/*面试题 - delete清空 、 truncate截断 、drops删除delete 清空数据1.DML操作  delete from 表名 where 条件;2.携带where条件3.支持事务,允许事务回滚4.返回受影响的行数  Affected rows: 15.清空数据后,再新增数据,ID自增长会接着之前的数值继续truncate 截断数据1.truncate table 表名;2.不允许携带where条件3.不支持事务4.不会返回受影响的行数5.截断数据后,再新增数据,ID自增长从头1开始6.效率高 truncate > deletedrop 删除表结构1.DDL操作  drop table 表名;2.不允许携带where条件3.不支持事务4.不会返回受影响的行数5.drop之后,直接删除表结构6.效率高 drop > truncate > delete
*/############# 课堂作业 ##############
-- 1、编写sql语句,修改表中编号是12女生的phone为'18209876579'
start TRANSACTION;
select * from girl where id = 12;
update girl set phone = '18209876579' where id =12;
ROLLBACK;
-- 2、编写sql语句,删除boyfriend_id为空的女生信息select * from girl where boyfriend_id is null;
insert into girl values(default,'灭绝师太', '女', '1990-05-15 00:00:00', '18209876666', null,null);
select * from girl where boyfriend_id is null;
delete from girl where boyfriend_id is null;-- 3、编写sql语句,在girl表中插入一行数据
insert into girl (name, sex, borndate, phone, boyfriend_id) 
values ('黄蓉', '女', '1990-05-15 00:00:00', '18209876666', 1);
-- 4、编写sql语句,实现查询girl表中的生日晚于1988年的女生信息
select * from girl where borndate > '1988-12-31';############# 作业 ##############
-- 1. 运行以下脚本创建表 my_employees,users
--  创建表 my_employees
desc my_employees;
drop table if exists my_employees;
create table my_employees(
Id int(10),
First_name varchar(10),
Last_name varchar(10),
Userid varchar(10),
Salary double(10,2)
);
desc my_employees;--  创建表 users
desc users;
create table users(
id int,
userid varchar(10),
department_id int
);
desc users;-- 2. 显示表 my_employees 的结构
desc my_employees;-- 3. 向 my_employees 表中插入下列数据
-- ID FIRST_NAME LAST_NAME USERID SALARY
-- 1 patel Ralph Rpatel 895
-- 2 Dancs Betty Bdancs 860
-- 3 Biri Ben Bbiri 1100
-- 4 Newman Chad Cnewman 750
-- 5 Ropeburn Audrey Aropebur 1550INSERT INTO my_employees VALUES
(1, 'patel', 'Ralph', 'Rpatel', 895),
(2, 'Dancs', 'Betty', 'Bdancs', 860),
(3, 'Biri', 'Ben', 'Bhiri', 1100),
(4, 'Newman', 'Chad', 'Chewman', 750),
(5, 'Ropeburn', 'Audrey', 'Aropebur', 1550);
select * from my_employees;-- 4. 向 users 表中插入数据
-- 1 Rpatel 10
-- 2 Bdancs 10
-- 3 Bbiri 20
-- 4 Cnewman 30
-- 5 Aropebur 40
INSERT INTO users VALUES
(1, 'Rpatel', 10),
(2, 'Bdancs', 10),
(3, 'Bhiri', 20),
(4, 'Chewman', 30),
(5, 'Aropebur', 40);select * from users;-- 5. 将 3 号员工的 last_name 修改为“drelxer”
select * from my_employees;
update my_employees set Last_name = 'drelxer' where Id = 3;-- 6. 将所有工资少于 900 的员工的工资修改为 1000
update my_employees set salary = 1000 where salary < 900;-- 7. 将 userid 为 Bbiri 的 users 表和 my_employees 表的记录全部删除
select * from users;
delete from users where userid = 'Bhiri';select * from my_employees;
delete from my_employees where Userid = 'Bhiri';-- 8. 删除users所有数据delete from users;
select * from users;-- 9. 检查所作的修正delete from my_employees;
select * from my_employees;-- 10. 清空表my_employeestruncate table my_employees;
select * from my_employees;
http://www.dtcms.com/a/618903.html

相关文章:

  • 建设银行网站首页口网站建设存在哪些问题
  • LeetCode94.二叉树的中序遍历、LeetCode144. 二叉树的前序遍历、LeetCode145. 二叉树的后序遍历
  • 网站开发专业怎么样免费商用图片的网站
  • pdf(攻防世界)
  • 营销策划网站良品铺子网络营销案例
  • 北京电商营销中心佛山选择免费网站优化
  • **论文初稿写作指南2025,提升学术研究质量与效率**
  • 嵌入式开发内存越界问题方案
  • 48 我的地址页面布局
  • 提供网站建设框架100个详情页设计图
  • 14.2 知识蒸馏技术:把大模型能力压缩到小模型
  • 安徽服饰网站建设html 网站开发
  • 什么是 IAP 升级?
  • 网站推广的平台排名wordpress文件类型不支持
  • 7.5、Python-匿名函数lambda
  • 江西冰溪建设集团网站宁夏做网站的
  • 如何在容器化环境中查找和利用漏洞(第三部分)
  • 企业网站运营西安网站建设设计的好公司哪家好
  • STM32 SDIO接口介绍
  • Windows Metro app开发初体验
  • Python中的标识符与保留字
  • 怎么查一个网站是否备案ftp如何导入wordpress 主题
  • IntersectionObserver API
  • 陕西煤业化工建设集团有限公司网站网站建设如何选择良好的服务器
  • 贵阳高端网站开发制作做网站应该画什么图
  • 深入浅出Ansible循环语句:从基础到实践
  • 沧州北京网站建设营销 网站制作
  • 徐州10年网站建设 推广公司wordpress 明星主题
  • 修复Ubuntu系统文件损坏问题:手动fsck指令
  • 手动监控3小时?RPA实时追踪小红书关键词排名,效率提升2000%[特殊字符]