MySQL笔记2:数据库的列类型、字段属性、表的创建删除和修改
2. 操作数据库
sqlyog操作命令:选中命令行,点击执行图标
操作数据库 > 操作数据库中的表 > 操作表中的数据
mysql关键字不分大小写
2.1 操作数据库(了解)
- 创建数据库
CREATE DATABASE [IF NOT EXISTS] westos -- 中括号,可选
- 删除数据库
DROP DATABASE [IF EXISTS] westos
- 使用数据库
USE `school` -- 如果表明或字段是特殊字符,需要带``
- 查看数据库
SHOW DATABASES -- 查看所有数据库
对比SQLyog的可视化操作
学习思路:
- 对照SQLyog可视化历史记录查看sql语句
- 固定的语法和关键词强行记忆
2.2 数据库的列类型
数值
- 整数:
- tinyint:十分小的数据,1字节
- smallint:较小的数据,2字节
- mediumint: 中等大小的数据,3字节
- int:标准的整数,4字节,常用,设置的长度是最大有效显示宽度
- bigint:较大的数据,8字节(long)
- 浮点数:
- float:单精度,4字节
- double:浮点数,8字节(存在精度问题
- decimal:字符串形式的浮点数,金融计算时使用,精确
字符串
- char:字符串固定大小的字符串,0~255
- varchar:可变性字符串,0~65535,常用(String)
- tinytext:微型文本,2^8-1
- text:文本串,2^16-1,保存大文本
时间日期
java.util.Date
- data:YYYY-MM-DD, 日期格式
- time:HH: mm: ss,时间格式
- datetime:YYYY-MM-DD HH: mm: ss,最常用的时间格式
- timestamp:时间戳,从1970.1.1到现在的毫秒数,也较为常用
- year:年份表示
null
- 没有值,未知
- 注意不要使用null进行运算,结果为null
2.3 数据库的字段属性(重要)
Unsigned:
- 无符号整数
- 声明该列不能声明为负数
zerofill:
- 0填充的
- 不足的位数,使用0来填充,int(3): 5 -> 005
自增:
- 通常理解为自增,自动在上一条记录的基础上+1(1是默认值)
- 通常用来设计唯一的主键(index),必须是整数类型
- 可以自定义设置自增的起始值和步长(高级中)
非空 NULL/not null:
- 设为not null时,如果不复制会报错
- 设为NULL时,如果不填写值,默认为null
默认:
- 设置默认的值
- 如果不指定该列的值,则会有默认的值
每张表需要拥有的属性
做项目用,表示一个项目存在的意义
id:主键
`version` :乐观锁
is_delete:伪删除
gmt_create:创建时间
gmt_update:修改时间
2.4 创建数据库表
-- 创建一个school数据库
-- 创建学生表(列,字段) 使用SQL创建
-- 学号int 登陆密码varchar(20) 姓名,性别varchar(2),出生日期datatime,家庭住址,email
-- 注意:使用英文(),表的名字 和 字段 尽量用``括号起来
-- AUTO_INCREMENT 自增
-- 字符串使用''单引号包裹
-- 所有语句后面加英文逗号 , 最后一个不用加
-- PRIMARY KEY 主键,一般一张表只有一个
CREATE TABLE IF NOT EXISTS `student2` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(3) NOT NULL DEFAULT '保密' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '生日',
`address` VARCHAR(100) DEFAULT NULL COMMENT '地址',
`email` VARCHAR(50) DEFAULT NULL COMMENT 'email',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
创建格式:
CREATE TABLE [IF NOT EXISTS] `表名` (
'字段名' 列类型 [属性] [索引] [注释],
'字段名' 列类型 [属性] [索引] [注释],
......
'字段名' 列类型 [属性] [索引] [注释]
)[表类型] [字符集设置] [注释]
常用命令:
SHOW CREATE DATABASE school -- 查看创建数据库的语句
SHOW CREATE TABLE student2 -- 查看创建表的语句
DESC student2 -- 显示表的结构
2.5 数据表的类型
数据库引擎:
- InnoDB 默认使用
- MYISAM 早些年使用
MyISAM | InnoDB | |
---|---|---|
事务支持(执行时同时成功或同时失败 | 不支持 | 支持 |
数据行锁定(锁定一行 | 不支持(表锁定 | 支持 |
外键约束(在数据库内关联另一张表 | 不支持 | 支持 |
全文索引 | 支持 | 不支持(MySQL 5.6.4后支持 |
表空间大小 | 较小 | 较大,约为MyISAM2倍 |
常规操作使用:
- MyISAM:节约空间,速度较快
- InnoDB:安全性高,事务支持,多表多用户操作(外键约束)
物理空间存储位置
所有的数据库文件都存在于data目录下(8.0默认在隐藏文件Programdata下),本质还是文件的存储
MySQL引擎在物理文件上的区别
- InnoDB在数据库中有一个*.frm文件(8.0为idb文件),以及上级目录下的ibdata1文件
- MyISAM:
- *.frm:表结构的定义文件
- *.MYD:数据文件(Data)
- *.MYI:索引文件(Index)
设置数据库表的字符集编码
自己设置编码可以保证安全在不同的地方运行
CHARSET=utf8mb4
不设置会使用默认的字符编码,MySQL的默认编码是Latin1,不支持中文
可在my.ini文件中设置为utf-8
character-set-server=utf8
2.6 修改、删除表
所有的创建和删除操作尽量加上判断,避免报错
修改表
- 修改表名
-- 修改表名 ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE student RENAME AS student1
- 增加表的字段
-- 增加表的字段 ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE student1 ADD sex VARCHAR(2)
- 修改表的字段(重命名,修改约束)
-- 修改表的字段(重命名,修改约束)
ALTER TABLE student1 MODIFY sex INT(2) -- 修改约束
ALTER TABLE student1 CHANGE sex sex1 VARCHAR(2) -- 重命名字段,可以修改约束
- 删除表的字段
-- 删除表的字段
ALTER TABLE student1 DROP sex1
删除表
-- 删除表(如果存在
DROP TABLE IF EXISTS student1
注意
- 所有字段名使用反引号``包裹
- 注释 -- /**/
- sql大小写不敏感,建议写成小写
- 所有符号都使用英文的