本文使用 Zhihu On VSCode 创作并发布
登录
本地登录命令:mysql -u 用户名 -p
▶ mysql -u jinl -p
然后按回车输入密码。
指定端口登录
▶ mysql -u jinl -p -P 3306
指定IP地址以及端口登录
▶ mysql -h 127.0.0.1 -u jinl -p -P 3306
增删改查
增
- 增加两个表,一个是user表,一个是grade表。
新增表的语法为create table table_name(column_name ,column_contrains);
例子:
create table grade(
id int primary key,
chinese int,
math int
) default charset=utf8
- 添加字段
-- 字段默认加在最后,在后面加上First加在首位, 要加中间位置加的话,加个 After [存在的字段]
alter table <表名> add column <字段> <数据类型> <约束> <字段位置>;
alter table jinl add column test text not null First;
- 添加数据:
insert into table_name(column_1, column_2......)
values
(value_1, value_2......)
insert into user(id, name, sex)
values
(2, daoli, girl)
有这么两个表:
user
+------+----------+------+
| id | name | sex |
+------+----------+------+
| 2 | daoli | girl |
| 3 | jinl1874 | boy |
| 4 | jinl | boy |
| 1 | jinl | girl |
+------+----------+------+
grade
+------+---------+------+
| id | chinese | math |
+------+---------+------+
| 1 | 10 | 30 |
| 2 | 60 | 100 |
| 3 | 50 | 90 |
+------+---------+------+
查
- 基本语句:
SELECT fields from table_name
while condition
limit n
offset m
condition 是查询的条件,
limit 是限制返回的查询条数,
offset 是 Select 语句开始查询的偏移量。
condition 里的各个操作符:
<, >, =, >=, <=,
in 表示属于,
<> 和 != 表示不等于。
一般用 not exists 代替,这样可以最大限度使用索引。
like 子句,如果没有%,那么和 = 的作用是一样的。
% 表示替代任意字符,与正则表达式里的 * 类似。
- 排序:order by 字段 asc(升序)/dasc (降序)
功能:就是以某个字段升序降序。
例子:从用户表查找id并升序显示select id, name from user oreder by id ase
mysql> select id, name from user order by id;
+------+----------+
| id | name |
+------+----------+
| 1 | jinl |
| 4 | jinl |
| 2 | daoli |
| 3 | jinl1874 |
+------+----------+
4 rows in set (0.00 sec)
- 分组: group by 字段
功能:当查询结果里某个字段有重复的时候,就可以使用group by 某个字段来分组。
例子:select name from user groub by name
,其结果为
mysql> select id, name from user group by name;
+------+----------+
| id | name |
+------+----------+
| 2 | daoli |
| 3 | jinl1874 |
| 1 | jinl |
+------+----------+
3 rows in set (0.00 sec)
还可以加个count,统计每个字段的数据。
mysql> select id, name, count(name) from user group by name;
+------+----------+-------------+
| id | name | count(name) |
+------+----------+-------------+
| 2 | daoli | 1 |
| 3 | jinl1874 | 1 |
| 1 | jinl | 2 |
+------+----------+-------------+
3 rows in set (0.00 sec)
- 去重
select [DISTINCT] fields from table
[where conditions]
union [ALL]
select fields from table
去除重复的数据,一般Union会去除重复的数据,所以不需要DISTINCT。
-- ALL 表示所有的字段都去重
mysql> select name from user
union
select name from user;
+----------+
| name |
+----------+
| daoli |
| jinl1874 |
| jinl |
+----------+
3 rows in set (0.01 sec)
使用DISTINCT去重
mysql> select distinct name from user;
+----------+
| name |
+----------+
| daoli |
| jinl1874 |
| jinl |
+----------+
3 rows in set (0.01 sec)
- 连接
分为内连接和外连接。
外连接里有左右连接,左连接是指取左边的全部,右边的边按照条件来。
-- 不加括号可能会报错
select name, math from (user) left join grade on (user.id = grade.id);
+----------+------+
| name | math |
+----------+------+
| jinl | 30 |
| daoli | 100 |
| jinl1874 | 90 |
| jinl | NULL |
+----------+------+
4 rows in set (0.00 sec)
外右连接,与左连接刚好相反:
select name, math from (user) right join grade on (user.id = grade.id);
+----------+------+
| name | math |
+----------+------+
| daoli | 100 |
| jinl1874 | 90 |
| jinl | 30 |
+----------+------+
3 rows in set (0.00 sec)
内连接:inner join,等于join,返回两张表都满足条件的部分。
select name, math from (user) join grade on (user.id = grade.id);
+----------+------+
| name | math |
+----------+------+
| daoli | 100 |
| jinl1874 | 90 |
| jinl | 30 |
+----------+------+
3 rows in set (0.00 sec)
改
- 更改表的字段名
alter table <表名> change <旧字段> <新字段> <新数据类型>
alter table jinl change test name text not null;
- 更改字段数据类型
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
alter table user
modify id = 4 varchar(30);
- 修改表的数据
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
删
- 删除表
drop table if exists <表名>
drop table if exists jinl;
- 删除字段
alter table <表名> drop <字段>
alter table jinl drop name;
- 删除表的数据
delete from <表名> [Where 子句] [Order by 子句] [Limit 子句]
delete from user where id = 4;
其它基本操作
查看所有数据库:
show databases;
切换数据库:
use <数据库名>
use test
查看所有表:
show tables;
查看表的信息:
desc <表名>