基本上所有的命令都可以使用小写来表达出对应的意思,,但是最好使用大写 编写语句,这样有助于更明确的区分出哪些是命令,哪些是要创建使用的关键字
每条语句后 最好加上’;’ 一部分是因为语法的要求,以防产生什么意外
备注:由于本文章部分命令是在编辑器中直接编写的,可能分号是中文的,所以尽可能不要直接复制使用
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 占一个字符 别名 叫 性别
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: 0
mysql> 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 表名;
/*
* 条件包括:
* > , >= , <= , < , = , != , 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: 0
mysql> 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 表名;
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 *.*