mysql学习笔记

本文详细介绍了MySQL的数据库和表操作,包括创建、删除、修改和查看等基本操作,如创建数据库、设置字符集、创建表结构、修改表字段、重命名表、插入数据、更新数据、删除数据和查询数据等。还涉及了聚合函数、分组、排序和LIMIT的使用,是学习MySQL数据库操作的全面指南。
摘要由CSDN通过智能技术生成

mysql学习

库操作:
create database if not exists demo;
show create database demo;
use demo;
alter database demo character set utf8;
select dtabases();
(还有一些指定字符集的等等)
表操作
create table if not exists student(
id int unsigned,
name varchar(20),
birthday date
)ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

show create table student;

desc student;

create  table student1 like student;
drop table student1;
alter table student1 add age int unsigned;
alter table student1 modify name varchar(30);
alter table student1 change age hender int ;

rename table student1 to student2;
show tables;
通用操作
库,表
注释:comment ' '
增加:
创建-create database if not exists DBname
            table
            
删除:drop 
删除数据库--drop database DBname;
删除表--直接删除表s1表:drop table s1;
     -- 判断表是否存在并删除s1表  drop table if exists 's1';


修改:
数据库修改字符集或者排序方式--alter database db3 character set utf8;

修改表:
为学生表添加一个新的字段 remark,类型为 varchar(20)--alter table student add remark varchar(20); 
将 student 表中的 remark 字段的改成 varchar(100)--alter table student modify remark varchar(100); 
将student 表中的 remark 字段名改成 intro,类型 varchar(30)--alter table student change remark intro varchar(30); 
重命名 rename table name1 to name2
  

查看:
查看所有的数据库  
show databases; 
-- 查看某个数据库的定义信息 
show create database db3; 
show create database db1; 

-- 查看 day21 数据库中的所有表
 use day21;
 show tables; 
-- 查看 student 表的结构
 desc student;

单表的增删改查:

增(插入记录):INSERT [INTO] 表名 [字段名] VALUES (字段值)
例子-- 插入所有的列,向学生表中 
insert into student (id,name,age,sex) values (1, '孙悟空', 20, '男'); 
insert into student (id,name,age,sex) values (1, '孙悟空', 20, '男'),(2, '孙悟反', 19, '男'); 

### insert的注意事项

- 插入的数据应与字段的数据类型相同
- 数据的大小应在列的规定范围内,例如:不能将一个长度为 80 的字符串加入到长度为 40 的列中。
- 在values中列出的数据位置必须与被加入的列的排列位置相对应。在mysql中可以使用value,但不建议使用,功能与 values 相同。
- 字符和日期型数据应包含在单引号中。MySQL 中也可以使用双引号做为分隔符。
- 不指定列或使用 null,表示插入空值。

蠕虫复制
-- 创建student2表,student2结构和student表结构一样 ,但无数据
create table student2 like student;

-- 将student表中的数据全部添加到student2表中 
insert into student2 select * from student; 

- 如果只想复制student表中name,age字段数据到student2表中,两张表都写出相应的列名(可以用各种查找来进行选择)
insert into student2 (name,age) select name,age from student;  
删:DELETE FROM 表名 [WHERE 条件表达式]

如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。 你可以在 WHERE 子句中指定任何条件.

不带条件删除数据
DELETE FROM 表名;

带条件删除数据
DELETE FROM 表名 WHERE 字段名=值;

使用truncate删除表中所有记录
TRUNCATE TABLE 表名

truncate和delete的区别
truncate 相当于删除表的结构,再创建一张表。

例如--
-- 带条件删除数据,删除id为1的记录 
delete from student where id=1; 

-- 不带条件删除数据,删除表中的所有数据 
delete from student;
改:UPDATE 表名 SET 列名=值 [WHERE 条件表达式]

UPDATE: 需要更新的表名 SET: 修改的列值 WHERE: 符合条件的记录才更新

不带条件修改数据
UPDATE 表名 SET 字段名=值; -- 修改所有的行

带条件修改数据
UPDATE 表名 SET 字段名=值 WHERE 字段名=值; 

举例:
-- 不带条件修改数据,将所有的性别改成女 
update student set sex = '女'; 

-- 带条件修改数据,将id号为2的学生性别改成男 
update student set sex='男' where id=2; 

-- 一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京 
update student set age=26, address='北京' where id=3;

注意: 09:44:16 update student3 set address='江苏南京' Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 0.00034 sec

SET SQL_SAFE_UPDATES = 0;
查:SELECT 列名 FROM 表名 [WHERE 条件表达式]

SELECT 命令可以读取一行或者多行记录。 你可以使用星号(*)来代替其他字段,SELECT 语句会返回表的所有字段数据 你可以使用 WHERE 语句来包含任何条件。

测试用例 创建一个学生表,包含如下列:
CREATE TABLE student3 (
   id int,  -- 编号
   name varchar(20), -- 姓名
   age int, -- 年龄
   sex varchar(5),  -- 性别
   address varchar(100),  -- 地址
   math int, -- 数学
   english int -- 英语 
); 


准备数据
INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男', ' 杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩 ',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港 ',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);

查询表所有行和列的数据:
使用*表示所有列 SELECT * FROM 表名;
-- 查询所有的学生:
select * from student;

查询指定列:
查询指定列的数据,多个列之间以逗号分隔
SELECT 字段名1, 字段名2, 字段名3, ... FROM 表名;
-- 查询 student 表中的 name 和 age 列 
select name,age from student;

指定列的别名进行查询:使用别名的好处: 显示的时候使用新的名字,并不修改表的结构。 
语法:SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;



查询时清除重复值
-- 查询学生来至于哪些地方 
select address from student; 
 
-- 去掉重复的记录 
select distinct address from student; 



查询结果参与运算
某列数据和固定值运算
SELECT 列名1 + 固定值 FROM 表名;

某列数据和其他列数据参与运算
SELECT 列名1 + 列名2 FROM 表名; 注意: 参与运算的必须是数值类型

例如:
-- 给所有的数学加 5 分 
select math+5 from student; 
-- 查询 math + english 的和 
select *,(math+english) as 总成绩 from student; -- as 可以省略   
select *,(math+english) 总成绩 from student; 


条件查询:比较运算符,逻辑运算符,in 关键字,BETWEEN AND,like通配符(%匹配任意个,_匹配一个)

-- 查询math分数大于80分的学生 
select * from student3 where math>80; 

-- 查询 age 大于 35 且性别为男的学生(两个条件同时满足) 
select * from student3 where age>35 and sex='男'

-- 查询id是1或3或5的学生 
select * from student3 where id in(1,3,5); 

-- 查询 english 成绩大于等于 75,且小于等于 90 的学生 
select * from student3 where english between 75 and 90;

-- 查询姓马的学生 
select * from student3 where name like '马%'; 
-- 查询姓马,且姓名有两个字的学生 
select * from student3 where name like '马_'; 
-- 查询姓名中包含'德'字的学生 
select * from student3 where name like '%德%';
排序: SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC]; ASC: 升序,默认值 DESC: 降序

单列排序

-- 查询所有数据,使用年龄降序排序 
select * from student order by age desc; 

组合排序

-- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序 
select * from student order by age desc, math asc; 
聚合函数:SELECT 聚合函数(列名) FROM 表名
SQL 中的聚合函数作用
max(列名)求这一列的最大值
min(列名)求这一列的最小值
avg(列名)求这一列的平均值
count(列名)统计这一列有多少条记录
sum(列名)对这一列求总和

语法: SELECT 聚合函数(列名) FROM 表名;

-- 查询学生总数 
select count(id) as 总人数 from student; 
select count(*) as 总人数 from student;

-- 查询年龄大于20的总数 
select count(*) from student where age>20; 
-- 查询数学成绩总分 
select sum(math) 总分 from student; 
-- 查询数学成绩平均分 
select avg(math) 平均分 from student; 
-- 查询数学成绩最高分 
select max(math) 最高分 from student; 
-- 查询数学成绩最低分 
select min(math) 最低分 from student; 

我们可以利用 IFNULL()函数,如果记录为 NULL,给个默认值,这样统计的数据就不会遗漏
select count(ifnull(id,0)) from student;
分组: SELECT 字段 1,字段 2… FROM 表名 GROUP BY 分组字段 [HAVING 条件]
GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。 分组的目的就是为了统计,一般分组会跟聚合函数一起使用。

-- 按性别进行分组,求男生和女生数学的平均分 
select sex, avg(math) from student3 group by sex;

注意:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的 
举例
查询男女各多少人 1) 查询所有数据,按性别分组。 2) 统计每组人数
select sex, count(*) from student3 group by sex; 

查询年龄大于 25 岁的人,按性别分组,统计每组的人数
先过滤掉年龄小于 25 岁的人。 2) 再分组。 3) 最后统计每组的人数
select sex, count(*) from student3 where age > 25 group by sex ; 

limit语句:LIMIT offset,length;

-- 查询学生表中数据,从第3条开始显示,显示6条。 
select * from student3 limit 2,6;

-- 如果第一个参数是0可以省略写:  
select * from student3 limit 5; 

-- 最后如果不够5条,有多少显示多少 
select * from student3 limit 10,5; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值