MYSQL入门

一、mysql数据类型

1. 数值类型(Numeric)

类型字节数说明
整数类型
TINYINT1-128 到 127(无符号 0 到 255)
SMALLINT2-32,768 到 32,767(无符号 0 到 65,535)
MEDIUMINT3-8,388,608 到 8,388,607(无符号 0 到 16,777,215)
INT / INTEGER4-2,147,483,648 到 2,147,483,647(无符号 0 到 4,294,967,295)
BIGINT8-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(无符号 0 到 18,446,744,073,709,551,615)
小数类型
FLOAT(M,D)4单精度浮点数(M 表示总位数,D 表示小数位数)
DOUBLE(M,D) / REAL8双精度浮点数
DECIMAL(M,D) / NUMERIC变长精确浮点数(M 总位数,D 小数位数,存储为字符串)

注意:整数类型可以加 UNSIGNED 关键字,使其只存储非负数,范围翻倍。


2. 字符串类型(String)

类型字节数说明
CHAR(M)0-255固定长度字符串(M 取值 0-255)
VARCHAR(M)0-65535可变长度字符串(M 取值 0-65535,取决于 row formatmax row size
TEXT 系列存储大文本
TINYTEXT255最大 255 字节
TEXT65,535最大 64KB(16bit 存储长度)
MEDIUMTEXT16,777,215最大 16MB(24bit 存储长度)
LONGTEXT4,294,967,295最大 4GB(32bit 存储长度)
BLOB 系列存储二进制大对象
TINYBLOB255类似 TINYTEXT,用于二进制
BLOB65,535类似 TEXT,用于二进制
MEDIUMBLOB16,777,215类似 MEDIUMTEXT,用于二进制
LONGBLOB4,294,967,295类似 LONGTEXT,用于二进制
BINARY(M)0-255固定长度二进制
VARBINARY(M)0-65535可变长度二进制

注意CHARVARCHAR 适用于短字符串,TEXT 适用于长文本;BLOB 适用于存储图片、音频等二进制数据。


3. 日期和时间类型(Date & Time)

类型字节数说明
DATE3存储日期,格式:YYYY-MM-DD
DATETIME8存储日期时间,格式:YYYY-MM-DD HH:MM:SS
TIMESTAMP4存储 Unix 时间戳(1970-01-01 以来的秒数),受时区影响
TIME3存储时间,格式:HH:MM:SS
YEAR1存储年份,格式:YYYY

区别

  • DATETIME 适用于存储完整时间,不受时区影响。

  • TIMESTAMP 适用于自动更新的时间戳,受时区影响。


4. JSON 数据类型

类型说明
JSON存储 JSON 格式数据,MySQL 5.7+ 支持

特点

  • 允许存储有效的 JSON 数据,可用 JSON 函数处理。

  • 支持索引,但查询效率较 VARCHAR 低。

  • 适用于存储半结构化数据,如日志、配置等。


二、数据库基础操作

1. 数据库管理

1.1. 连接 MySQ

mysql -u 用户名 -p

然后输入密码进入 MySQL。

1.2. 查看所有数据库

SHOW DATABASES;

1.3. 创建数据库

CREATE DATABASE mydb charset utf8; 

指定字符集:

CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

创建一个名为 mydb 的数据库,并指定字符集和排序规则

小结:

utf8mb4 和 utf8 的区别:

1. utf8(伪 UTF-8)
  • 存储范围:最多支持 3 字节 的 UTF-8 编码字符。

  • 不支持 4 字节的 Unicode 字符(如某些中文罕见字、Emoji、部分特殊符号)。

  • 会导致存储问题

    • 例如 utf8 存储 😂(U+1F602,4 字节)时会报错:

      INSERT INTO test_table (col) VALUES ('😂');

      错误: Incorrect string value

2. utf8mb4(真正的 UTF-8)
  • 存储范围:完整支持 1-4 字节 的 UTF-8 编码字符。

  • 可存储 任何 Unicode 字符,包括 Emoji、古文字、特殊符号等。

  • MySQL 5.5.3 及以上版本推荐使用 utf8mb4,取代 utf8

1.4. 选择数据库

USE mydb;

1.5. 删除数据库

DROP DATABASE mydb;


2. 表操作

2.1. 查看当前数据库的所有表

SHOW TABLES;

2.2. 创建表

CREATE TABLE users (

  id INT PRIMARY KEY AUTO_INCREMENT,   #自动递增,无需手动输入

  name VARCHAR(50) NOT NULL,  # 非空

  age INT,

  email VARCHAR(100) UNIQUE,  # 唯一

  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

--自动记录数据插入时间,用于创建时间戳

);

-------添加列注释,方便知道每一列代表什么:COMMENT

CREATE TABLE users (

id INT PRIMARY KEY COMMENT "编号",

name VARCHAR(50) NOT NULL COMMENT "姓名",

age INT COMMENT "年龄",

email VARCHAR(100) UNIQUE COMMENT "电子邮件",

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

--自动记录数据插入时间,用于创建时间戳

);

2.3. 查看表结构

DESC users;

2.4. 修改表

  • 添加字段

ALTER TABLE users ADD phone VARCHAR(20);

  • 修改字段类型

ALTER TABLE users MODIFY phone BIGINT;

  • 删除字段

ALTER TABLE users DROP COLUMN phone;

  • 重命名表

ALTER TABLE users RENAME TO customers;

  • 删除列

alter table users add drop hobby;

  • 修改列名

alter table users change column hobby hob int(10);

  • 修改列数据类型

alter table users modify column hobby char(10);

  • 修改表名

alter table users rename to MDD;

alter table MDD rename to users;

2.5. 删除表

DROP TABLE users;


3. 数据操作

3.1. 插入数据

INSERT INTO users (name, age, email) VALUES ('张三', 25, 'zhangsan@example.com');

批量插入:

INSERT INTO users (name, age, email) VALUES

('李四', 30, 'lisi@example.com'),

('王五', 28, 'wangwu@example.com'),

('麦当当', 26, 'MDD@example.com'),

('肯德基', 28, 'kfc@example.com'),

('德克士', 27, 'decos@example.com'),

('华莱士', 33, 'hualaishi@example.com'),

('汉堡王', 18, 'hbw@example.com')

;

3.2. 查询数据

  • 查询所有数据

SELECT * FROM users;

  • 查询指定列

SELECT

 name,

 email

FROM users;

  • 条件查询

逻辑运算符:

1.between 最小值 and 最大值

select * from users where age between 20 and 27; (判断age介于20和27之间的值)
   作用和使用><是一样的

select * from users where age > 20 and age < 27;

2.null 

select * from users where age is null;(判断这一列有空值)

3.in (取值范围)

 select * from student where age in(2,5);  (选取表中所有年龄等于2、5 的数据)
 

4.like (通配符,适用于模糊查询)

 select * from users where name like '%麦当当%'; 查找名字中包含麦当当的人

 select * from users where name like '麦当当%'; 查找名字中麦当当开头的人

 select * from users where name like '%麦当当'; 查找名字中含麦当当结尾的人

5.as (重命名列明)

select

        name as NM         (name列更名为NM)

from users 

where name like '%麦当当%';       查找名字中包含麦当当的人

6.union all 合并两个或多个select语句结果集

 select

      id

from users

where st.name = '张三'

union all

select

        id

from users

where st.name = '李四'        

注意:union all   上下合并的内容 列明需要一一对应

  • 排序

SELECT * FROM users ORDER BY age DESC;

DESC:降序

ASC: 升序

  • 去重

 select distinct

        name

from users;      --去除users表中 重复的名字,并且只展示名字列

  • 限制结果数量

SELECT * FROM users LIMIT 5;   --只展示前五行

3.3. 更新数据

UPDATE users SET age = 26 WHERE name = '张三';  把张三的年龄改成26岁

3.4. 删除数据

DELETE FROM users WHERE name = '张三';

删除所有数据(不推荐,数据不可恢复):

DELETE FROM users;

或者:

TRUNCATE TABLE users;

--TRUNCATEDELETE 快,但无法回滚。


4. 高级查询

4.1. 统计数量

COUNT:计算指定列或表达式的行数,可以用于统计记录数量。
例如:SELECT COUNT(*) FROM table_name; 将返回表中的记录数。

SUM:计算指定列或表达式的总和。
例如:SELECT SUM(salary) FROM employees; 将返回 employees 表中 salary 列的总和。

AVG:计算指定列或表达式的平均值。
例如:SELECT AVG(age) FROM students; 将返回 students 表中 age 列的平均值。

MAX:返回指定列或表达式的最大值。
例如:SELECT MAX(price) FROM products; 将返回 products 表中 price 列的最大值。

MIN:返回指定列或表达式的最小值。
例如:SELECT MIN(quantity) FROM inventory; 将返回 inventory 表中 quantity 列的最小值。

4.2. 分组统计

SELECT

  age,

  COUNT(*)

FROM users

GROUP BY age;    按年龄分组,看每个年龄有多少人

 

高阶写法:开窗函数

SELECT

  age,

  COUNT(*)over(partition by age) as age_count

FROM users

4.3. 关联查询(JOIN)

1.表连接

表连接有三种情况:
内链接: inner join
外链接:
左外链接: left join 获取左表所有记录,即使右表没有对应匹配的记录,则为空
右外链接: right join 获取右表所有记录,即使左表没有对应匹配的记录,则为空

  • 内连接(INNER JOIN)

SELECT

  users.name,

  orders.amount

FROM users

INNER JOIN orders

ON users.id = orders.user_id;

  • 左连接(LEFT JOIN)

SELECT

  users.name,

  orders.amount

FROM users

LEFT JOIN orders

ON users.id = orders.user_id;

  • 右连接(LEFT JOIN)

SELECT

  users.name,

  orders.amount

FROM users

LEFT JOIN orders

ON users.id = orders.user_id;


5. 用户权限管理

5.1. 创建用户

CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password123';

5.2. 赋予权限

  • 授权对某个数据库的全部权限

GRANT ALL PRIVILEGES ON mydb.* TO 'user1'@'localhost';

  • 授权只读权限

GRANT SELECT ON mydb.* TO 'user1'@'localhost';

5.3. 查看用户权限

SHOW GRANTS FOR 'user1'@'localhost';

5.4. 撤销权限

REVOKE SELECT ON mydb.* FROM 'user1'@'localhost';

5.5. 删除用户

DROP USER 'user1'@'localhost';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值