红茶的个人站点

  • 首页
  • 专栏
  • 开发工具
  • 其它
  • 隐私政策
Awalon
Talk is cheap,show me the code.
  1. 首页
  2. 专栏
  3. MySQL学习笔记
  4. 正文

MySQL 从入门到精通 1:SQL

2025年7月31日 16点热度 0人点赞 0条评论

SQL 的类型有以下几种:

image-20250718172231540

使用命令行客户端连接数据库:

❯ mysql -u root -p

DDL

查看所有数据库:

show databases;

选中数据库:

use test;

查看当前选中的数据库:

select database();

创建数据库:

create database if not exists test2 default charset utf8mb4;

删除数据库:

drop database if exists test2;

查询当前数据库的表:

show tables;

查看表的基本信息:

desc email;

这个命令只能返回基本的表信息,如果要查看更完整的信息,需要使用:

show create table email;

创建表结构:

mysql> create table student(
    -> id bigint unsigned comment '编号',
    -> name varchar(10) comment '姓名',
    -> age tinyint unsigned comment '年龄'
    -> ) comment '学生表';

增加字段:

alter table student add column nickname varchar(20);

修改字段:

alter table student modify nickname varchar(30);

修改字段的同时修改字段名:

alter table student change nickname username varchar(25) comment '昵称';

删除字段:

alter table student drop username;

修改表名:

alter table student rename to tb_student;

删除表:

drop table if exists tb_student;

清空表数据:

truncate table email;

数据类型

数值类型:

类型 大小 有符号(SIGNED)范围 无符号(UNSIGNED)范围 描述
TINYINT 1 byte (-128,127) (0,255) 小整数值
SMALLINT 2 bytes (-32768,32767) (0,65535) 大整数值
MEDIUMINT 3 bytes (-8388608,8388607) (0,16777215) 大整数值
INT或INTEGER 4 bytes (-2147483648,2147483647) (0,4294967295) 大整数值
BIGINT 8 bytes (-2^63,2^63-1) (0,2^64-1) 极大整数值
FLOAT 4 bytes (-3.402823466 E+38,3.402823466351 E+38) 0 和 (1.175494351 E-38,3.402823466 E+38) 单精度浮点数值
DOUBLE 8 bytes (-1.7976931348623157 E+308,1.7976931348623157 E+308) 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) 双精度浮点数值
DECIMAL 依赖于M(精度)和D(标度)的值 依赖于M(精度)和D(标度)的值 小数值(精确定点数)

字符类型:

类型 大小 描述
CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 变长字符串
TINYBLOB 0-255 bytes 不超过255个字符的二进制数据
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制形式的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据

时间类型:

类型 大小 范围 格式 描述
DATE 3 1000-01-01 至 9999-12-31 YYYY-MM-DD 日期值
TIME 3 -838:59:59 至 838:59:59 HH:MM:SS 时间值或持续时间
YEAR 1 1901 至 2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00 至 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:01 至 2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 混合日期和时间值,时间戳

图形化工具

可以使用多种图形化客户端连接 MySQL 数据库,这里推荐同属 Idea 全家桶的 DataGrip,其优点是支持多种数据库和 NoSQL 的连接,以及跨平台。

安装和激活可以参考这篇文章。

工具使用介绍可以观看这个视频。

DML

插入单条数据:

insert into user(id, name, sex) values (1,'Tom', 5);

如果插入的数据包含所有的列值,可以不指定列名:

insert into user values (2,'Jack', 5);

可以批量插入:

insert into user values (3, 'LiLei', 5),(4, 'Bruce', 5),(5,'Anni',6),(7,'Angel',6);

如果批量插入时只包含部分列的值:

insert into user(name, sex) values ('Tom Crus', 5),('Jack Chen', 5);

更新数据:

update user set name='LiLi',sex='6' where id=9;

删除数据:

delete from user where sex=6;

DQL

用于测试的表数据:

create table emp(
    id  int auto_increment comment 'ID' primary key,
    name varchar(50) not null comment '姓名',
    age  int comment '年龄',
    dept_id int comment '部门ID'
)comment '员工表';
INSERT INTO emp (id, name, age, dept_id) VALUES (1, '张无忌', 20, 1),(2, '杨逍', 33, 1),(3, '赵敏', 18, 2), (4, '常遇春', 43, 2),(5, '小昭', 19, 3),(6, '韦一笑', 48, 3);

查询特定列:

select name,age,dept_id
from emp;

查询所有列:

SELECT * FROM emp;

去重:

select  distinct emp.dept_id from emp;

为列指定别名:

select distinct emp.dept_id as '部门id' from emp;

条件语句 LIKE 可以配合通配符使用,比如:

select * from emp where name like '__';

这里占位符_表示任意的一个字符,所以上边的 SQL 查询出的是两个字作为名字的员工。

%表示任意长度的字符:

select * from emp where name like '张%';

这里查询到的是姓为张的员工。

DCL

MySQL 的用户信息表存在数据库mysql的 user 表中:

image-20250731101333046

其中 Host 和 User 字段共同决定了一个用户账号。Host 表示该账号可以从哪台主机进行访问,Localhost 表示只能从本地进行访问。

创建用户:

create user 'icexmoon'@'localhost' identified by '123456';

此时创建了一个新用户,可以用相应的用户名和密码登录。但需要注意的是,该用户执行show databases只能看到一个数据库,因为没有访问其他数据库的权限。

如果要创建一个可以从任意 IP 访问的用户,可以:

create user 'apple'@'%' identified by '123456';

修改用户密码:

alter user 'icexmoon'@'localhost' identified with mysql_native_password by 'abc123';

删除用户:

drop user 'apple'@'%';

MySQL 的数据库权限分为:

权限 说明
ALL,ALL PRIVILEGES 所有权限
SELECT 查询数据
INSERT 插入数据
UPDATE 修改数据
DELETE 删除数据
ALTER 修改表
DROP 删除数据库/表/视图
CREATE 创建数据库/表

查看指定用户拥有的权限:

show grants for 'icexmoon'@'localhost';

查询结果:

image-20250731103953538

表示icexmoon只拥有所有数据库所有表的使用权限。

*.* 表示所有数据库的所有表。

未指定用户添加权限:

grant all on test.* to 'icexmoon'@'localhost';

再查询用户权限就能看到:

image-20250731104239987

说明拥有test数据库所有表的所有权限。

删除权限:

revoke all on test.* from 'icexmoon'@`localhost`;

再次查看用户权限就会发现相应的权限已经被移除。

参考资料

  • 黑马程序员 MySQL数据库入门到精通

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: MySQL sql
最后更新:2025年7月31日

魔芋红茶

加一点PHP,加一点Go,加一点Python......

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务

Theme Kratos Made By Seaton Jiang

宁ICP备2021001508号

宁公网安备64040202000141号