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

MySQL 基础使用

文章目录

  • 一、Navicat 工具链接 Mysql
  • 二、数据库的使用
    • 1.常用数据类型
    • 2. 建表 create
    • 3. 删表 drop
    • 4. insert 插入数据
    • 5. select 查询数据
    • 6. update 修改数据
    • 7. delete 删除记录
      • truncate table 删除数据
  • 三、字段约束
    • 字段
    • 1. 主键 + 自增
      • delete和truncate自增长字段的影响
    • 2. 非空 not null
    • 3. 唯一 unique
    • 4. 默认值 default
    • 5. 别名
      • 字段别名
      • 表别名
    • 6. 过滤 distinct
  • 四、条件查询
    • 1. where 条件
    • 2. 运算符的查询语句
      • 比较运算符
      • 逻辑运算符
    • 3. 模糊查询 like
    • 4. 范围查询
    • 5. 空判断 is null
    • 6. 其他练习
  • 五、排序 order by
  • 六、聚合函数
    • 1. count 总记录数
    • 2. max/min 最大/小值
    • 3. sum 求和
    • 4. avg 平均值
  • 七、分组
    • 1. 分组 group by
    • 2. 分组后筛选 having
    • having和where筛选的区别
  • 八、数据分页
    • 1. limit 显示指定的记录数
    • 2. 数据分页显示
    • 3. 求总页数
  • 九、多表链接查询
    • 写SQL三步法
    • 1.内连接
    • 2.左连接
    • 3.右链接
    • 4. 自关联
    • 5. 子查询
    • 6. 练习
  • 十、MySQL 内置函数
    • 1. 字符串函数
      • 1. 拼接字符串 concat
      • 2. 字符串长度 length
      • 3. 截取字符串
      • 练习
      • 4. 去空格
    • 2. 数学函数
      • 1. 四舍五入 round
      • 2. 随机数 rand
    • 3. 日期、时间函数
  • 十一、了解
    • 1. 视图
    • 2. 事务
      • 回滚事务操作
      • 提交事务
    • 3. 索引
      • 创建索引
      • 查看索引
      • 删除索引
      • 索引优缺点
  • 十二、基于命令行的mysql
    • cmd登录之后的命令
    • 在命令行下创建和删除数据库


一、Navicat 工具链接 Mysql

连接到Mysql数据库以后,创建数据库。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、数据库的使用

1.常用数据类型

int 整数,有符号范围(-2147483648 ,2147483647),无符号范围(0,4294967295) ,如: int unsigned, 代表设置一个无符号的整数;
tinyint 小整数, 有符号范围(-128,127), 无符号范围(0,255), 如: tinyint unsigned,代表设置一个无符号的小整数
decimal 小数, 如decimal(5,2)表示共存5位数,小数占2位,不能超过2位;整数占3位,不能超过三位;
varchar 字符串, 如 varchar(3)表示最多存3个字符,一个中文或一个字母都占一个字符; .
datetime日期时间,范围(1000-01-01 00:00:00 ~ 9999-12-31 23:59:59),如 ‘2024-04-01 20:46:59’。

tips:
注释:-- 一般用快捷键 ctrl + /
Sql 语言不区分大小写
ctrl + r 快捷执行

2. 建表 create

语法:create table 表名(字段名 字段类型,字段名 字段类型,)

-- 例1: 创建表a,字段要求:nane (姓名),数据类型: varchar(字符串),长度为10
create table a(name varchar(10)
)
-- 例2:创建表b,字段要求: name(姓名), 数据类型为,varchar(字符串),长度为10;
-- height(身高),数据类型为decimal (小数),一共5位,其中3位整数,2位小数。
create table b(name varchar(10),height decimal(5,2)
);
-- 例3:创建表c,字段要求如下:id:数据类型为int(整数);
-- name姓名:数据类型为varchar (字符串)长度为20,
-- age年龄:数据类型为tinyint unsiqned (无符号小整数 0-255)
create table c(id int,name varchar(20),age tinyint unsigned
);

3. 删表 drop

语法1:drop table 表名;
语法2:drop table if exists 表名;

-- 删除表a(再执行删除表a会报错)
drop table a;-- 删除表a(如果表a存在,就利除表a,如果不存在,什么也不做)
drop table if exists a;

4. insert 插入数据

语法:insert into 表名 values(值,值,值);

-- 往表c 插入数据
insert into c values(001,'mario',23);

指定字段插入 语法:insert into 表名(字段名,字段名) values(值,值);

-- 表c 插人一条记录,只设置id和姓名name
insert into c(id,name) values(2,'anna');

一条语法插入多条记录:insert into 表名 values(值,值),(值,值),(值,值);

-- 表c插入多条记录,用一条insert语句,数据之间用逗号隔开
insert into c values(3,'jone',19),(4,'kool',21),(5,'amy',27);

5. select 查询数据

语法:select * from 表名;

-- 查询表c的所有字段
select * from c;-- 查询表c的name字段
select name from c;-- 查询表c的字段,顺序可自定义
select name,id,age from c;

6. update 修改数据

语法:update 表名 set 字段=值,字段=值 where 条件;

如果没有where条件代表修改表中所有的记录。

-- 修改表c,所有人的年龄(age字段)改为20
update c set age=20;

如果有where条件修改表中的记录。

-- 修改表c id为3的记录,姓名(name字段)改为 tigger,年龄(age字段)改为25
update c set name='tigger',age=25 where id=3;update c set name='图图' where name='amy';update c set age=age+1 where id=3;

7. delete 删除记录

语句:delete from 表名 where 条件;

--删除所有记录
delete from c;-- 删除表c id=3的记录
delete from c where id=3;delete from c where id>=3;

truncate table 删除数据

语法:truncate table 表名;

-- 删除表c中所有的记录
truncate table c;

delete 和 truncate区别:
在速度上:truncate > delete;
如果想删除部分数据用 delete,注意带上where子句;
如果想保留表而将所有数据删除,自增长字段恢复从1开始,用truncate;

三、字段约束

字段

  1. 主键(primary key): 值不能重复. auto_increment代表值自增长;
  2. 非空(not null): 此字段不允许填写空值:
  3. 唯一(unique): 此字段的值不允许重复;
  4. 默认值(default): 当不填写此值时会使用默认值,如果填写时以填写为准。

1. 主键 + 自增

创建带约束的表和数据:
语法:

-- 创建表的主键 自增长,
create table 表名(字段名 数据类型 primary key auto_increment,字段名 数据类型 约束,...
);
-- 创建表a id自增长,
create table a(id int unsigned primary key auto_increment,name varchar(10),age int
);-- 插入数据
insert into a(name,age) values('brown',28),('green',28),('a',45);-- 插入 指定id值
insert into a values(5,'Jone',34);-- 再插入 不指定id (此时id自增长只看前一条数据的id值)
insert into a(name,age) values('popol',34);

注意:如果不指定字段,主键自增长字段的值可以用占位符, 0或者null

insert into a values(0,'Jone1',32);
insert into a values(NULL,'Jone2',34);

delete和truncate自增长字段的影响

delete 删除数据:
在这里插入图片描述
truncate 删除数据:
在这里插入图片描述

2. 非空 not null

语法:

-- not null 字段不能为空
create table 表名(字段名 数据类型 not null,...
);
create table b(id int unsigned,name varchar(10) not null,age int
);insert into b values(1,'anna',28)-- 报错:name定义非空,如果为空插入失败
insert into b(id,age) values(1,28)

3. 唯一 unique

语法:

-- 创建表a id自增长,
create table 表名(字段名 数据类型 unique,...
);
create table d(id int unsigned,name varchar(10) unique,age int
);insert into d values(1,'anna',28)
-- name 字段unique代表唯一 值不能重复插入
insert into d values(2,'anna',23)

4. 默认值 default

当一个字段有默认值约束插入数据时如果指定了值那么默认值无效;如早没有指定值,会使用默认值xx
语法:

create table 表名(字段名 数据类型 default xx,...
);
create table e(id int unsigned,name varchar(10),age int default 20
);-- 插入 指定age的值
insert into e values(1,'anna',28)
-- 插入 不指定age的值,会使用默认值 20
insert into e(id,name) values(2,'anna')

5. 别名

字段别名

通过字段名 as别名的语法可以给字没起一个别名,别名可以是中文
as可以省略
字段名as别名和 字段名 别名结果是一样的

-- 通过as给字段起一个别名
select name as 姓名,sex as 性别 from students;-- 别名的as可以省略
select name 姓名,sex 性别 from students;

表别名

-- 通过 表名as别名 起一个别名
select * from students as stu;-- 别名的as可以省略
select * from students stu;

6. 过滤 distinct

通过 select distinct 字段名,字段名 from 表名来过滤select查询结果中的重复记录。

select distinct sex,class from students;

四、条件查询

1. where 条件

-- 查询students 表中学号studentNo ="001"的记录
select * from students where studentNo ="001";-- 查询students 表中年龄age等于30的姓名name,班级class
select name,class from students where age=30;

2. 运算符的查询语句

比较运算符

< 小于
<= 小于等于
> 大于
>= 大于等于
!=<> 不等于

-- 查询students 表中name (姓名)等于"小乔学生的age (年龄)
select age from students where name ='小乔';-- 查询students表中30岁和30岁以下的学生记录
select * from students where age <= 30;-- 查询class 班级为"1班"以外的学生记录
select * from students where class!="1班";

逻辑运算符

-- 条件 and 条件(条件都需满足)
-- 查询age年龄小于30, 并且sex 性别为"女"的同学记录
select * from students where age<30 and sex="女";-- 条件 or 条件(条件满足一个即可)
-- 查询sex性别为‘女’或者class班级为”1班’的学生记录
select * from students where sex='女' or class="1班";-- not 条件 (如果条件为满足,not后变为不满足。如果条件为不满足,not后变为满足;)
-- 查询hometown老家非天津的学生记录
select * from students where not hometown='天津';

3. 模糊查询 like

% 代表任意多个字符
_ 代表任意一个字符

-- 查询name姓名中以孙开头的学生记录
select * from students where name like '孙%';
-- 查询name为任意姓,名叫"乔"的学生记录
select * from students where name like '%乔';
-- 查询name姓名有'白"的学生记录
select * from students where name like '%白%';-- 查询name 姓名以"孙"开头,且名后只有一个字的学生记录
select * from students where name like '孙_';
-- 查询name 姓名为两个字的学生记录
select * from students where name like '__';

4. 范围查询

in(值,值,值) -->非连续范围查找
between 开始值 and 结束值 -->连续范围找包含开始值包含结束值

-- 查询hometown 家乡是"北京或"上海"或"广东'的学生记录
select * from students where hometown in('北京','上海','广东');
select * from students where hometown='北京' or hometown='上海' or hometown='广东';-- 查询age年龄为25至30的学生记录
select * from students where age between 25 and 30;
select * from students where age >=25 and age <=30;

5. 空判断 is null

注意: null' '是不同的
null: 代表什么都没有;
' ':代表长度为0的字符串;
is null: 是否为 null;
is not null: 是否不为null;

-- 空判断 is null
-- 查询card身份证为null的学生记录
select * from students where card is null;-- 非空判断 is not null
-- 查询card身份证非null 的学生记录
select * from students where card is not null;

6. 其他练习

-- 修改age为25, 并且name为"孙尚香"的学生,class 为"2班'
update students set class="2班" where age=25 and name="孙尚香";-- 删除class为"1班",并且age大于30的学生记录
delete from students where class="1班" and age > 30;

五、排序 order by

asc 代表从小到大升序,这可以省略。
desc 代表从大到小降序,不可以省略。
当一条select语句出现了where 和order by
语法:select * from 表名 where 条件 order by 字段1,字段2;

-- 查询所有学生记录,按age年龄从大到小排序,年龄相同时,再按studentNo 学号从小到大排序
select * from students order by age desc, studentNo;-- 查询所有男学生记录,按class班级从小到大排序,班级相同时,再按studentNo 学号再按学号从大到小排序
select * from students where sex="男" order by class,studentNo desc;

六、聚合函数

注意:
聚合函数不能用到 where后面的条件里。
聚合函数不能与普通字段同时出现在查询结果中

1. count 总记录数

count求select返回的记录总数
count(字段名)

-- 查询学生总数(查询stuents表有多少记录)
select count(*) from students;-- 查询女同学数量
select count(*) from students where sex ="女";-- 查询过滤相同性别后的总数
select count(distinct sex) from students;

2. max/min 最大/小值

max(字段名)
min(字段名)

-- 查询最大年龄
select max(age) from students;-- 查询女同学最大的年龄
select max(age) from students where sex ="女";select min(age) from students;

3. sum 求和

sum(字段名)

-- 查询女同学的年龄总和
select sum(age) from students where sex ="女";

4. avg 平均值

avg(字段名)

-- 查询女同学的平均年龄
select avg(age) from students where sex ="女";

avg的字段中如果有null值,这条null数据不参与计算平均值

七、分组

1. 分组 group by

按照字段分组。表示此字段相同的数据会被放到一个组中;
分组的目的是配合聚合函数,聚合函数会对每一组的数据分别进行统计;
语法:
select 字段1,字段2,聚台函数... from 表名 group by 字段1,字段2...
select * from 表名 where 条件 group by 字段 order by 字段;

group by 就是配合聚合函数使用的,不然没有意义!

-- 查询 男女同学的数量
select sex,count(*) from students group by sex;-- 分别查询'1班',不同性别同学的数量
select sex,count(*) from students where class="1班" group by sex;

小练习:

统计各个班级学生总数、平均年龄、最大年龄、最小年龄。但不统计'3班",统计结果按班级名称从大到小排序
select class,count(*) 总数,avg(age),max(age),min(age) from students where
class!='3班' group by class order by class desc;

2. 分组后筛选 having

having 总是出现在group by语句之后。
having 后面可以使用聚合函数。

语法:
select字段1,字段2,聚合... from 表名 group by 字段1,字段2,字段3...having 字段1,...聚合...

-- 用where查询男生总数
-- where先筛选复合条件的记录,然后在聚合统计
select count(*) from students where sex="男"-- 用having查询男生总数
-- having先分组聚合统计,在统计的结果中筛选
select count(*) from students group by sex having sex="男";

having配合聚合函数的使用:

-- 求班级人数大于3人的班级名字
select class from students group by class having count(*) > 3;

having和where筛选的区别

where是对表的原始数据进行筛选。
having是对group by之后已经分过组的数据进行筛选。
having可以使用聚合函数,where不能用聚合函数

八、数据分页

1. limit 显示指定的记录数

语法:select * from表名where条件group by字段order by字段limit start, count
limit总是出现在select语句的最后
start代表开始行号,行号从0开始编号
count代表要显示多少行
省略start,默认从0开始,从第一行开始

-- 查询前三行记录
select * from students limit 0,3;
select * from students limit 3;-- 查询从第4条记录开始的三行记录
select * from students limit 3,3;

当有where或者group by或者order by ,limit总是出现在最后

-- 查询年龄最大同学的name
select name from students order by age desc limit 1;-- 查询年龄最小女同学的name
select name from students where sex='女' order by age limit 1;

2. 数据分页显示

m 每页显示多少条记录
n 第n页
把计算结果写到limit后面:imit(n-1)* m, m

-- 每页显示4条记录,第3页的结果
select * from students limit 8,4-- 每页显示4条记录,第2页的结果
select * from students limit 4,4

3. 求总页数

已知每页记录数,求一张表需要几页显示完 ,
。求总页数
。总页数/每页的记录数
。如果结果是整数,那么就是总页数,如果结果有小数,那么就在结果的整数上+1

-- 每页显示5条记录,分别多条select显示每页的记录
select * from students limit 5;
select * from students limit 5,5;
select * from students limit 10,5;

九、多表链接查询

写SQL三步法

  • 搭框架
    基本的select语句框架搭建起来,如果有多表,把相应的多表也联合进来。
  • 看条件
    决定where后面的具体条件
  • 显示的字段
    select后面到底要显示什么字段

1.内连接

把两张表相同的地方查询出来
在这里插入图片描述
内链接最重要的是找对两张表要关联的字段
语法1:select * from 表1 inner join 表2 on 表1.字段=表2.字段;
语法2:select * from 表1,表2 where 表1.字段=表2.字段;(隐式内连接)

-- students表与socres内连接,只显示name,课程号,成绩
select name 姓名,courseNo 课程号,score 成绩
from students stu
inner join scores sc
on stu.studentNo = sc.studentNo;
  1. 带有 where条件的内连接
    语法:select * from 表1 inner join 表2 on 表1.字段=表2.字段 where 条件;
-- 查询王昭君,并且成绩小于90 的信息,要求只显示姓名、课程号、成绩
select name,courseNo,score from students stu
inner join scores sc on stu.studentNo = sc.studentNo
where name='王昭君' and score < 90;
  1. 多表内链接
-- 三张表的链接
select * from students stu
inner join scores sc
on stu.studentNo = sc.studentNo
inner join courses cs
on sc.courseNo=cs.courseNo;-- 查询所有学生的" linux"课程成绩,要求只显示姓名、成绩、课程名
select name,score,coursename from students stu
inner join scores sc
on stu.studentNo = sc.studentNo
inner join courses cs
on sc.courseNo=cs.courseNo
where coursename='linux';
  1. order by内连接
-- 查询成绩最高的男生信息,要求显示姓名、课程名、成绩
select name,score,coursename from students stu
inner join scores sc
on stu.studentNo = sc.studentNo
inner join courses cs
on sc.courseNo=cs.courseNo
where sex='男'
order by score desc limit 1;

2.左连接

包括了内连接,同时还查询左表特有的内容
不存在的数据使用null填充
在这里插入图片描述
语法1:select * from 表1 left join 表2 on 表1.字段=表2.字段;

3.右链接

包括了内连接,同时还查询右表特有的内容
不存在的数据使用null填充
在这里插入图片描述
语法1:select * from 表1 right join 表2 on 表1.字段=表2.字段;

4. 自关联

自关联是同一张表做连接查询;
自关联下,一定找到同一张表可关连的不同字段。

-- 查询省的个数
select count(*) from areas where pid is null;-- 查询 广东省有多少个市
select * from areas a1 INNER JOIN areas a2 on a1.id=a2.pid 
WHERE a1.name='广东省';

5. 子查询

子查询是嵌套到主查询里面的
子查询做为主查询的数据源或者条件
子查询是独立可以单独运行的查询语句
主查询不能独立独立运行,依赖子查询的结果

-- 查询 年龄比平均年龄大的所有学生
select * from students where age > (select avg(age) from students);

表级子查询:

-- 查询所有女生的信息和成绩
-- 子查询
select * from (select * from students where sex='女') stu
inner join scores sc on stu.studentNo = sc.studentNo-- 内连接
select * from students stu inner join scores sc
on stu.studentNo = sc.studentNo
where sex ='女';

6. 练习

表:
在这里插入图片描述

-- 1.1列出男职工的总数和女职工总数
select count(*) from employees group by sex;-- 1.2列出非党员职工的总数
select count(*) 总数 from employees where politicalstatus!='党员';-- 1.3列出所有职工工号,姓名以及所在部门名称
select employees.deptid,employees.empname,departments.deptname from employees
inner join departments on employees.deptid=departments.deptid;-- 1.4列出所有职工工号,姓名和对应工资
select employees.deptid,employees.empname,salary.salary from employees
inner join salary on employees.empid=salary.empid;-- 1.5列出领导岗的姓名以及所在部门名称
select employees.empname,departments.deptname from employees
inner join departments on employees.deptid=departments.deptid
where employees.leader is null;-- 1.6列出职工总人数大于4的部门号和总人数
select count(*) 总人数,departments.deptid from employees
inner join departments on employees.deptid=departments.deptid
group by employees.deptid
having count(*) > 4;-- 1.7列出职工总人数大于4的部门号和部门名称
select count(*) 总人数,departments.deptname from employees
inner join departments on employees.deptid=departments.deptid
group by employees.deptid
having count(*) > 4;-- 1.8列出开发部和测试部的职工号,姓名
select employees.empname,departments.deptid from employees
inner join departments on employees.deptid=departments.deptid
where departments.deptname in('开发部','测试部');-- 1.9列出市场部所有女职工的姓名和政治面貌
select e.empname,d.deptid from employees e
inner join departments d on e.deptid=d.deptid
where d.deptname='市场部' and e.sex='女';-- 1.10显示所有职工姓名和工资,包括没有工资的职工姓名
select e.empname,s.salary from employees e
left join salary s on e.empid=s.empid;-- 1.11求不姓孙的所有职工工资总和
select sum(salary) from employees e
inner join salary s on e.empid=s.empid
where not e.empname like '孙%';

十、MySQL 内置函数

内置函数可以用在 where条件后面,聚合函数一定不可以!

1. 字符串函数

1. 拼接字符串 concat

concat(参数1,参数2,参数3,参数n)
参数可以是数字,也可以是字符串
把所有的参数连接成一个完整的字符串

select concat(11,'sj21','000') -- 11sj21000

2. 字符串长度 length

注意:一个utf8格式的汉字,length返回3

select length('sj21000') -- 7
select length('我是猪猪') -- 12-- 查询表students 中name长度等于9 (三个utf8格式的汉字)的学生信息
select * from students where length(name) = 9;

3. 截取字符串

汉字、字母不区分

  1. left(str,n) 从左截取 n个字符
select left('是猪猪ooo',4) -- 是猪猪o
  1. right(str,n) 从右截取 n个字符
select right('是猪猪ooo',4) -- 猪ooo
  1. substring(str,star,n) 从star截取 n个字符
select substring('是猪猪ooo',2,3) -- 猪猪o

练习

-- 截取students 表中所有学生的姓
select left(name,1) from students;
select substring(name,1,1) from students;-- 查询students 表的card 字段,截取出生年月日,显示李白的生日
select name,substring(card,7,8) from students where name='李白';-- 查询students 表的所有学生信息,按生日从大到小排序
select * from students order by substring(card,7,8); 

4. 去空格

  1. ltrim(str) 去除左边空格
  2. rtrim(str) 去除右边空格
  3. trim(str) 去除两边空格
select ltrim('      是猪猪ooo  ') 
select rtrim(' 是猪猪ooo       ') 
select trim(' 是猪猪ooo       ') 

2. 数学函数

1. 四舍五入 round

round(n,d) n表示原数,d表示小数位置,默认为0

-- 四舍五入,保留整数位
select round(1.658) -- 2
-- 四舍五入,保留小数点后2位
select round(1.658,2) -- 1.66-- 查询students表中学生的平均年龄,并四舍五入
select round(avg(age)) from students;

2. 随机数 rand

round(); 每次运行会产生一个从0-1之间的浮点数
经常用rand进行随机排序: order by rand()

select rand();-- 从学生表中随机抽出一个学生
select name from students order by rand() limit 1; 

3. 日期、时间函数

-- current date返回系统日期
select current_date();-- current time返回系统时间
select current_time();-- 返回系统日期与时间
select now();-- 插入当前时间
insert into a values(1,now())

十一、了解

1. 视图

视图就是对select语句的封装
视图可以理解为一张只读的表,针对视图只能用select,不能用delete和update

-- 创建一个视图,查询所有男生信息
create VIEW stu_male as
select * from students where sex='男';-- 使用视图
select * from stu_male INNER JOIN scores 
on stu_male.studentNo = scores.studentNo;-- 删除视图
drop VIEW stu_male;
drop VIEW if EXISTS stu_male;

2. 事务

事务广泛的运用于订单系统、银行系统等多种场景;

事务是多条更改数据操作sql语句集合
一个集合数据有一致性,要么就都失败,要么就都成功

  • begin --开始事务
  • rollback --回滚事务,放弃对表的修改
  • commit --提交事务,对表的修改生效
    没有写begin代表没有事务,没有事务的表操作都是实时生效。
    如果只写了begin,没有rollback,也没有commit,系统退出,结果是rollback

回滚事务操作

-- 开启事务,
-- 删除students 表中studentNo 为001 的记录,
-- 同时删除scores 表中studentNo 为001 的记录,
-- 回滚事务,两个表的删除同时放弃-- 开始事务
begin;
delete from students where studentNo='001';
delete from scores where studentNo='001';
-- 回滚事务,放弃更改
rollback;select * from students;
select * from scores;

提交事务

-- 开启事务,
-- 删除students 表中studentNo 为001 的记录,
-- 同时删除scores 表中studentNo 为001 的记录,
-- 提交事务,两个表的删除同时生效-- 开始事务
begin;
delete from students where studentNo='001';
delete from scores where studentNo='001';
-- 提交事务,一旦提交,两个删除操作同时生效
commit;select * from students;
select * from scores;

3. 索引

index
给表建立索引,目的是加快select查询的速度
如果一个表记录很少,几十条,或者几百条,不用索引
表的记录特别多,如果没有索引I,select语句效率会非常低

创建索引

语法:create index 索引名称 on 表名(字段名称(长度);

如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致;
字段类型如果不是字符串, 可以不填写长度部分。

-- 例1:为表students的age字段创建索引,名为age_ index
create index age_index on students(age);
-- 例2:为表students的name字段创建索引,名为name_ index
create index name_index on students(name(10);-- 查询表中age等于30的学生
-- 这里会自动调用age_index
select * from students where age=30;
-- 不会调用任何索引,因为sex字段没有索引
select * from students where sex='女';

查看索引

语法:show index from 表名;

show index from students;

删除索引

语法:drop index 索引名 on 表名;

drop index age_index on students;

索引优缺点

提高select的查询速度;
降低update,delete和insert语句的执行速度;
项目中80%以上是select,所以index必须的;
在实际工作中如果涉及到大量的数据修改操作,修改之前可以把索弓|删除修改完成后再把索引建立起来。

十二、基于命令行的mysql

mysql -h mysql的服务器的地址 -u 用户名 -p
如果是使用本机的mysql: mysql -u root -p

cmd登录之后的命令

  • show databases 显示系统所有的数据库;
  • use 数据库名:使用指定的一个数据库
    使用mydb数据库:use mydb
  • show tables 查看指定数据库有多少表
    如果命令行默认字符集与数据库默认字符集不同
    在windows默认字符集是gbk: set names gbk;
    告诉mysql,客户端用的字符集是gbk

选择了数据库以后就可以查看数据库有多少表

在命令行中每条sgl语句用;结尾
可以通过desc表名查看一个表的字段结构:

  • desc students
  • 查看students每个字段的定义

在命令行下创建和删除数据库

create database 数据库名 default charset 字符集

--创建一个数据库mytest ,默认字符集为utf8
create database mytest default charset utf8;
-- 删除数据库mytest
drop database mytest
drop database if exists mytest;

相关文章:

MySQL 基础使用

文章目录 一、Navicat 工具链接 Mysql二、数据库的使用1.常用数据类型2. 建表 create3. 删表 drop4. insert 插入数据5. select 查询数据6. update 修改数据7. delete 删除记录truncate table 删除数据 三、字段约束字段1. 主键 自增delete和truncate自增长字段的影响 2. 非空…...

✌粤嵌—2024/4/3—合并K个升序链表✌

代码实现&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* merge(struct ListNode *l1, struct ListNode *l2) {if (l1 NULL) {return l2;}if (l2 NULL) {return l1;}struct Lis…...

企业微信主体的修改方法

企业微信变更主体有什么作用&#xff1f;当我们的企业因为各种原因需要注销或已经注销&#xff0c;或者运营变更等情况&#xff0c;企业微信无法继续使用原主体继续使用时&#xff0c;可以申请企业主体变更&#xff0c;变更为新的主体。企业微信变更主体的条件有哪些&#xff1…...

C++的封装(十):数据和代码分离

封装的好处当然是非常多的。就不一一例举了。但封装也制造了访问壁垒。如果你是初学者&#xff0c;当你面对一堆封装好的C类一筹莫展&#xff0c;不知道从哪里下手时… 可以试试这个方法&#xff0c;数据和代码分离。 就是说&#xff0c;class只写方法&#xff0c;数据都放到…...

第十五届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组(基础题)

试题 C: 好数 时间限制 : 1.0s 内存限制: 256.0MB 本题总分&#xff1a;10 分 【问题描述】 一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位 &#xff09;上 的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位 &…...

模板的进阶

目录 非类型模板参数 C11的静态数组容器-array 按需实例化 模板的特化 函数模板特化 类模板特化 全特化与偏特化 模板的分离编译 总结 非类型模板参数 基本概念&#xff1a;模板参数类型分为类类型模板参数和非类类型模板参数 类类型模板参数&#xff1a;跟在class…...

微服务中Dubbo通俗易懂讲解及代码实现

当你在微服务架构中需要不同服务之间进行远程通信时&#xff0c;Dubbo是一个优秀的选择。Dubbo是一个高性能的Java RPC框架&#xff0c;它提供了服务注册、发现、调用、负载均衡等功能&#xff0c;使得微服务之间的通信变得简单而高效。 让我们来看一下Dubbo的通俗易懂的解释和…...

Unity HDRP Release-Notes

&#x1f308;HDRP Release-Notes 收集的最近几年 Unity各个版本中 HDRP的更新内容 信息收集来自自动搜集工具&#x1f448; &#x1f4a1;HDRP Release-Notes 2023 &#x1f4a1;HDRP Release-Notes 2022 &#x1f4a1;HDRP Release-Notes 2021...

Chrome将网页保存为PDF的实战教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

zotero7+Chat GPT实现ai自动阅读论文

关于这一部分的内容我在哔哩哔哩上发布了视频教程 视频链接见&#xff1a; zotero7GPT AI快速阅读文献_哔哩哔哩_bilibili 相关下载的官方链接如下&#xff1a; 1、zotero7 测试版官方下载链接&#xff1a; https://www.zotero.org/support/beta_builds 2、 InfiniCLOUD 云…...

STM32外设配置以及一些小bug总结

USART RX的DMA配置 这里以UART串口1为例&#xff0c;首先点ADD添加RX和TX配置DMA&#xff0c;然后模式一般会选择是normal&#xff0c;这个模式是当DMA的计数器减到0的时候就不做任何动作了&#xff0c;还有一种循环模式&#xff0c;是计数器减到0之后&#xff0c;计数器自动重…...

【数据结构与算法】:10道链表经典OJ

目录 1. 移除链表元素2. 反转链表2.1反转指针法2.2 头插法 3. 合并两个有序链表4. 分隔链表5. 环形链表6. 链表的中间节点7. 链表中倒数第K个节点8. 相交链表9. 环形链表的约瑟夫问题10. 链表的回文结构 1. 移除链表元素 思路1&#xff1a;遍历原链表&#xff0c;将 val 所在的…...

Python SQL解析和转换库之sqlglot使用详解

概要 Python SQLGlot是一个基于Python的SQL解析和转换库,可以帮助开发者更加灵活地处理和操作SQL语句。本文将介绍SQLGlot库的安装、特性、基本功能、高级功能、实际应用场景等方面。 安装 安装SQLGlot库非常简单,可以使用pip命令进行安装: pip install sqlglot安装完成后…...

NULL—0—nullptr 三者关系

1.概述 NULL&#xff0c;0&#xff0c;nullptr值都是0&#xff0c;但是类型不同&#xff0c;但是由于C头文件中NULL定义宏混乱&#xff0c;可能是int 0&#xff0c;也可能是(void*)0; 所以在C11及以后的标准中引入新的空指针nullptr&#xff0c;nullptr就是(void*)0&#xff…...

Nginx 请求的 匹配规则 与 转发规则

博文目录 文章目录 URL 与 URI匹配规则案例说明 转发规则响应静态资源案例说明 转发动态代理案例说明案例说明 URL 与 URI 通常, 一个 URL 由以下部分组成 scheme://host:port/path?query#fragment scheme: 协议, 如 http, https, ftp 等host; 主机名或 IP 地址post: 端口…...

OWASP发布10大开源软件风险清单

3月20日&#xff0c;xz-utils 项目被爆植入后门震惊了整个开源社区&#xff0c;2021 年 Apache Log4j 漏洞事件依旧历历在目。倘若该后门未被及时发现&#xff0c;那么将很有可能成为影响最大的软件供应链漏洞之一。近几年爆发的一系列供应链漏洞和风险&#xff0c;使得“加强开…...

大学生前端学习第一天:了解前端

引言&#xff1a; 哈喽&#xff0c;各位大学生们&#xff0c;大家好呀&#xff0c;在本篇博客&#xff0c;我们将引入一个新的板块学习&#xff0c;那就是前端&#xff0c;关于前端&#xff0c;GPT是这样描述的&#xff1a;前端通常指的是Web开发中用户界面的部分&#xff0c;…...

公安机关人民警察证照片采集规范及自拍制作电子版指南

在当今社会&#xff0c;证件照的拍摄已成为我们生活中不可或缺的一部分。无论是办理身份证、驾驶证还是护照&#xff0c;一张规范的证件照都是必需的。而对于公安机关的人民警察来说&#xff0c;证件照片的采集更是有着严格的规范和要求。本文将为您详细介绍公安机关人民警察证…...

使用Python插入100万条数据到MySQL数据库并将数据逐步写出到多个Excel

Python插入100万条数据到MySQL数据库 步骤一&#xff1a;导入所需模块和库 首先&#xff0c;我们需要导入 MySQL 连接器模块和 Faker 模块。MySQL 连接器模块用于连接到 MySQL 数据库&#xff0c;而 Faker 模块用于生成虚假数据。 import mysql.connector # 导入 MySQL 连接…...

【备忘录】openssl记录

openssl genrsa -out ca.key 2048 openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj “/CCN/STBeijing/LBeijing/Okubernetes/OUKubernetes-manual/CNkubernetes-ca” openssl genrsa -out etcd-ca.key 2048 openssl req -x509 -new -nodes -key etc…...

hadoop编程之工资序列化排序

数据集展示 7369SMITHCLERK79021980/12/17800207499ALLENSALESMAN76981981/2/201600300307521WARDSALESMAN76981981/2/221250500307566JONESMANAGER78391981/4/22975207654MARTINSALESMAN76981981/9/2812501400307698BLAKEMANAGER78391981/5/12850307782CLARKMANAGER78391981/…...

OpenXR手部跟踪接口与VIVE OpenXR扩展详细解析

随着虚拟现实技术的发展&#xff0c;手部跟踪已成为提高沉浸感和交互性的关键技术。OpenXR标准为开发者提供了一套手部跟踪的扩展接口&#xff0c;特别是针对VIVE设备的特定实现。以下是这些接口和类的详细解释&#xff1a; 1. VIVE.OpenXR.Hand VIVE.OpenXR.Hand 是HTC VIVE…...

慎投!5本On Hold全被剔除!新增9本SCI/SSCI被除名!4月WOS更新

本周投稿推荐 SSCI • 2/4区经管类&#xff0c;2.5-3.0&#xff08;录用率99%&#xff09; SCIE&#xff08;CCF推荐&#xff09; • 计算机类&#xff0c;2.0-3.0&#xff08;最快18天录用&#xff09; SCIE&#xff08;CCF-C类&#xff09; • IEEE旗下&#xff0c;1/2…...

华为云CodeArts IDE For Python 快速使用指南

CodeArts IDE 带有 Python 扩展&#xff0c;为 Python 语言提供了广泛的支持。Python 扩展可以利用 CodeArts IDE 的代码补全、验证、调试和单元测试等特性&#xff0c;与多种 Python 解释器协同工作&#xff0c;轻松切换包括虚拟环境和 conda 环境的 Python 环境。本文简要概述…...

C# 截图并保存为图片

在winform开发中&#xff0c;有时会用到截图并保存为图片的时候&#xff0c;这里列了三种保存图片的可能情况。 将窗体截图保存成图片的方式是&#xff1a; Bitmap bit new Bitmap(this.Width, this.Height);//实例化一个和窗体一样大的bitmap Graphics g Graphics.FromImag…...

[html]一个动态js倒计时小组件

先看效果 代码 <style>.alert-sec-circle {stroke-dasharray: 735;transition: stroke-dashoffset 1s linear;} </style><div style"width: 110px; height: 110px; float: left;"><svg style"width:110px;height:110px;"><cir…...

Hive-Sql复杂面试题

参考链接&#xff1a;hive sql面试题及答案 - 知乎 有哪些好的题目都可以给我哦 我来汇总到一起 1、编写sql实现每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数 数据&#xff1a; userid,month,visits A,2015-01,5 A,2015-01,15 B,2015-01,5 A,2015-01,…...

WPS二次开发系列:WPS SDk功能就概览

作者持续关注WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 作者通过深度测试使用了WPS SDK提供的Demo&#xff0…...

华为OD-C卷-结队编程[200分]

题目描述 某部门计划通过结队编程来进行项目开发, 已知该部门有 N 名员工,每个员工有独一无二的职级,每三个员工形成一个小组进行结队编程, 结队分组规则如下: 从部门中选出序号分别为 i、j、k 的3名员工,他们的职级分别为 level[i],level[j],level[k], 结队小组满…...

连连看游戏页面网站源码,直接使用

可以上传自己喜欢的图片 游戏页面 通关页面 源码免费下载地址抄笔记 (chaobiji.cn)...

在 Kubernetes 1.24 中使用 Docker:配置与应用指南

在 Kubernetes 1.24 中使用 Docker&#xff1a;配置与应用指南 引言 随着 Kubernetes 社区对容器运行时接口&#xff08;CRI&#xff09;的标准化推进&#xff0c;Docker 原生支持在 Kubernetes 1.24 版本中被弃用。然而&#xff0c;许多开发者和组织仍希望继续使用 Docker。…...

Canvas使用详细教学:从基础绘图到进阶动画再到实战(海报生成、Flappy Bird 小游戏等),掌握绘图与动画的秘诀

一、Canvas基础 1. Canvas简介 Canvas是HTML5引入的一种基于矢量图形的绘图技术&#xff0c;它是一个嵌入HTML文档中的矩形区域&#xff0c;允许开发者使用JavaScript直接操作其内容进行图形绘制。Canvas元素不包含任何内在的绘图能力&#xff0c;而是提供了一个空白的画布&a…...

【MATLAB 分类算法教程】_2粒子群算法优化支持向量机SVM分类 - 教程和对应MATLAB代码

分类代码案例2:粒子群算法优化支持向量机SVM分类 - MATLAB完全代码教程 1. 初始化代码2. 读取数据代码3.数据预处理代码4.利用粒子群算法PSO求解最佳的SVM参数c和g代码5.根据最佳的参数进行SVM模型训练代码6.SVM模型预测代码7.准确率分析以及分类结果对比作图代码本文以红酒数…...

Vue2电商前台项目(三):完成Search搜索模块业务

目录 一、请求数据并展示 1.写Search模块的接口 2.写Vuex中的search仓库&#xff08;三连环&#xff09; 3.组件拿到search仓库的数据 用getters简化仓库中的数据 4.渲染商品数据到页面 5.search模块根据不同的参数获取数据展示 &#xff08;1&#xff09;把派发action…...

算法思想总结:链表

一、链表的常见技巧总结 二、两数相加 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {//利用t来存进位信息int t0;ListNode*newheadnew ListNode(0);//创建一个哨兵节点&#xff0c;方便尾插List…...

Android Room 记录一个Update语句不生效的问题解决记录

代码展示 1.数据实体类 Entity public class User {PrimaryKey(autoGenerate true)private long id;private String name;private String age;private String sex;public User(String name, String age, String sex) {this.name name;this.age age;this.sex sex;}public …...

使用SpringBoot3+Vue3开发公寓管理系统

项目介绍 公寓管理系统可以帮助公寓管理员更方便的进行管理房屋。功能包括系统管理、房间管理、租户管理、收租管理、房间家具管理、家具管理、维修管理、维修师傅管理、退房管理。 功能介绍 系统管理 用户管理 对系统管理员进行管理&#xff0c;新增管理员&#xff0c;修改…...

有且仅有的10个常见的排序算法,东西不多,怎么就背不下来呢

就这么跟你说吧&#xff0c;面试中肯定会出排序算法的算法题&#xff0c;你只需要背下来代码背下来他们的时间复杂度和空间复杂度就能蒙混过关。 不管你是前端还是后端&#xff0c;关于排序的算法有且仅有这 10个&#xff0c;如果你用心了&#xff0c;怎么会记不住呢。看完这篇…...

Mac安装配置ElasticSearch和Kibana 8.13.2

系统环境&#xff1a;Mac M1 (MacOS Sonoma 14.3.1) 一、准备 从Elasticsearch&#xff1a;官方分布式搜索和分析引擎 | Elastic上下载ElasticSearch和Kibana 笔者下载的是 elasticsearch-8.13.2-darwin-aarch64.tar.gz kibana-8.13.2-darwin-aarch64.tar.gz 并放置到个人…...

javaWeb项目-快捷酒店管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、Spring Boot框架 …...

闲不住,手写一个数据库文档生成工具

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 逛博客的时候&#xff0c;发现了一个很有意思的文章&#xff1a;数据库表结构导…...

在群晖上安装GPT4Free

什么是 GPT4Free &#xff1f; GPT4Free 简称 G4F&#xff0c;是一个强大的大型语言模型命令行界面&#xff08;LLM-CLI&#xff09;&#xff0c;旨在去中心化并提供免费访问先进人工智能技术的能力。G4F 的目标是通过提供用户友好和高效的工具&#xff0c;使人工智能民主化&am…...

C# 语言类型(四)—传递参数及其修饰符

总目录 C# 语法总目录 参考链接&#xff1a; C#语法系列:C# 语言类型(一)—预定义类型值之数值类型 C#语法系列:C# 语言类型(二)—预定义类型之字符串及字符类型简述 C#语法系列:C# 语言类型(三)—数组/枚举类型/结构体 C#语法系列:C# 语言类型(四)—传递参数及其修饰符 C#语法…...

刷穿力扣006-剑指offer一数组——02寻找目标值-二维数组

刷穿力扣006-剑指offer<一>数组——02寻找目标值-二维数组 基本面试题都是我带大家刷的力扣热题100和剑指offer的75道题&#xff0c;建议刷两遍&#xff01;&#xff08;ps:想找工作实习的同学&#xff0c;文末有面试八股和简历模板&#xff09; 题目&#xff1a; 语言…...

爬虫(小案例)

点开其中一个链接&#xff0c; http://desk.zol.com.cn/dongman/huoyingrenzhe/&#xff08;前面为浏览器自动补全&#xff0c;在代码里需要自己补全&#xff09; 可以看到图片的下载地址以及打开本图集下一张图片的链接 了解完网站的图片构造后动手写代码&#xff0c;我们筛…...

环信 IM 客户端将适配鸿蒙 HarmonyOS

自华为推出了自主研发操作系统鸿蒙 HarmonyOS 后&#xff0c;国内许多应用软件开始陆续全面兼容和接入鸿蒙操作系统。环信 IM 客户端计划将全面适配统鸿蒙 HarmonyOS &#xff0c;助力开发者快速实现社交娱乐、语聊房、在线教育、智能硬件、社交电商、在线金融、线上医疗等广泛…...

伪元素的使用

.box::after{content: ;display: block;// 定义元素位置margin-top: 12rpx;margin-right: 20rpx;// 定义元素宽高width: 36rpx;height: 36rpx;// background-image无法引用本地资源&#xff0c;故需要用网络地址background-image: url($urlcalendar.png);background-size: 100%…...

TensorFlow学习之:高级应用和扩展

生成对抗网络&#xff1a;了解GAN的基本原理&#xff0c;使用TensorFlow实现简单的GAN 生成对抗网络&#xff08;Generative Adversarial Networks&#xff0c;GAN&#xff09;由两部分组成&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discrimin…...

maya模板导入动画

maya模板导入动画&#xff0c;第一帧为模板姿态 要将一个FBX文件中的动画数据导入另一个FBX文件的模板&#xff0c;并使得第一帧是模板的初始姿势&#xff0c;第二帧开始是动画&#xff0c;你可以在Maya中采用以下步骤来操作&#xff1a; 步骤 1: 导入模板FBX 首先&#xff…...

【微信小程序之分包】

微信小程序之分包 什么是分包分包的好处分包前的结构图分包后的结构图分包的加载规则分包的体积限制使用分包打包原则引用原则独立分包独立分包的配置方法独立分包的引用原则分包预下载配置分包的预下载分包预下载限制 什么是分包 分包指的是把一个完整小程序项目&#xff0c;…...

VUE中,图片正常显示但是触发了@error

我的项目中图片是从后端获取的&#xff0c;不能确定后端返回的图片链接是否能正常访问&#xff0c;并且希望当链接异常时直接不显示图片&#xff0c;而不是裂口的图片&#xff0c;所以我的代码如下&#xff1a; <img :src"logoUrl" class"logo" id&quo…...

Originx的创新解法之:应用程序故障篇

Originx并不期望做一个完整覆盖全栈的监控体系&#xff0c;而是利用北极星指标体系标准化找出故障方向&#xff0c;然后联动各种成熟的监控数据形成证据链条&#xff0c;并将各种数据融合在一个故障报告之中。更多信息请参考 Log | Metrics | Trace的联动方式探讨http://mp.wei…...

前端启若依项目 后端配置 若依

...

Linux查看进程命令ps和top

Linux 是一种自由和开放源代码的操作系统&#xff0c;它的使用在全球范围内非常广泛。在 Linux 中&#xff0c;进程是操作系统中最重要的组成部分之一&#xff0c;它代表了正在运行的程序。了解如何查看正在运行的进程是非常重要的&#xff0c;因为它可以帮助你了解系统的运行状…...

声纹识别在无人机探测上的应用

无人机在民用和军事领域的应用越来越广泛。然而&#xff0c;随着无人机数量的增加&#xff0c;"黑飞"现象也日益严重&#xff0c;对公共安全和隐私构成了威胁。因此&#xff0c;开发有效的无人机探测与识别技术变得尤为重要。及时发现黑飞无人机的存在进而对其型号进…...

5.15_操作符详解

1、操作符分类&#xff1a; 算术操作符 - * / % 移位操作符 << >> 位操作符 & | ^ 赋值操作符 - ...... 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2、算术操作符 - * / …...