> 文章列表 > MySQL基础语句

MySQL基础语句

MySQL基础语句

文章目录

    • 前言
      • 帮助信息
      • 注释
    • 数据库操作类语句
      • 连接数据库
      • 查看数据库列表(展示所有数据库)
      • 查询当前数据库叫啥
      • 创建数据库
      • 删除数据库
      • 修改数据库编码格式
      • 使用某个数据库
      • 查看当前数据库下所有数据表
    • 表操作
      • 表的约束
      • 查询表结构
      • 查询某个特定表的建表语句
      • 建表语句
        • 向表中 添加一个新的字段
        • 修改表中已有的字段的类型(把int 改成 bigint 这种)
        • 修改字段名和字段类型
        • 删除表中的某个字段
      • 删除表
      • 删除表 并!!! 重新创建该表
    • 对数据操作 语句
      • where 条件
      • 给全部字段添加数据
      • 批量添加数据
      • 给指定字段添加数据
      • 删除数据
      • 修改数据
      • 查询表中的所有数据
      • 查询表中多个字段,只显示查询字段的内容
      • 查询多个字段时,给字段设置别名
      • 查询字段时 去掉重复记录
      • 条件查询- where 条件!!
      • 聚合函数
      • 分组查询
      • 排序查询
      • 分页查询
    • 用户管理
      • 查询
      • 创建新的用户
      • 修改用户密码
      • 删除用户
      • 用户权限
        • 查询权限
        • 授予权限
        • 撤销权限

前言

基本上所有的命令都可以使用小写来表达出对应的意思,,但是最好使用大写 编写语句,这样有助于更明确的区分出哪些是命令,哪些是要创建使用的关键字

每条语句后 最好加上’;’ 一部分是因为语法的要求,以防产生什么意外

备注:由于本文章部分命令是在编辑器中直接编写的,可能分号是中文的,所以尽可能不要直接复制使用

帮助信息

help 需要查询的关键字;

注释

单行注释
-- 两个减号 表达单行 
# #号 也标识单行注释
多行注释
/*...'/*' 这个里就是多行注释的内容,跟C一样  '*/'...
*/

数据库操作类语句

连接数据库

mysql -uroot -padmin;				# 用户名是root 密码是 admin
mysql -h IP -P port -uroot -P; 			# 回车后 输入密码 

查看数据库列表(展示所有数据库)

show databases;

查询当前数据库叫啥

select database();				# 能直接输出 当前使用的数据库名称

创建数据库

create database [IF NOT EXISTS] 数据库名称;
-- 中间的[if not exists]  为可选项,可加可不加,意义为: 如果当前数据库不存在 则创建该数据库
-- 使用时 请去掉中括号
-- 示例: mysql> CREATE DATABASE IF NOT EXISTS qxy_temp;

删除数据库

drop database [if exists]数据库名称;
-- 中间 [if exists] 为可选项,意义为:如果当前数据库存在 则删除该数据库,以防 不存在时 删除报错

修改数据库编码格式

-- 修改数据库编码格式
alter database 数据库名称 charset=编码格式;

使用某个数据库

use 数据库名;					# 直接进入到某个数据库中

查看当前数据库下所有数据表

show tables;


表操作

表的约束

1)非空约束:NOT NULL,不允许某列的内容为空;
2)设置列的默认值:DEFAULT;
3)唯一约束:UNIQUE,该表中,该列的内容必须唯一;
4)主键约束:PRIMARY KEY,非空且唯一;
5)主键自增长:AUTO_INCREMENT,从1开始,步长为1;
6)外键约束:FOREIGN KEY,A表中的外键列。A表中的外键列的值必须参照于B表中的某一列(B表主键)。

查询表结构

DESC 表名;					# 查看表中的内容 结构,有几个成员 有对应类型等-- 示例 如下 -- 
mysql> DESC user;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | tinyint     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

查询某个特定表的建表语句

show create table 表名;				# 打印出 该表的 建表语句
-- 示例 如下 --
mysql> show create table account;| account | CREATE TABLE `account` (`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',`username` varchar(30) DEFAULT NULL COMMENT '姓名',`money` decimal(10,0) DEFAULT NULL COMMENT '金额',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3       |# 已删除多余信息

建表语句

create table 表名(id int comment '编号',name varchar(50) comment '姓名',age tinyint comment '年龄'
)comment '成员表';-- 示例 如下 --
mysql> create table user(-> id int comment '编号',-> name varchar(50) comment '姓名',-> age tinyint comment '年龄'-> )comment '成员表';
Query OK, 0 rows affected (0.02 sec)-- 示例2 如下 -- 
mysql> CREATE TABLE qxy_test (id int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',  username varchar(30) DEFAULT NULL COMMENT '姓名', money decimal(10,0) DEFAULT NULL COMMENT '金额', PRIMARY KEY (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

varchar(50) # 表示字符串,50个char类型的字符串
bigint # 表示 long int

插入字符串或汉字时 需要用 ‘引号’ 包住

需要插入汉字时 需要将编码格式 设置为 utf-8

向表中 添加一个新的字段

alter table 表名 add 字段名 类型(长度) [comment '注释'] [约束];-- [] 标识的内容为 可选项  其中 [约束] 在上面..... ,示例 在下面
-- alter table user add nv varchar(1) comment '性别';-- 添加一个新的字段 字段名 nv  占一个字符  别名 叫 性别

修改表中已有的字段的类型(把int 改成 bigint 这种)

alter table 表名 modify 字段名 新类型(长度);-- 示例 如下 -- 
alter table qxy_test modify nv int;
-- 把 nv 这个字段 改成新的类型 int 类型

修改字段名和字段类型

alter table 表名 change 旧字段名 新字段名 类型(长度) [comment '注释'] [约束];-- 示例 如下 -- 
alter table qxy_test change nv age int comment '年龄';
-- 把 nv 这个字段 改成了 age ,age 的类型为 int ,别名 叫 年龄

删除表中的某个字段

alter table 表名 drop 字段名;-- 示例 如下 --
mysql> select * from qxy_test;
+------+-----------+-------+------+------+
| id   | username  | money | age  | nv   |
+------+-----------+-------+------+------+
| 1001 | 1         |   100 | NULL | NULL |
| 1002 | qxy       |   100 | NULL | NULL |
| 1003 | ADMIN     |   100 | NULL | NULL |
+------+-----------+-------+------+------+
3 rows in set (0.00 sec)mysql> alter table qxy_test drop nv;				# 删除 nv 这个字段
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> select * from qxy_test;
+------+-----------+-------+------+
| id   | username  | money | age  |
+------+-----------+-------+------+
| 1001 | 1         |   100 | NULL |
| 1002 | qxy       |   100 | NULL |
| 1003 | admin     |   100 | NULL |
+------+-----------+-------+------+
3 rows in set (0.00 sec)

删除表

drop table [if exists] 表名;
-- [if exists] 为可选项 ,意义为 如果该表存在 则删除该表

删除表 并!!! 重新创建该表

truncate table 表名;


对数据操作 语句

where 条件

/** 条件包括:* > ,  >= , <= , < , = , != , IS NULL , AND , && , OR , || , NOT , ! * IN(....)   # 是否 在后面括号里 (多个里选一个)* BETWEEN...AND...			# 是否在 ... 到 ... 这个范围内* LIKE 占位符 模糊匹配,单个 % .... 这特么说的啥啊* IS NOT NULL */

给全部字段添加数据

insert into 表名 values (1,2,3,.....);-- 示例 如下 --
mysql> insert into qxy_test values (1001,'路人甲',10000,18);
Query OK, 1 row affected (0.01 sec)mysql> select * from qxy_test;
+------+-----------+-------+------+
| id   | username  | money | age  |
+------+-----------+-------+------+
| 1001 | 路人甲    | 10000 |   18 |
+------+-----------+-------+------+
1 row in set (0.00 sec)

批量添加数据

insert into 表名 values (1,2,3,.....),(1,2,3,.....);-- 示例 如下 --
mysql> insert into qxy_test values (1002,'test',20000,19),(1003,'qxy',30000,20);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from qxy_test;
+------+-----------+-------+------+
| id   | username  | money | age  |
+------+-----------+-------+------+
| 1001 | 路人乙    | 10000 |   18 |
| 1002 | test      | 20000 |   19 |
| 1003 | qxy       | 30000 |   20 |
+------+-----------+-------+------+
3 rows in set (0.00 sec)

给指定字段添加数据

insert into 表名(字段1,字段3) values(1,3);-- 示例 如下 --
mysql> insert into qxy_test(id,username,age) values(1004,'dsb',28);
Query OK, 1 row affected (0.01 sec)mysql> select * from qxy_test;
+------+-----------+-------+------+
| id   | username  | money | age  |
+------+-----------+-------+------+
| 1001 | 路人乙    | 10000 |   18 |
| 1002 | test      | 20000 |   19 |
| 1003 | AMD      | 30000 |   20 |
| 1004 | dsb       |  NULL |   28 |
+------+-----------+-------+------+
4 rows in set (0.00 sec)

删除数据

delete from 表名 [where 条件];
-- 删除这个表中的数据
-- [] 可选项 ,如果成立,则删除
mysql> delete from qxy_test where money IS NULL;		# 删除 表中 money 字段 为 NULL 的那些条记录
Query OK, 1 row affected (0.01 sec)

修改数据

update 表名 set 字段名1=1,字段名2=2,..... [where 条件];
/**  [] 为可选项 ,意义为 根据条件,如果条件成立,则修改对应值*  条件 大概就是 类似与 id=1 这种*/-- 示例 如下 --
mysql> update qxy_test set username='路人乙' where id=1001;		# 根据 id=1001 修改 username 字段为 新的内容
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

查询表中的所有数据

select * from 表名;

查询表中多个字段,只显示查询字段的内容

select 字段1,字段2 from 表名;
-- 只显示查询的 字段,不显示其他字段

查询多个字段时,给字段设置别名

select 字段1[as 别名1],字段2[as 别名2] from 表名;

查询字段时 去掉重复记录

select distinct 字段列表 from 表名;

条件查询- where 条件!!

select 字段列表 from 表名 where 条件列表;

聚合函数

count 计数 , max 最大值 , min 最小值 , avg 平均 , sum 求和
count 计数 null 不参与计数select 聚合函数(字段列表) from 表名;	# 计算某一列的

分组查询

select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后的过滤条件];
# 先执行 where    不满足条件 不参与分组
# 前不能用聚合
# 执行顺序: where    聚合函数    having 

排序查询

select 字段列表 from 表名 order by 字段1 排序方式,字段2 排序方式;
-- 排序方式: ASC 升序  DESC 降序
-- 默认升序,先按照第一字段值排序,当第一字段值相同时 才会按照第二字段排序

分页查询

select 字段列表 from 表名 LIMIT 起始检索,查询记录数;


用户管理

查询

use mysql;
select * from uesr;		# 查询当前所有用户,当前用户在 mysql 库里,user 表 

创建新的用户

create user '新用户名'@'主机名' IDENTIFIED by '密码';
-- 当前主机: localhost
-- % 标识任意主机
-- 密码需要符合规范,各个版本都不一样

修改用户密码

alter user '用户名'@'主机名' IDENTIFIED with mysql_native_password by '新密码';-- 修改的新密码 也要符合规范.....

删除用户

drop user '用户名'@'主机名';

用户权限

ALL : 所有权限
SELECT : 查询
UPDATE : 更新
DELETE : 删数据
ALTER : 修改
DROP : 删除库
CREATE : 创建表

查询权限

show grants for '用户名'@'主机名';     # 查询用户已有权限

授予权限

grant 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'; 

撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名'; 
--      ALL            *.*