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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/822540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat 获取客户端真实IP X-Forwarded-For

Tomcat 获取客户端真实IP X-Forwarded-For 代码实现&#xff1a; 在Host标签下面添加代码&#xff1a; <Valve className"org.apache.catalina.valves.RemoteIpValve" remoteIpHeader"x-forwarded-for" remoteIpProxiesHeader"x-forwarded-by&q…

Linux命令学习—Iptables 防火墙(上)

1.1、防火墙 1、防火墙的定义 所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上 构造的保护屏障.是一种获取安全性方法的形象说法&#xff0c;它是一种计算机硬件和软件的结合&#xff0c;使 Internet 与 Intranet 之间建立起…

大功率Boost升压电路实例设计

项目介绍及参数要求 指标参数光伏额定功率: 4000W光伏最大输入电压: 350V光伏最小输入电压: 150V母线电压(Boost电路输出电压): 600V电流纹波率

野生动物保护视频AI智能监管方案,撑起智能保护伞,守护野生动物

一、背景 在当今世界&#xff0c;野生动物保护已经成为全球性的重要议题。然而&#xff0c;由于野生动物生存环境的不断恶化以及非法狩猎等活动的盛行&#xff0c;保护野生动物变得尤为迫切。为了更有效地保护野生动物&#xff0c;利用视频智能监管技术成为一种可行的方案。 …

Java springboot使用EasyExcel读Excel文件,映射不到属性值,对象属性值都是null

如果你的类上有这个注解&#xff0c;去掉火或注释掉就可以了 Accessors(chain true)解决方法

IO流高级流

前言 缓冲区能够提升输入输出的效率 虽然FileReader和FileWriter中也有缓冲区 但是BufferedReader和BufferWriter有两个非常好用的方法. 缓冲流 字节缓冲流 import java.io.*;public class BufferedStreamDemo {public static void main(String[] args) throws IOExceptio…

「JavaEE」线程

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;JavaEE &#x1f387;欢迎点赞收藏加关注哦&#xff01; 线程 &#x1f349;线程&#x1f34c;多线程&#x1f34c;线程与进程的联系&区别&#x1f34c;多线程编程&#x1f34c;创建线程&a…

02_对象树

#include "mypushbutton.h" #include <QDebug>MyPushButton::MyPushButton(QWidget *parent): QPushButton(parent) {qDebug()<<"我的按钮类构造调用"; }MyPushButton::~MyPushButton() {qDebug()<<"我的按钮类析构调用"; }交…

若依从0到1部署

服务器安装 MySQL8 Ubuntu 在 20.04 版本中&#xff0c;源仓库中 MySQL 的默认版本已经更新到 8.0&#xff0c;因此可以直接使用 apt-get 安装。 设置 apt 国内代理 打开 https://developer.aliyun.com/mirror/ 阿里云镜像站&#xff0c;找到适合自己的系统&#xff1a; 找…

轻松查询车辆信息的全能接口

在当今社会&#xff0c;车辆已经成为人们出行的重要工具之一。当我们在二手车买卖、事故处理或者其他需要查询车辆详细信息的情况下&#xff0c;我们通常需要耗费大量时间和精力去收集相关的资料。幸好&#xff0c;有了车辆信息查询接口&#xff0c;我们可以通过输入车架号vin来…

SSH协议的优缺点

SSH&#xff08;Secure Shell&#xff09;是一种用于在计算机网络上进行安全远程访问和执行命令的协议。提供加密通信通道&#xff0c;防止敏感信息在传输过程中被窃听或篡改。SSH还支持文件传输和端口转发等功能&#xff0c;使其成为广泛使用的安全远程管理工具。 1. 安全远程…

【设计模式】聊聊观察者设计模式原理及应用

原理 观察者模式属于行为模式&#xff0c;行为模式主要解决类和对象之间交互问题。 含义&#xff1a;在对象之间定义一个一对多的依赖&#xff0c;当一个对象状态改变时&#xff0c;所有依赖的对象会自动通知。 被依赖的对象被观察者(Observable) &#xff0c;依赖的对象观察…

Go: 理解 Sync.Pool 的设计

sync 包提供了一个强大且可复用的实例池&#xff0c;以减少 GC 压力。在使用该包之前&#xff0c;我们需要在使用池之前和之后对应用程序进行基准测试。这非常重要&#xff0c;因为如果不了解它内部的工作原理&#xff0c;可能会影响性能。 池的限制 我们来看一个例子以了解它…

【电控笔记3.5】三相逆变器

基础 大小调变指标ma 频率调变指标mf 载波频率:pwm频率

日本极致产品力 | 井村屋红豆棒冰如何年销2.5亿根

《极致产品力》日本深度研学是一个顾问式课程,可以帮助企业找产品、找方向、找方法,在日本终端市场考察中洞悉热销产品背后的成功逻辑&#xff0c;了解最新最前沿的产品趋势和机会。结合日本消费趋势中国转化的众多经验,从品牌、包装、卖点、技术和生产艺等多方面寻找中国市场的…

MoCo v2 论文解读

paper&#xff1a;Improved Baselines with Momentum Contrastive Learning official implementation&#xff1a;https://github.com/facebookresearch/moco 这篇文章的内容只有2页&#xff0c;不能称之为paper&#xff0c;作者本人也称之为note。主要内容就是将SimCLR中的两…

1.5MHz,1.2A COT 架构同步降压变换器只要0.16元,型号:LN3435

推荐原因 1.5MHZ的开关频率&#xff0c;可以使用小电感&#xff0c;1.2A满足多数应用&#xff0c;价格感人&#xff0c;只要0.16元 产品概述 LN3435是一款电流模COT架构同步降压开关稳压器。 输入范围为 2.7V-6.0V&#xff0c;可提供 1.2A 的连续输出电流。 内部集成了低内阻…

学习Rust的第4天:常见编程概念

基于Steve Klabnik的《The Rust Programming Language》一书。昨天我们做了一个猜谜游戏 &#xff0c;今天我们将探讨常见的编程概念&#xff0c;例如&#xff1a; Variables 变量Constants 常数Shadowing 阴影Data Types 数据类型Functions 功能 Variables 变量 In layman ter…

C语言入门第四天(数组)

一、C语言数组的基本语法 1.数组的定义 数组是 C 语言中的一种数据结构&#xff0c;用于存储一组具有相同数据类型的数据。数组中的每个元素可以通过一个索引&#xff08;下标&#xff09;来访问&#xff0c;索引从 0 开始&#xff0c;最大值为数组长度减 1。 2.定义语法格式 …

4个步骤:如何使用 SwiftSoup 和爬虫代理获取网站视频

摘要/导言 在本文中&#xff0c;我们将探讨如何使用 SwiftSoup 库和爬虫代理技术来获取网站上的视频资源。我们将介绍一种简洁、可靠的方法&#xff0c;以及实现这一目标所需的步骤。 背景/引言 随着互联网的迅速发展&#xff0c;爬虫技术在今天的数字世界中扮演着越来越重要…