关系模型和SQL

本文以MySQL为例,介绍了关系模型的概念,包括安装、登录和常用命令。重点讲解了SQL语句,如DCL、DDL,特别是创建、删除数据库和表,以及主键、外键、索引和约束的概念,强调了SQL的关键字规范和命名规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关系模型和SQL

为了介绍关系模型, 以MySQL数据库为例.

安装

安装MariaDB

  • yum list | grep mariadb
    在 yum 列表 模糊搜索有mariadb的

  • yum install mariadb-server
    下载mariadb服务, yum会自动下载安装mariadb

  • systemctl start mariadb.service (开启服务)

  • systemctl enable mariadb.service(开机自启)

  • mysql_secure_installation (为了安全设置Mysql服务)

登录

  • mysql -u root -p (-u用户, 使用root用户; -p,使用密码)

常用命令

  • show databases; (查看所有库)

  • grant all on . to “gogs”@"%" identified by ‘test’;

  • flush privileges(刷新权限)

  • 导入测试脚本
    mysql -u root -p < test.sql
    把test.sql内容重定向到数据库中

SQL语句

SQL是结构化查询语言Structured Query Language. 1987年被ISO组织标准化.
所有主流的关系型数据库都支持SQL, NoSQL也有很大一部分支持SQL.

SQL语句分为:

  • DDL数据定义语言, 负责数据库定义, 数据库对象定义, 由CREATE, ALTER与DROP三种语言组成
  • DML数据操作语言, 负责数据库对象的操作,CRUD增删改查
  • DCL数据控制语言, 负责数据库权限访问控制, 有GRANT和REVOKE两个指令组成
  • TCL事务控制语言, 负责处理ACID事务, 支持commit, rollback(回滚)指令(INNODB)

语言规范

  1. SQL语句大小写不敏感
    • 一般建议, SQL的关键字, 函数等大写
  2. SQL语句末尾应该使用分号结束
  3. 注释
  • 多行注释/*注释内容*/
  • 单行注释-- 注释内容
  • MySQL注释可以使用#
  1. 使用空格或或缩进来提高可读性
  2. 命名规范
    • 必须字母开头
    • 可以使用数字,#, $ 和_
    • 不可以使用关键字
DCL

GRANT授权, REVOKE撤销

Grant all ON empliyees.* TO "gogs"@"%" IDENTIFIED by "密码"
REVOKE ALL ON *.* FROM 用户  ##撤销权限
##*.*  第一个*basebases所有库,   第二个*匹配所有库内的所有表

*为通配符, 指代任一款或者任意表
*.*所有库的所有表;
emloyees.*表示employess库下的所有表
% 为通配符, 它是SQL语句的通配符, 匹配任意长度字符串注意是匹配字符的.
'_'指代一个字符

DDL
删除用户(慎用)
DROP USER gogs;
创建数据库

库的数据的集合, 所有数据按照数据模型组织在数据库中.

GREATE DATABASE IF NOT EXISTE test CHARACTER SET utf8mb64_general_ci;
GREATE DATABASE IF NOT EXISTE test CHARCTER SET utf8;

CHARACTER SET 指定字符集.
utfmb4是utf8的扩展, 支持4字节(一些特殊符号需要), 需要MYSQL5.5.3+.
COLLATE指定字符集的校对规则, 用来做字符串的比较. 例如a, A谁大

删除数据库
DROP DATABASE IF EXIST gogs;
创建表

表分为行和列, MySQL是行存数据库. 数据时一行行存的, 列必须固定多少列.
行Row, 也称为记录Record,元组.
列Column, 也称字段Field,属性.
字段的取值范围叫做域Domain. 例如gender字段的取值就是M或者F连个值

CREATE TABLE `employess`( 
	`emp_no` int(11) NOT NULL,
	`birth date` date NOT NULL, 
	`first_name` varchar(14) NOT NULL,
	 `last_name` varchar(16) NOT NULL, 
	 `gender` enum('M','F') NOT NULL, 
	 `hire_date` date NOT NULL, PRIMARY KEY(`emp_no`)
) ENGINE=InnoDB  DEFAULT CHARSET = utf8;
desc

查看列信息
{DESCRIBE | DESC} tbl_name[col_name | wild]

DESC employees;
DESC employees '%name'
关系

在关系型数据库中. 关系就是二维表, 由行和列组成.

行Row,也称记录Record, 元组.
列Column, 也称字段Field, 属性.
字段的取值范围叫做 域Domain. 例如gender字段的取值就是M或者F两个值

维数: 关系的维数指关系中属性的个数
基数: 元组的个数

注意在关系中, 属性的顺序并不重要. 理论上, 元组顺序也不重要, 但是由于元组顺序和存储相关, 会影响查询效率.

候选键

关系中, 能够唯一标识一条元组的属性或者属性集合, 称为候选键.

PRIMARY KEY主键

表中一列或者多列组成唯一的key, 也就是通过这一个或者多个列能够唯一标识一条记录, 即被选择的候选键.
主键的列不能包含空值null. 主键往往设置为整形, 长整型, 可以为自增AUTO_INCREMENT字段.
表中可以没有主键, 但是, 一般表设计中 ,往往都会有主键, 以避免记录重复.

Foreign KEY外键

严格来说, 当一个关系中的某个属性或者集合与另一个关系(也可以是自身)的候选键匹配是, 就乘坐这个属性或属性集合是外键.

索引Index

可以看做是一本字典的目录, 为了快速检索用. 空间换时间, 显著提高查询效率.
可以对一列或者多列字段设定索引.

主键索引, 主键会自动建立主键索引, 主键本身就是为了快速定位唯一记录的.
唯一索引, 表中的所用组成的索引必须唯一, 但可以为空, 非空值必须唯一
普通索引, 没有唯一性的要求, 就是建一个字典的目录而已.

约束Constraint

为了保证数据的完整争取, 数据模型还必须支持完整性约束.

  • "必须有值"约束: 某些列的值必须有值, 不许为空NULL

  • 域约束Domain Constraint:限定了表中字段的取值范围

  • 实体完整性Entity Integrity:
    PRIMARY KEY约束定义了主键, 就定义了主键约束. 主键不重复且唯一, 不能为空.

引用完整性Referential Integrity

外键定义中, 可以不是引用另一张表的主键, 但是, 往往实际只会关注引用主键.
外键: 在表B中的列, 引用了表A中的主键, 表B中的列就是外键.
A表称为主表, B表称为从表

  • 插入规则
    不需要指定.
    如果在表B插入一条记录, B的外键列插入一个值,这个值必须是表A中存的主键值.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值