操作数据库
操作数据库 > 操作数据库中的表 > 操作数据库中表的数据
MySQL关键字不区分大小写
操作数据库
-
创建数据库
CREATE DATABASE [IF NOT EXISTS] westos # 中括号的意思是可选,整句话意为如果这个数据库不存在,就创建这个数据库
-
删除数据库
DROP DATABASE [IF EXISTS] westos
-
使用数据库
-- tab键上面的符号 ` ,如果表名或者字段名是一个特殊字符,就需要加上这个符号 USE `school`
-
查看所有的数据库
SHOW DATABASES -- 查看所有的的数据库
- 不会的时候可以对比一下可视化操作和SQL语句(SQLyog历史记录)
- 固定的语法和关键字需要记住
数据库的数据列类型
-
数值
- tinyint 十分小的数据 1个字节
- smallint 较小的数据 2个字节
- mediumint 中等大小的数据 3个字节
- int 标准的整数 4个字节 对应Java中的int(常用)
- bigint 较大的数据 8个字节
- float 浮点数 4个字节
- double 浮点数 8个字节
- decimal 字符串形式的浮点数 金融计算的时候一般使用decimal
-
字符串
- char 保存固定长度的字符串(可包含字母、数字以及特殊字符) 0~255字符
- varchar 可变字符串 最多255个字符,如果值的长度大于255,则被转换为TEXT类型,对应Java中的String,是最常用的变量
- tinytext 微型文本 存放最大长度为 255个字符的字符串
- text 文本串 存放最大长度为65,535个字符的字符串
-
日期
java.util.Date
- date:yyyy-MM-dd 日期格式(大写MM是为了区分“分钟”和“月份”)
- time:HH:mm:ss 时间格式(大写HH是为了区分“12小时制”还是“24小时制”,大写为24小时制,小写为12小时制)
- datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
- timestamp 时间戳 全球唯一 指1970.1.1到现在的毫秒数
- year 年份表示
-
null
- 没有值,未知
- 不要使用null计算,不然结果一定为null
数据库的字段属性(重点)
- UNsigned:
- 无符号的整数
- 声明了该列不能为负数
- zerofill:
- 用0填充不足的位数
- 比如int长度为3,这时输入5会变为005
- 自增(autoincrement):
- 自动在上一条的记录的基础上+1(默认)
- 通常用来设计唯一的主键 index 必须是整数类型
- 可以自定义设计主键自增的起始值和步长
- 非空:
- null和not null
- 假设设置为not null,如果不给它赋值,就会报错!
- 不勾选此选项,如果不填写值,默认值为null
- 默认(default):
- 设置默认的值
- 如sex,默认值设置为男,如果不指定该列的值,默认值就是 男
拓展:常用的字段(每一个表都必须存在以下五个字段,未来做项目用的,表示一个记录存在的意义):
- id 主键 自增
- version 版本 乐观锁
- is_delete 伪删除
- gmt_create 创建时间
- gmt_update 修改时间
创建数据库表(SQL语句)
-- 注意点:使用英文括号,表的名称和字段尽量用``括起来
-- AUTO_INCREMENT 自增
-- 字符串使用英文单引号括起来
-- 所有的语句后面加英文逗号,最后一个字段不加
-- PRIMARY KEY 主键,一般单独一行方便查看,而且一个表只有一个唯一的主键
CREATE TABLE IF NOT EXISTS `studnet` (
`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(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`)
)ENGINE = INNODB DEFAULT CHARSET = utf8
格式总结:
CREATE TABLE [IF NOT EXISTS] `表名`(
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
......
`字段名` 列类型 [属性] [索引] [注释]
)[ENGINE=引擎 DEFAULT CHARSET=字符集]
常用命令(究极偷懒):
SHOW CREATE DATABASE student -- 查看创建数据库的语句
SHOW CREATE TABLE student -- 查看创建表的语句
DESC student -- 查看表的具体结构
数据表的类型
目前只需要记住其中两个:
- InnoDB
- 默认使用
- MyISAM
- 早些年使用
MyISAM | InnoDB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持(是整个表锁定) | 支持(只会把行锁定) |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持(5.6.4版本提供了英文支持) |
表空间的大小 | 较小 | 较大(约为MyISAM的两倍) |
注意:InnoDB 在 MySQL 5.6 版本开始支持全文索引。原因是InnoDB 从1.2.x 开始才增加了全文索引支持。而MySQL5.6版本中InnoDB 的版本才升级到 1.2.x。所以,MySQL 5.5版本的InnoDB 不支持全文索引。
常规使用操作:
- MyISAM 节约空间,速度较快
- InnoDB 安全性高,事务的处理,支持外键,多表多用户操作
数据库在物理空间存在的位置:
- 所有的数据库文件都存在data目录下
- 本质还是文件的存储
MySQL引擎在物理文件上的区别:
- InnoDB 在数据库表中只有一个.frm文件,以及上级目录下的ibdata文件夹(MySQL在8.0取消了.frm文件,元数据都存储在表空间)
- MyISAM对应文件
- .frm文件:表结构的定义文件
- .MYD文件:数据文件(表具体的data)
- .MYI文件:索引文件(index)
设置数据库表的字符集编码:
CHARSET=utf8
不设置的话,回事MySQL默认的字符集编码~(不支持中文),MySQL默认的编码是Latin1。这个编码是可以修改的。
-
在创建数据库的时候就声明编码
-
在my.ini中配置默认的编码(通用性很低,不推荐,换个没有配置过的电脑就没用了)
charset-set-server=utf8
修改和删除数据表字段
-
修改表
-- 修改表 -- ALTER TABLE 旧表名 RENAME AS 新表名 ALTER TABLE student RENAME AS student1 -- 增加表的字段 -- ALTER TABLE 表名 ADD 字段名 列属性 ALTER TABLE student1 ADD age INT(11) -- 修改表的字段(重命名,修改约束) -- MODIFY 能修改字段类型和约束,不能用来重命名 -- ALTER TABLE 表名 MODIFY 字段名 列属性(约束) ALTER TABLE student1 MODIFY age VARCHAR(11) -- CHANGE 可以用来重命名字段,也可以用来修改约束,但是要加上新字段名,故一般不用CHANGE修改约束 -- ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性 CHANGE TABLE studnet1 CHANGE age age1 INT(1) -- 删除表的字段 -- ALTER TABLE 表名 DROP 字段名 ALTER TABLE student1 DROP age1
-
删除表
-- 删除表(如果表存在则删除) DROP TABLE IF EXISTS student1
所有的创建和删除操作,尽量加上判断,防止报错。
注意点:
- 字段名,使用反引号``包裹
- 注释用 – 或者 /* */ 少用 #
- SQL关键字大小写不敏感,看个人喜好
- 符号用英文