MySQL数据库

本文详细介绍了MySQL的基础知识,包括数据库理论、SQL语言、数据类型、表的约束、基本查询操作以及实际案例。讲解了如何创建和管理数据库、表,以及数据类型的选用,如整型、浮点型、字符型和日期时间类型。还讨论了表间关系、字符集、主键与唯一键等概念,并提供了增删改查的示例。此外,文章提及了数据库设计的注意事项,如避免使用ENUM和SET类型。
摘要由CSDN通过智能技术生成

●1. MySql理论知识
●2. MySql 实际操作
●3. MySql常用数据类型
●4. MySql表的约束
●5. MySql的基本查询
●6. 实例

1.mysql理论知识

1.1. 了解什么是 MySQL

1.2. 常见的数据库

1.3. SQL 结构化查询语言

  1. DDL 其次,实际工作中,往往是 DBA 来建库建表
    2. DML 使用的重点,增删改查
    3. DCL DBA 在用

1.4. 字符集编码Unicode

  1. GB18030(GBK/GB2312) (英语+汉语)
    2. UTF-8 (全支持)

1.5. 服务
(TCP 3306) - 库(DB Database) - 表(Table)

  1. 库 想象成一个应用,项目
    2. 表 一个类
    2. 列 类的一个成员变量
    3. 行 这个类的具体对象

1.6. 表和表之间的关系

  1. 一对一的关系
    2. 一对多的关系
    3. 多对多的关系

2.mysql 实际操作

2.0. 登陆 mysql
mysql -u<mysql 的用户名> -p

2.1. DDL

  1. 对库的操作
    ● CREATE DATABASE 库名;
    ●SHOW DATABASES;
    ● SHOW CREATE DATABASE 库名;
    ● USE 库名;
    ● DROP DATABASE 库名;

  2. 对表的操作
    ● CREATE TABLE 表名 (列名 列类型, …, 列名 列类型);
    ● SHOW TABLES;
    ● SHOW CREATE TABLE 表名; DESC 表名;
    ● DROP TABLE 表名;
    ● RENAME TABLE 旧表名 TO 新表名;

3.MySql常用数据类型

3.1. 整型
TINYINT,SMALLINT,INT,BIGINT

3.2. 小数

  1. 浮点数(不是高精度) FLOAT/DOUBLE
    2. 保证精度 DECIMAL/NUMEROUS

3.3. 坑

  1. bit 显式的时候是 ASCII 码
    2. CHAR 最多 255 个字符
    3. VARCHAR 最多是 65535 个字节,具体多少字符
    65535/3(每个utf8 占 3 字节)

3.4. 字符类型

  1. 定长 CHAR(字符个数)
    2. 变长 VARCHAR(字符个数)
    3. TEXT 字符
    4. BLOB 字节流

3.5. 日期、时间

  1. DATETIME 年-月-日 时:分:秒
    2. DATE 年-月-日
    3. TIME 时:分:秒
    4. TIMESTAMP 时间戳(1970 的秒数)
    TIMESTAMP vs DATETIME
    4 个字节 8 个字节
    1970 - 2037 0000-9999

3.6. MySQL 规范上不建议使用 ENUM 和 SET

  1. 修改表结构的代价非常大
    2. ENUM/SET 信息保存在表结构中
    3. 所以,更新 ENUM 及 SET 都需要修改表结构,风险较大
    4. 所以不建议使用

3.7. 带括号的数据类型

  1. CHAR(字符个数,会影响字段长度)
    2. VARCHAR(字符个数,会影响字段长度)
    3. BIT(位的长度,会会影响字段长度)
    4. FLOAT(整体的显式位数,小数点后显式位数;不影响字段长度)
    5. INT(显式长度,不影响字段长度) ZEROFILL
    INT(10) 存了一个 3 0000000009 只在 mysql 命令行有效

4. MySql表的约束

4.1空属性

● NULL 不区分大小写
● NULL 的真实含义是,这个字段值不知道
● 一般来说,有 NULL 参与的运算结果都是 NULL
● 定义表时,字段后可以跟 NOT NULL 强制不允许出现空
● 没有特殊理由,建议都加上 NOT NULL

4.2 默认值

DEFAULT 后跟默认值

4.3 主键(primary key)

  1. 每个信息都有主键,用来唯一标识一条信息
    可以是一个字段,也可以是多个字段组成(复合主键)
  2. 在 InnoDB 的引擎下,数据在硬盘存储是按照主键的排序方式存储的
    为了避免中间插入主键,通常建议把主键设置成一个
    ● 1. 永远递增的值
    ● 2. 永不修改的值
  3. 主键不允许为空/主键不允许重复
  4. 每个表上都有一个主键,通常用自增字段作为主键

4.4 唯一键 (Unique Key)

   主键VS唯一键
  ● 相似点:
   1 主键和唯一键都不允许重复
  ● 不同点:
   1. 主键不允许为空,唯一键允许为空
   2. 存储上,数据的存储是按照 主键 递增顺序保存的
   3. 唯一键,看作另外有一套数据结构

5. MySql的基本查询

5.1 Create

CREATE TABLE students (

PRIMARY KEY (id, sn) – 支持单字段 或者 多字段
UNIQUE KEY (sn, name)
)
– MySQL 不建议使用外键

CREATE TABLE students (
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT "利用自增字段作为表主键",
	sn INT NOT NULL UNIQUE COMMENT "学号,事实上的主键,唯一键,不允许重复",
	name VARCHAR(10) NOT NULL COMMENT "姓名",
	gender TINYINT NOT NULL COMMENT "性别: 1 女  2 男 3 不想说",
	school VARCHAR (40) NOT NULL DEFAULT "西安财经大学" COMMENT "学校",
	registerd_at DATETIME NOT NULL COMMENT "报名时间",
	created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "入表时间"
) COMMENT "学生表";

5.2 Select

SELECT LAST_INSERT_ID();

5.3 Insert

INSERT INTO classes (name) VALUES (‘计算机1708班’), (‘计算机1707班’);
INSERT INTO students (name, class_id) VALUES
(‘小A’, 2),
(‘小B’, 1);

5.4 DELET

DELETE FROM classes WHERE name = ‘计算机1708班’; – 会失败
DELETE FROM students WHERE name = ‘小B’;
DELETE FROM classes WHERE name = ‘计算机1707班’; – 会成功

6.实例

/* 一对一、一对多、多对多 */

6.1 创建一个师生信息表

CREATE TABLE teachers (
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(20) NOT NULL
);

CREATE TABLE classes (
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(20) NOT NULL
);

CREATE TABLE students (
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(20) NOT NULL,
	class_id INT NOT NULL,
	FOREIGN KEY (class_id) REFERENCES classes(id)
);

6.2创建一个商品购买信息表

CREATE TABLE goods (
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '',
	name VARCHAR(30) NOT NULL COMMENT '',
	price INT NOT NULL COMMENT '单位是分',
	category VARCHAR(20) NOT NULL DEFAULT '' COMMENT '',
	provider VARCHAR(50) NOT NULL DEFAULT '' COMMENT ''
) COMMENT '商品信息';

CREATE TABLE customers (
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '',
	name VARCHAR(20) NOT NULL COMMENT '',
	address VARCHAR(100) COMMENT '',
	email VARCHAR(100) COMMENT '',
	gender TINYINT NOT NULL COMMENT '0 保密 1 女 2 男',
	idcard CHAR(18) NOT NULL COMMENT '实名制'
) COMMENT '客户信息';

CREATE TABLE purchases (
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '',
	customer_id INT UNSIGNED NOT NULL COMMENT '',
	goods_id INT UNSIGNED NOT NULL COMMENT '',
	num INT NOT NULL DEFAULT 0 COMMENT '',
	FOREIGN KEY (customer_id) REFERENCES customers(id),
	FOREIGN KEY (goods_id) REFERENCES goods(id)
) COMMENT '订单信息';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值