连接数据库
命令行连接!
mysql -uroot -p123456
命令行连接
mysql -uroot -p123456 --连接数据库
show databases; -- 查看所有的数据库
mysql > use school; -- 切换数据库use数据库名
database changed
show tables; -- 查看数据库中所有的表
describe student; -- 显示数据库中所有的表的信息
create database westos; -- 创建一个数据库
创建数据库
CREATE DATABASE IF NOT EXISTS westos
删除数据库
DROP DATABASE IF EXISTS westos
2操作数据库
2.2数据库的列类型
数值
tinyint 十分小的数据 一个字节
smallint 较小的数据 两个字节
int 标准的数据 四个字节
字符串类型
char 0-255
varchar 可变字符串 0-65535
text 文本串 2^16 - 1 保存大文本
时间日期类型
date YYYY-MM-DD 日期格式
time HH:MM:SS 事件格式
datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
null类型
没有值,位置
2.4 创建数据表
创建一个school数据库
目标
学号int,姓名name,密码varchar (20),性别varchar(2),出生日期(datatime),家庭佳址,email
注意点,使用英文 ()表的名称 和字段尽量使用
AUTO INCREMENT = 自增
NOT NULL = 非空
DEFAULT ‘匿名’ = 默认值为 :匿名
PRIMARY KEY(`id`) = 主键,一般写在后面
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(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthdey` DATETIME DEFAULT NULL COMMENT '生日',
`adress` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`)
)ENGINE = INNODB DEFAULT CHARSET = utf8
格式
CREATE TABLE [IF NOT EXISTS] `表名` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`字段名` 列类型 [属性] [索引] [注释]
PRIMARY KEY(`id`)
)[表类型] [字符集设置]
SHOW CREATE DATABASE school --查看创建数据库的语句
SHOW CREATE TABLE student – 查看student数据表的定义语句
DESC student – 显示表的结构
engine : 引擎
右键-改变表[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oy5i7Hda-1646288483975)(C:\Users\胡子恒\AppData\Roaming\Typora\typora-user-images\image-20220205231141849.png)]
数据库引擎:
innodb 默认使用
myisam 早些年使用的
区别
myisam | innodb | |
---|---|---|
事务(两个sql语句执行, 要么都成功要么都失败) |
不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为两倍 |
- myisam 节约空间
- innodb 安全性高,事务的处理,多表多用户操作
在物理空间存在的位置
myisam 对应的文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FnkHvj2Z-1646288483976)(C:\Users\胡子恒\AppData\Roaming\Typora\typora-user-images\image-20220205234510642.png)]
- .myd --表结构的定义文件
- .frm --数据文件(data) sdi
- .myi --索引文件(index)
innodb对应的是ibd文件
字符集编码设置
charset = utf8
mysql 默认的编码是latin1
不支持中文
在my.ini中配置默认的编码
character-set-server = utf8
2.5修改表名
ALTER TABLE student2 RENAME AS student1
--修改表名
ALTER TABLE student1 ADD age INT(11)
--修改字段名
ALTER TABLE student1 MODIFY age VARCHAR(11)
--修改约束modify
ALTER TABLE student1 CHANGE age age1 INT(1)
--字段重命名change
ALTER TABLE student1 DROP age1;
--删除表中的字段age1
DROP TABLE IF EXISTS teacher1
--删除表
3 mysql的数据管理
3.1 外键(了解)
ALTER TABLE `student1`
ADD CONSTRAINT `fk_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
--将student1的gradeid设为外键,(grade中的gradeid就不能轻易删除了)
3.2DML语言(全记住)
dml数据操作语言
- insert
- update
- delete
3.3 添加insert
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3FPZ77Ef-1646288483976)(C:\Users\胡子恒\AppData\Roaming\Typora\typora-user-images\image-20220207034822352.png)]
INSERT INTO `grade`(`gradename`,`gradeid`) VALUES('大四','3')
INSERT INTO `grade` VALUES('2','一二三') --省略字段,但要一一对应
INSERT INTO `student1`(`id`,`name`,`pwd`,`sex`) VALUES('2','胡子','12345','男')
INSERT INTO `student1`(`id`,`name`) VALUES('3','张三'),('4','李四')
--同时插入多个数据
3.4 修改update
` UPDATE `student1` SET `name`='狂神2' WHERE id = '2'
--再student1 表中,id为2的name改为狂神2
UPDATE `student1` SET `name` = '狂神2' , `email` = '8191131892@qq.com' WHERE id = 2
--修改多个属性
条件where 子句,id等于某个值,再某个区间修改。。。
操作符 | 含义 | 范围 | 结果 |
---|---|---|---|
= | 等于 | ||
<> 或 != | 不等于 | 5<>6 | true |
>= | 大于 | ||
between 2 and 4 | 2和4范围内 | ||
and | |||
or |
UPDATE `student1` SET `name` = '小虎' WHERE NAME='狂神2' AND pwd='12345'
--and 多个条件
3.5 删除delete 和truncate
DELETE FROM `student1` WHERE `name` = '小虎'
DELETE FROM `student1`
--删除表student1的所有
**truncate **用它清空
作用:完全清空一个数据表,表的结构和索引约束不会变
TRUNCATE `student`
相同点
- 相同点:都能删除数据,不改变表结构
- 不同点:
- truncate 重新设置自增列, 计数器归零
- truncate 不会影响事务
delete 删除表后不会改变自动增量
(了解即可)delete表后,重启数据库
- INNODB 自增会从1开始
- MYISAM 继续从上一个增量开始
4 DQL查询数据(最重点)
4.1 DQL
(data query language 数据查询语言)
年级表代码
-- 创建年级表
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade`(
`gradeid` INT(11) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`)
) ENGINE=INNODB AUTO_INCREMENT = 6 DEFAULT CHARSET = utf8;
-- 创建科目表
DROP TABLE IF EXISTS `subject`;
CREATE TABLE `subject`(
`subjectno`INT(11) NOT NULL AUTO_INCREMENT COMMENT '课程编号',
`subjectname` VARCHAR(50) DEFAULT NULL COMMENT '课程名称',
`classhour` INT(4) DEFAULT NULL COMMENT '学时',
`gradeid` INT(4) DEFAULT NULL COMMENT '年级编号',
PRIMARY KEY (`subjectno`)
)ENGINE = INNODB AUTO_INCREMENT = 19 DEFAULT CHARSET = utf8;
-- 创建成绩表
DROP TABLE IF EXISTS `result`;
CREATE TABLE `result`(
`studentno` INT(4) NOT NULL COMMENT '学号',
`subjectno` INT(4) NOT NULL COMMENT '课程编号',
`examdate` DATETIME NOT NULL COMMENT '考试日期',
`studentresult` INT (4) NOT NULL COMMENT '考试成绩',
KEY `subjectno` (`subjectno`)
)ENGINE = INNODB DEFAULT CHARSET = utf8;
INSERT INTO `grade`(`GradeID`, `GradeName`)
VALUES (1, '大一'),
(2, '大二'),
(3, '大三'),
(4, '大四'),
(5, '预科班');
INSERT INTO `result`(`StudentNo`, `SubjectNo`, `ExamDate`, `StudentResult`)
VALUES (1000, 1, '2013-11-11 16:00:00', 85),
(1000, 2, '2013-11-12 16:00:00', 70),
(1000, 3, '2013-11-11 09:00:00', 68),
(1000, 4, '2013-11-13 16:00:00', 98),
(