Mysql基础知识以及Sql规范
Mysql数据库
-
初始化 MySQL 数据目录
-
在首次安装 MySQL 后,需要初始化数据目录。这一步会创建系统表(如 mysql 数据库)和默认用户
mysqld --initialize --user=mysql- --initialize:初始化数据目录
- --user=mysql:指定运行 MySQL 服务的用户(通常是 mysql)
- 初始化完成后,会在日志文件中生成一个临时 root 密码(通常在 /var/log/mysqld.log 或 /var/log/mysql/error.log 中)
- 如果使用 --initialize-insecure,则不会生成 root 密码
-
-
修改mysql配置文件my.ini中的默认编码规则等
-
启动 MySQL 服务
-
Linux
sudo systemctl start mysqld #停止服务 sudo systemctl stop mysqld -
Windows
net start mysql #停止服务 net stop mysql
mysqld 是 MySQL 服务的名称(在某些系统上可能是 mysql)
mysql服务的默认端口为3306
-
-
检查服务状态
sudo systemctl status mysqld #Linux sc query mysql #windows -
连接mysql
mysql -uroot -P3306 -p #Enter password: 输入密码 -
修改用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
关系型数据库和非关系型数据库
关系型数据库
-
数据模型:基于关系模型,数据以表的形式组织。
-
表结构:
- 表由行和列组成。
- 行表示记录,列表示字段。
- 表之间通过外键建立关系。
- 示例:MySQL、Oracle、SQL Server、PostgreSQL
-
结构化数据:数据必须符合预定义的表结构(Schema)。
-
数据类型:支持严格的字段类型(如整数、字符串、日期等)。
-
数据关系:通过外键维护表与表之间的关系
-
SQL(Structured Query Language):标准化的查询语言。支持复杂的查询操作(如 JOIN、GROUP BY、子查询等)
-
读性能:适合复杂查询和数据分析。
-
写性能:在高并发写入场景下性能可能受限
非关系型数据库
-
数据模型:不基于关系模型,数据以键值对、文档、列族或图的形式存储。
-
常见类型:键值存储:如 Redis、DynamoDB。文档存储:如 MongoDB、CouchDB。列族存储:如 Cassandra、HBase。图数据库:如 Neo4j、ArangoDB。
-
灵活的数据结构:数据可以是半结构化或非结构化的。
-
无固定模式:不需要预定义表结构,数据可以动态添加字段。
-
数据关系:通常不支持复杂的关系,但图数据库除外
-
无统一查询语言:每种 NoSQL 数据库有自己的查询语言或 API。查询功能通常较弱,不支持复杂的 JOIN 操作
-
读性能:适合简单查询和高并发读取。
-
写性能:在高并发写入场景下性能优异
Sql语言的规则规范
规则
-
每个 SQL 语句以分号 (😉 结束
-
关键字:SQL 关键字(如 SELECT, FROM, WHERE)通常不区分大小写。习惯上,关键字用大写,以提高可读性
-
标识符:表名、列名等标识符是否区分大小写取决于数据库系统。例如,MySQL 在 Linux 下区分大小写,在 Windows 下不区分
-
单行注释:使用 -- 或 #(MySQL 支持#)
-
多行注释:使用 /* ... */
-
字符串:必须用单引号 (') 括起来
SELECT * FROM users WHERE name = 'John'; -
标识符:如果标识符(如表名、列名)与关键字冲突或包含特殊字符,需要用反引号(`)括起来
SELECT `user`, `from` FROM `my-table`;
命名规则
- 数据库、表名不得超过30个字符
- 必须只能包含A-Z,a-z,0-9,_和$字符
- 可以数字开头
- 数据库名称、表名、字段名中间不要包含空格
- 不能重名
- 保证字段名称和字段类型的一致性(跨表问题)
规范
-
SQL 关键字建议使用大写,以便与表名、列名等区分
-
SQL 语句中的空格和换行会被忽略,但合理使用可以提高可读性
-
表名和列名使用小写字母,单词间用下划线 (_) 分隔
SELECT user_name, created_at FROM user_logs; -
使用缩进和对齐使代码更易读
-
避免使用 SELECT *,明确指定需要的列,避免查询不必要的数据
-
当查询涉及多个表时,使用表别名简化代码
SELECT u.user_id, o.order_id FROM users u JOIN orders o ON u.user_id = o.user_id; -
使用显式的 JOIN 语法,而不是隐式的逗号分隔
-- 推荐 SELECT u.user_id, o.order_id FROM users u JOIN orders o ON u.user_id = o.user_id; -- 不推荐 SELECT u.user_id, o.order_id FROM users u, orders o WHERE u.user_id = o.user_id;

浙公网安备 33010602011771号