MySql笔记
1、前言
比较少写这种文章,主要还是我 mysql 没系统化学习过,在写这篇前也只会 CRUD, 也不会 数据 库 设计😔,加上期末考正好要 考 mysql,正好借这个机会重学一遍,顺便来记录一下这段学习中的一些 mysql 的操作。
2、操作数据库
==mysql 关键字 不区分大小写==(个人习惯,喜欢大写,方便区分),下文例子数据库以 kzsoft 为名。
表名与字段是关键字请带上反引号`
2.1、简单操作数据库
1、创建数据库
CREATE DATABASE IF NOT EXISTS kzsoft;
2、删除数据库
DROP DATABASE IF EXISTS kzsoft
3、使用数据库
USE kzsoft
4、查看数据库
SHOW DATABASES --查看所有的数据库 有s
2.2、数据库的数据类型
1、数值
类型 | 描述 | 所占字节 | 用途 |
---|---|---|---|
tinyint | 十分小的数据 | 1 个字节 | 一般用来当布尔值用 |
smallint | 较小的数据 | 2 个字节 | 少用 |
mediumint | 中等的数据 | 3 个字节 | 少用 |
int | 标准整数 | 4 个字节 | 常用,一般都用 int |
bigint | 较大的整数 | 8 个字节 | 少用 |
float | 单浮点数/单精度小数 | 4 个字节 | 少用 |
double | 双浮点数/双精度小数 | 4 个字节 | 少用 有精度问题 |
decimal | 字符串形式的浮点数 | 不一定 | 精度要求高用 decimal (金融计算) |
2、字符串
类型 | 描述 | 用途 |
---|---|---|
char | 固定大小 0~255,不可变长度 | 存手机号等固定长度 |
varchar | 可变字符串 0~65535 | 存可变字符串 存变量 |
tinytext | 微型文本 2^8-1 | 能用 text 就别用这个 |
text | 文本串 2^16-1 | 保存大文本 |
3、时间日期
类型 | 描述 | 用途 |
---|---|---|
date | YYYY-MM-DD 日期 | 存日期 |
time | HH:mm:ss 时间 | 存 |
datetime | YYYY-MM-DD HH:mm:ss | 最常用的时间格式 |
timestamp | 时间戳形式 1970.1.1 8:00:00 到现在的毫秒数 | 但会有 2038 年问题 |
4、NULL
不要用 NULL 进行运算,结果为 NULL
2.3、字段类型
字段类似 | 描述 | 用途 | |
---|---|---|---|
Unsigned | 无符号整数 | 该列不能声明为负数 | |
zerofill | 用 0 填充 | 不足的位数 用 0 来填充 | |
自增 | 自动在上一条记录+1 (默认,可设置自增大小) | 设置唯一的主键 如 id | |
非空 | not null | 该字段不能为 NULL | |
默认 | 默认值 | 不指定 则默认值 |
以下字段 是未来做项目用的,表示一个记录的存在意义
id 主键
`version` 乐观锁
is_delete 伪删除
createAt 创建时间
updateAt 修改时间
2.4、 操作表
表名与字段,尽量用``括起来(你永远不知道,你的字段名会不会和关键字重名!)
字符串 通过单引号括起来
所有语句后面加,除了最后一行
PRIMARY KEY 主键一张表只有唯一的主键
1、创建表
CREATE TABLE IF NOT EXISTS `user` (
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '用户id',
`username` VARCHAR(30) NOT NULL COMMENT '用户名',
`password` VARCHAR(30) NOT NULL COMMENT '密码',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
格式如下
CREATE TABLE [IF NOT EXISTS] `表名` (
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
PRIMARY KEY(` `)
)[表类型] [字符集设置] [注释]
通过上面的手动通过 sql 语句创建表,对已创建的表可通过
-
SHOW CREATE DATABASE 数据库名
查看数据库的定义语句,也就是输出创建数据库的 sql 语句 -
SHOW CREATE TABLE 表名
查看表的定义语句,也就是输出创建表的 sql 语句 -
DESC 表名
–显示表的结构 (desc 是 describe 的缩写)2.5、数据库引擎
MYISM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为前者 2 倍 |
各自优点 | 节省空间,速度快 | 安全性高,事务处理,多表多用户操作 |
MySQL 引擎在物理文件上的区别
- INNODB 在数据库表中只有一个 *.frm 文件(表结构定义文件) 以及上级目录下的 ibdata1 文件
- MYISM 对应文件 有*.frm 文件 *.MYD 文件(数据文件) *.MYI 文件(索引文件)
设置数据库表的字符集编码
CHARSET=utf8
不设置的话,会是 mysql 的默认字符集编码 Latin1(不支持中文!)
在配置文件 my.ini 中配置默认编码 character-set-server=utf8
2、修改表
关键字 ALTER
--将表名user修改为account
ALTER TABLE user RENAME AS account
--添加字段 age
ALTER TABLE user ADD age INT(10)
--修改字段 (修改类型与约束)
ALTER TABLE user MODIFY age VARCHAR(10)
--修改字段 (修改字段名)
ALTER TABLE user CHANGE age age1 INT(10)
--删除字段
ALTER TABLE user DROP age
3、删除表
DROP TABLE IF RXISTS user
3、MySQL 数据管理
3.1、外键(极少用)
定义外键 key
添加约束(执行引用) references 引用
这里创建一个角色表 role,字段有 roleid,rolename,下为创建表时添加外键例子
KEY `FK_roleid` (`roleid`),
CONSTRAINT `FK_roleid` FOREIGN KEY(`roleid`) REFEREBCES `role`(`roleid`)
删除带有外键关系表时,必须先删除引用别的表(从表),再删除被引用的表(主表)
上面用户与角色关系表中,角色表就是无法直接删除,需删除用户表才可删除角色表。
可直接用 ALTER 添加外键关系
ALTER TABLE `user`
ADD CONSTRAINT `FK_roleid` FOREIGN KEY(`roleid`) REFEREBCES `role`(`roleid`)
ALTER TABLE `表名`
ADD CONSTRAINT 约束名 FOREIGN KEY(`外键`) REFEREBCES `引用表`(`引用字段`)
以上操作都是物理外键,数据库级别的外键,不建议使用!(虽然能保证数据完整性,但是寻找以及删除都是特别麻烦的,在数据量大的时候,异常痛苦,用过外键的都说坏)
3.2、DML 语言
数据库意义:数据存储,数据管理
DML:数据库操作语言
- insert
- update
- delete
3.2.1、添加(insert)
--语法
INSERT INTO 表名([字段1,字段2,字段3]) VALUES ('值1'),('值2'),('值3')
-- 插入数据
INSERT INTO `role`(`rolename`) VALUES ('管理员')
-- 插入多个数据
INSERT INTO `role`(`rolename`)
VALUES ('管理员'),('