MySQL
1.常用命令
mysql -u root -p111111 --连接数据库
flush privileges; --刷新权限
-------------------------------
-- 所有sql语句都需要加上“;”
show databases; --查看所有数据库
use 库名; -- 切换数据库
show tables; --查看数据库中的表
describe 表名; --显示数据库中表的信息
create database 库名; --创建数据库
exit; --退出连接
-- 单行注释
/* 多行注释
*/
操作数据库
2.1 操作数据库
“[]” 表示可选 “{}” 表示必选
“IF NOT EXISTS” 如果不存在 “IF EXISTS” 如果存在
-
创建数据库
create database 库名
-
删除数据库
drop database 库名
-
使用数据库
-- 当表名或者字段名存在特殊字符时,需要在表名或字段名加上`` use `库名`
-
查看所有的数据库
show databases
2.2 数据库的列类型
-
数值
- tinyint 十分小的数据 1个字节
- smallint 较小的数据 2个字节
- mediumint 中等大小的数据 3个字节
- int 标准的整数 4个字节 (常用的)
- bigint 较大的数据 8个字节
- float 浮点数 4个字节
- double 浮点数 8个字节
- decimal 字符串形式的浮点数
-
字符串
- char 字符串固定大小 0~255
- varchar 可变字符串 0~65535 (常用的 对应java的String)
- tinytext 微型文本 2^8-1
- text 文本串 2^16-1 保存大文本
-
时间日期
java类:java.util.Data
- data YYYY-MM-DD 日期格式
- time HH:mm:ss 时间格式
- **datatime YYYY-MM-DD HH:mm:ss ** 最常用的时间格式
- timestamp 时间戳(1970.1.1到现在的毫秒数)
- year 年份表示
-
null
没有值,未知值
注意,不要使用NULL进行运算,结果为NULL
2.3 数据库的字段属性
Unsigned:
- 无符号的整数
- 声明了该列 不能声明为负数
zerofill:
- 0填充的
- 不足的位数使用0填充
自增:
- 自动在上一条数据记录的基础上+1
- 通常用来设计唯一的主键 必须为int类型
- 可以自定义设计主键自增的起始值和步长
非空:(NULL not null)
- 设置非空后 如果不赋值,就会报错
- NULL 如果不填写值,默认结果为null
默认:
- 设置默认的值!
- 如果不指定该列的值,则会有默认的值!
2.4 创建数据库表
-- 目标:创建一个school数据库
-- 创建学生表(列,字段) 要求使用SQL创建
-- 学号 int 登录密码 varchar(20) 姓名 性别varchar(2) 出生日期 datatime 家庭住址 email
-- CREATE TABLE 创建数据表
-- AUTO_INCREMENT 自增
-- COMMENT 注释
-- DEFAULT 默认
-- PRIMARY KEY 唯一主键
-- 注:每条语句后面都要加上 , (英文状态下) 最后一条语句不需要添加
CREATE TABLE `student`(
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(10) 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(20) DEFAULT NULL COMMENT '邮件',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
sql语句创建表的格式化
CREATE TABLE `表名`(
`字段名` 列类型 [类型] [索引] [注释],
`字段名` 列类型 [类型] [索引] [注释],
......
`字段名` 列类型 [类型] [索引] [注释]
)[ENGINE=INNODB DEFAULT CHARSET=utf8]
*** 常用命令***
SHOW CREATE DATABASE 库名 -- 查看创建数据库语句
SHOW CREATE TABLE 表名 -- 查看student数据表的定义语句
DESC 表名 -- 显示表的结构
2.5 数据表的类型
数据库编码格式
https://blog.csdn.net/weixin_54225715/article/details/123315777
2.6 删除和修改数据表
修改
-- 修改表名
ALTER TABLE 原表名 RENAME AS 修改名
ALTER TABLE 表名 ADD 字段名 列属性
-- 添加字段
-- 例:
ALTER TABLE teacher111 ADD age INT(10)
-- 修改表的字段
ALTER TABLE teacher111 MODIFY age VARCHAR(10) -- 修改约束
ALTER TABLE teacher111 CHANGE age age1 INT(1) -- 字段重命名
MODIFY与CHANGE的区别:
- MODIFY 只能修改约束(即字段的列属性) 不能修改字段名
- CHANGE 能够修改字段名 在修改后的字段名后面添加列属性也可以修改
删除
-- 删除表
DROP TABLE 表名
-- 为体现严谨性 一般添加 IF EXISTS (如果表存在,则删除)
DROP TABLE IF EXISTS teacher111
-- 删除表的字段
ALTER TABLE 表名 DROP 字段名
所有的创建删除操作尽量加上判断,避免运行时报错
MySQL数据管理
3.1 外键
方法一:
CREATE TABLE `student`(
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(10) 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(20) DEFAULT NULL COMMENT '邮件',
`gradeid` INT(10) NOT NULL COMMENT '年级',
PRIMARY KEY (`id`),
KEY `KF_gradeid` (`gradeid`),
CONSTRAINT `KF_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
方法二:在创建数据表后在进行外键的设置
-- 创建一个年级表
CREATE TABLE `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(20) NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 创建一个学生表
CREATE TABLE `student`(
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(10) 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(20) DEFAULT NULL COMMENT '邮件',
`gradeid` INT(10) NOT NULL COMMENT '年级',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 创建表时没有外键 创建后在添加外键
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
/*
公式:
ALTER TABLE `需要外键的数据表` ADD CONSTRAINT `约束名` FOREIGN KEY(`作为外键的列`) REFERENCES `外键继承的表`(`外键继承的字段`)
*/
3.2 DML语言
**数据库的意义:**数据管理,数据存储
DML语言: 数据操作语言
- insert
- update
- delete
3.3 添加
-- 基本格式
insert into `表名`(`字段名`) values ('数据')
-- 表明添加数据的字段
INSERT INTO `student`(`name`,`pwd`,`sex`,`birthday`,`address`,`email`,`gradeid`) VALUES ('张三','1598456','男','2020-02-02','成都','2434439241@qq.com','1')
-- 不表明添加数据的字段
INSERT INTO `student` VALUES(2,'李四','456456','女','2000-01-01','上海','2434439241@qq.com',2)
-- 一次性插入多条数据
INSERT INTO `student`(`name`,`pwd`,`sex`,`birthday`,`address`,`email`,`gradeid`)
VALUES
('王五','123456','男','2019-01-01','北京','2434439241@qq.com',3),
('王伟','789789','女','2018-01-01','杭州','2434439241@qq.com',4)
3.4 修改
-- 修改名字(单属性修改)
UPDATE `student` SET `name`='长江7号' WHERE id = 1;
-- 修改信息(多属性修改) 属性之间用‘,’隔开
UPDATE `student` SET `name`='长江7号',`sex`='女' WHERE id = 2
-- 范围内修改属性(between ... and ...)
UPDATE `student` SET `name`='长江1号',`sex`='女' WHERE id BETWEEN 3 AND 5
-- 多条件定位数据(条件之间用and连接) 无上限
UPDATE `student` SET `name`='长江7号' WHERE `name` = '长江1号' AND `sex` = '男'
-- 修改时间变量
UPDATE `student` SET `birthday` = CURRENT_TIME WHERE `name` = '长江7号' AND `sex` = '女'
*** 条件:*** where 子句 运算符 id等于某个值,大于某个值,在某个区间内修改值
操作符会返回布尔值
操作符 | 含义 | 范围 | 结果 |
---|---|---|---|
= | 等于 | 5=5 | true |
<>或!= | 不等于 | 5<>5或者5!=5 | false |
> | 大于 | 5>5 | false |
< | 小于 | 5<5 | false |
>= | 大于等于 | 5>=5 | true |
<= | 小于等于 | 5<=5 | true |
between…and… | 在某个范围内 | [2,5] | |
and | 我和你(&&) | 5>1 and 1>2 | false |
or | 我或你(||) | 5>1 or 1>2 | true |
语法 update 表名 set colnum_name = value, [colnum_name = value,…] where [条件]
注意事项:
- colnum_name 是数据库的列,使用时尽量带上``
- 条件 进行筛选的条件,如果没有则会修改表中的所有列
- value 是一个具体的值,也可以是一个变量
- 多个设置的属性之间使用英文逗号隔开
3.5 删除
delete 命令
语法 delete from 表名 where 条件
-- 删除一条数据
DELETE FROM `student` WHERE `id` = 10
truncate 命令
作用: 完全清空一个数据库表。表的结构索引约束条件不会改变!
-- 清空数据表
TRUNCATE `表名`
delete 与 truncate 的区别
- 相同点:都能删除数据,都不会删除表结构
- 不同点:
- truncate 重新设置自增列,计数器不会归零
- truncate 不会影响事务