MySQL基础

张开发
2026/4/13 19:57:57 15 分钟阅读

分享文章

MySQL基础
1登录MySQLmysql -u root -p然后输入密码出现mysql表示成功2创建数据库-- 创建数据库名字自己改比如 testdb CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ​ -- 查看所有数据库 SHOW DATABASES; ​ -- 使用这个数据库必须先选库才能建表 USE testdb;创建数据库的参数1CHARACTER SET utf8mb4:指定字符集2COLLATE utf8mb4_unicode_ci按照国际通用Unicode规则排序3创建数据表-- 创建用户表 CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, -- 自增ID主键 username VARCHAR(50) NOT NULL, -- 用户名 password VARCHAR(100) NOT NULL, -- 密码 email VARCHAR(100), -- 邮箱 create_time DATETIME DEFAULT CURRENT_TIMESTAMP -- 创建时间 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;查看是否创建成功-- 查看当前库的所有表 SHOW TABLES; ​ -- 查看表结构 DESC user;4CRUD(1)C-Create插入数据INSERT INTO user (username, password, email) VALUES (zhangsan, 123456, zhangsanqq.com);(2)R-Read查询数据查全部SELECT * FROM user;查看某些字段SELECT id, username, email FROM user;3U-UpdateUPDATE user SET password 654321, email zs_newqq.com WHERE id 1;一定要加 WHERE否则全表被删4D-DeleteDELETE FROM user WHERE id 1;5主键一张表只能有一个用来唯一标识一行数据不能为空不能重复。在建表时对应字段如idid INT PRIMARY KEY AUTO_INCREMENT6唯一键保证这个字段的值不重复但可以允许 NULL最多一个 NULL。同样在建表时email VARCHAR(100) UNIQUE KEY7普通索引为了查询更快不限制重复不限制 NULL。一张表可以建很多索引不约束数据只加速查询字段可以重复、可以 NULLINDEX idx_username (username)建表示例CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, -- 主键 username VARCHAR(50) NOT NULL, phone VARCHAR(11) UNIQUE KEY, -- 唯一键 email VARCHAR(100), INDEX idx_email (email) -- 普通索引 );8事务事务即是一组SQL语句要么全部成功要么全部失败不会只执行一半START TRANSACTION; -- 开启事务 SQL语句 COMMIT; -- 提交真正生效 -- 出错了 ROLLBACK; -- 回滚全部撤销9ACID:1. A — Atomicity 原子性要么全做要么全不做不会执行一半成功一半失败。2. C — Consistency 一致性执行前后数据整体是合法、完整的。比如转账前后总金额不变。3. I — Isolation 隔离性多个事务同时跑互相看不见对方中间状态互不干扰。4. D — Durability 持久性一旦提交数据就永久落盘断电也不会丢。如果事务并发多个事务同时改数据会出问题脏读读到别人未提交的数据别人回滚了就脏了不可重复读同一事务内两次查询结果不一样幻读查询时没有这条数据插入时发现已存在10锁1. 共享锁 S Lock读锁加了 S 锁其他人可以继续读但不能写用法SELECT * FROM t LOCK IN SHARE MODE;2. 排他锁 X Lock写锁加了 X 锁其他人既不能读也不能写UPDATE/DELETE/INSERT 自动加 X 锁手动SELECT * FROM t FOR UPDATE;3. 表锁 vs 行锁表锁锁整张表并发差简单行锁只锁某一行并发高InnoDB 默认4. 间隙锁 Gap Lock防幻读锁定一个范围防止别人在范围内插入数据。5. 意向锁表级锁用来快速判断表里有没有行被锁提升效率。

更多文章