MySQL 基础使用

文章目录


一、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 表名(字段名 字段类型,字段名 字段类型,)

sql 复制代码
-- 例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 表名;

sql 复制代码
-- 删除表a(再执行删除表a会报错)
drop table a;

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

4. insert 插入数据

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

sql 复制代码
-- 往表c 插入数据
insert into c values(001,'mario',23);

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

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

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

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

5. select 查询数据

语法:select * from 表名;

sql 复制代码
-- 查询表c的所有字段
select * from c;

-- 查询表c的name字段
select name from c;

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

6. update 修改数据

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

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

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

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

sql 复制代码
-- 修改表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 条件;

sql 复制代码
--删除所有记录
delete from c;

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

delete from c where id>=3;

truncate table 删除数据

语法:truncate table 表名;

sql 复制代码
-- 删除表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. 主键 + 自增

创建带约束的表和数据:

语法:

sql 复制代码
-- 创建表的主键 自增长,
create table 表名(
	字段名 数据类型 primary key auto_increment,
	字段名 数据类型 约束,
	...
);
sql 复制代码
-- 创建表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

sql 复制代码
insert into a values(0,'Jone1',32);
insert into a values(NULL,'Jone2',34);

delete和truncate自增长字段的影响

delete 删除数据:

truncate 删除数据:

2. 非空 not null

语法:

sql 复制代码
-- not null 字段不能为空
create table 表名(
	字段名 数据类型 not null,
	...
);
sql 复制代码
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

语法:

sql 复制代码
-- 创建表a id自增长,
create table 表名(
	字段名 数据类型 unique,
	...
);
sql 复制代码
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

语法:

sql 复制代码
create table 表名(
	字段名 数据类型 default xx,
	...
);
sql 复制代码
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别名和 字段名 别名结果是一样的

sql 复制代码
-- 通过as给字段起一个别名
select name as 姓名,sex as 性别 from students;

-- 别名的as可以省略
select name 姓名,sex 性别 from students;

表别名

sql 复制代码
-- 通过 表名as别名 起一个别名
select * from students as stu;

-- 别名的as可以省略
select * from students stu;

6. 过滤 distinct

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

sql 复制代码
select distinct sex,class from students;

四、条件查询

1. where 条件

sql 复制代码
-- 查询students 表中学号studentNo ="001"的记录
select * from students where studentNo ="001";

-- 查询students 表中年龄age等于30的姓名name,班级class
select name,class from students where age=30;

2. 运算符的查询语句

比较运算符

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

sql 复制代码
-- 查询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班";

逻辑运算符

sql 复制代码
-- 条件 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

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

sql 复制代码
-- 查询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 结束值 -->连续范围找包含开始值包含结束值

sql 复制代码
-- 查询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;

sql 复制代码
-- 空判断 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. 其他练习

sql 复制代码
-- 修改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;

sql 复制代码
-- 查询所有学生记录,按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(字段名)

sql 复制代码
-- 查询学生总数(查询stuents表有多少记录)
select count(*) from students;

-- 查询女同学数量
select count(*) from students where sex ="女";

-- 查询过滤相同性别后的总数
select count(distinct sex) from students;

2. max/min 最大/小值

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

sql 复制代码
-- 查询最大年龄
select max(age) from students;

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

select min(age) from students;

3. sum 求和

sum(字段名)

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

4. avg 平均值

avg(字段名)

sql 复制代码
-- 查询女同学的平均年龄
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 就是配合聚合函数使用的,不然没有意义!

sql 复制代码
-- 查询 男女同学的数量
select sex,count(*) from students group by sex;

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

小练习:

sql 复制代码
统计各个班级学生总数、平均年龄、最大年龄、最小年龄。但不统计'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,...聚合...

sql 复制代码
-- 用where查询男生总数
-- where先筛选复合条件的记录,然后在聚合统计
select count(*) from students where sex="男"

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

having配合聚合函数的使用:

sql 复制代码
-- 求班级人数大于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开始,从第一行开始

sql 复制代码
-- 查询前三行记录
select * from students limit 0,3;
select * from students limit 3;

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

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

sql 复制代码
-- 查询年龄最大同学的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

sql 复制代码
-- 每页显示4条记录,第3页的结果
select * from students limit 8,4

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

3. 求总页数

已知每页记录数,求一张表需要几页显示完 ,

。求总页数

。总页数/每页的记录数

。如果结果是整数,那么就是总页数,如果结果有小数,那么就在结果的整数上+1

sql 复制代码
-- 每页显示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.字段;(隐式内连接)

sql 复制代码
-- 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 条件;
sql 复制代码
-- 查询王昭君,并且成绩小于90 的信息,要求只显示姓名、课程号、成绩
select name,courseNo,score from students stu
inner join scores sc on stu.studentNo = sc.studentNo
where name='王昭君' and score < 90;
  1. 多表内链接
sql 复制代码
-- 三张表的链接
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内连接
sql 复制代码
-- 查询成绩最高的男生信息,要求显示姓名、课程名、成绩
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. 自关联

自关联是同一张表做连接查询;

自关联下,一定找到同一张表可关连的不同字段。

sql 复制代码
-- 查询省的个数
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. 子查询

子查询是嵌套到主查询里面的

子查询做为主查询的数据源或者条件

子查询是独立可以单独运行的查询语句

主查询不能独立独立运行,依赖子查询的结果

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

表级子查询:

sql 复制代码
-- 查询所有女生的信息和成绩
-- 子查询
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. 练习

表:

sql 复制代码
-- 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)

参数可以是数字,也可以是字符串

把所有的参数连接成一个完整的字符串

sql 复制代码
select concat(11,'sj21','000') -- 11sj21000

2. 字符串长度 length

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

sql 复制代码
select length('sj21000') -- 7
select length('我是猪猪') -- 12

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

3. 截取字符串

汉字、字母不区分

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

练习

sql 复制代码
-- 截取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) 去除两边空格
sql 复制代码
select ltrim('      是猪猪ooo  ') 
select rtrim(' 是猪猪ooo       ') 
select trim(' 是猪猪ooo       ') 

2. 数学函数

1. 四舍五入 round

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

sql 复制代码
-- 四舍五入,保留整数位
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()

sql 复制代码
select rand();

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

3. 日期、时间函数

sql 复制代码
-- current date返回系统日期
select current_date();

-- current time返回系统时间
select current_time();

-- 返回系统日期与时间
select now();

-- 插入当前时间
insert into a values(1,now())

十一、了解

1. 视图

视图就是对select语句的封装

视图可以理解为一张只读的表,针对视图只能用select,不能用delete和update

sql 复制代码
-- 创建一个视图,查询所有男生信息
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

回滚事务操作

sql 复制代码
-- 开启事务,
-- 删除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;

提交事务

sql 复制代码
-- 开启事务,
-- 删除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 表名(字段名称(长度);

如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致;

字段类型如果不是字符串, 可以不填写长度部分。

sql 复制代码
-- 例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 表名;

sql 复制代码
show index from students;

删除索引

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

sql 复制代码
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 字符集

sql 复制代码
--创建一个数据库mytest ,默认字符集为utf8
create database mytest default charset utf8;
-- 删除数据库mytest
drop database mytest
drop database if exists mytest;
相关推荐
高兴就好(石2 小时前
DB-GPT部署和试用
数据库·gpt
这孩子叫逆2 小时前
6. 什么是MySQL的事务?如何在Java中使用Connection接口管理事务?
数据库·mysql
Karoku0662 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
码农郁郁久居人下3 小时前
Redis的配置与优化
数据库·redis·缓存
MuseLss4 小时前
Mycat搭建分库分表
数据库·mycat
Hsu_kk4 小时前
Redis 主从复制配置教程
数据库·redis·缓存
DieSnowK4 小时前
[Redis][环境配置]详细讲解
数据库·redis·分布式·缓存·环境配置·新手向·详细讲解
程序猿小D5 小时前
第二百三十五节 JPA教程 - JPA Lob列示例
java·数据库·windows·oracle·jdk·jpa
Flerken1015 小时前
数据库语言、SQL语言、数据库系统提供的两种语言
数据库·sql·oracle
掘根5 小时前
【网络】高级IO——poll版本TCP服务器
网络·数据库·sql·网络协议·tcp/ip·mysql·网络安全