-- 创建数据库
CREATE DATABASE IF NOT EXISTS testdb DEFAULT CHARACTER SET utf8mb4;
-- 查看数据库
SHOW DATABASES;
SHOW CREATE DATABASE testdb;
-- 修改数据库字符集
ALTER DATABASE testdb CHARACTER SET latin1;
-- 删除数据库
DROP DATABASE IF EXISTS testdb;
(2)表操作
SQL复制代码
-- 创建表
CREATE TABLE student (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED,
gender ENUM('M','F') DEFAULT 'M'
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;
-- 查看表
SHOW TABLES;
DESC student;
SHOW CREATE TABLE student;
-- 修改表
ALTER TABLE student RENAME stu; -- 改表名
ALTER TABLE stu ADD phone VARCHAR(11) AFTER name; -- 加字段
ALTER TABLE stu MODIFY phone INT; -- 改字段类型
ALTER TABLE stu DROP COLUMN phone; -- 删字段
-- 删除表
DROP TABLE IF EXISTS stu;
5. DML 语句(数据操纵)
SQL复制代码
-- 插入数据
INSERT INTO student (name, age) VALUES ('xiaoming', 20), ('xiaohong', 18);
INSERT INTO student VALUES (12, 'xiaoli', 19, 'F');
-- 更新数据(加条件,避免全表更新)
UPDATE student SET age=25 WHERE id=10;
UPDATE student SET age=30, gender='F' WHERE id>15;
-- 删除数据(逻辑删除推荐用字段标记,如is_del=1)
DELETE FROM student WHERE id=10;
-- 清空表(DDL,效率高,不支持事务)
TRUNCATE TABLE student;
6. DQL 语句(数据查询)
SQL复制代码
-- 基础查询
SELECT id AS 学号, name AS 姓名 FROM student;
-- 条件查询
SELECT * FROM student WHERE id IN (11,15) AND age>18;
SELECT * FROM student WHERE name LIKE 'xiao%' OR age BETWEEN 20 AND 30;
SELECT * FROM student WHERE name IS NULL;
-- 分组统计
SELECT gender, COUNT(*) AS total FROM student GROUP BY gender HAVING total>1;
SELECT MAX(age), MIN(age), AVG(age) FROM student;
-- 排序与分页
SELECT * FROM student ORDER BY age DESC;
SELECT * FROM student LIMIT 3,3; -- 跳过前3条,取3条
-- 去重
SELECT DISTINCT age FROM student;
五、MySQL 用户与权限管理
1. 用户账户
由用户名@主机标识,主机支持IP、网段、通配符(%表示任意主机)。
示例:root@localhost、test@'192.168.108.%'。
2. 用户操作
SQL复制代码
-- 创建用户
CREATE USER test@'192.168.108.%' IDENTIFIED BY '123456';
-- 重命名用户
RENAME USER test@'192.168.108.%' TO test2@'192.168.108.%';
-- 修改密码
ALTER USER root@'localhost' IDENTIFIED BY 'newpassword';
SET PASSWORD FOR test@'192.168.108.%' = 'newpassword';
-- 删除用户
DROP USER test2@'192.168.108.%';
-- 忘记root密码重置
vim /etc/my.cnf.d/mysql-server.cnf
# 添加:skip-grant-tables
systemctl restart mysqld
mysql -u root
UPDATE mysql.user SET authentication_string='' WHERE user='root' AND host='localhost';
FLUSH PRIVILEGES;
ALTER USER root@'localhost' IDENTIFIED BY 'xiaomi';
# 注释skip-grant-tables,重启服务
3. 权限管理
(1)权限类别
管理类:CREATE USER、SUPER、SHUTDOWN等。
程序类:CREATE、ALTER、DROP(针对函数、存储过程)。
库表级:SELECT、INSERT、UPDATE、DELETE等。
所有权限:ALL PRIVILEGES 或 ALL。
(2)授权与回收
SQL复制代码
-- 授权(指定库表)
GRANT SELECT, INSERT ON db1.student TO test@'192.168.108.%';
-- 授权所有权限(含转授权)
GRANT ALL PRIVILEGES ON *.* TO root@'192.168.108.%' WITH GRANT OPTION;
-- 回收权限
REVOKE DELETE ON db1.student FROM test@'192.168.108.%';
-- 查看权限
SHOW GRANTS FOR test@'192.168.108.%';
SHOW GRANTS FOR CURRENT_USER;
-- 刷新权限
FLUSH PRIVILEGES;