数据库Day01

数据库常用命令

SHOW CREATE DATABASE school -- 查看创建数据库的语句
SHOW CREATE TABLE student -- 查看student数据表的定义语句
DESC student -- 显示表的结构
数据库引擎区别
  • MYISAM 和 INNODB:
MYISAMINNODB
事务支持不支持支持
数据行锁定不支持(表锁)支持
外键约束不支持支持
全文索引支持不支持
表空间大小较小较大,约2倍
修改和删除
-- 修改表名  ALTER TABLE 表明 RENAME AS 新表名
ALTER TABLE teacher RENAME AS teacher1
-- 增加表的字段  ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE teacher1 ADD age INT(11)
-- 修改表的字段  
ALTER TABLE teacher1 MODIFY age VARCHAR(11) -- 修改约束
ALTER TABLE teacher1 CHANGE age age1 INT(1) -- 字段重命名
-- 删除表的字段
ALTER TABLE teacher1 DROP age1
外键方法1:
CREATE TABLE `grade`(
   `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
   `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
   PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 学生表的 gradeid 字段 引用年级表的 gradeid
-- 定义外键key
CREATE TABLE IF NOT EXISTS `student`(
	`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 '出生日期',
	`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
	`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY(`id`),
	KEY `FK_gradeid`(`gradeid`),
	CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
外键方法2:
CREATE TABLE `grade`(
   `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
   `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
   PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

CREATE TABLE IF NOT EXISTS `student`(
	`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 '出生日期',
	`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
	`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 此时创建表时没有外键关系,只是创建了student和grade两个表
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);

新增insert

  1. 字段和字段之间使用英文逗号隔开
  2. 字段是可以省略的,但必须一一对应
  3. values同时插入多条数据:values (),(),()…

修改update

-- 修改单个字段
UPDATE `student` SET `name`='谷玉洁' WHERE id = 1;
-- 修改多个字段
UPDATE `student` SET `name`='谷玉洁',`email`='1841731620@qq.com' WHERE id = 1;
-- 不指定条件情况下,会改动所有表
UPDATE `student` SET `name`='覆盖'

删除delete

TRUNCATE 和 delete 的不同:

​ TRUNCATE 重新设置自增量,从1开始;不会影响事务;

​ delete 不改变增量

CREATE TABLE `test`(
   `id` INT(4) NOT NULL AUTO_INCREMENT,
   `coll` VARCHAR(20) NOT NULL,
   PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO `test`(`coll`) VALUES ('1'),('2'),('3')
-- 用TRUNCATE 删除表
TRUNCATE TABLE `test`

-- 用delete删除表
DELETE FROM `test`

DQL查询数据

查询指定字段
-- 查询表所有信息
SELECT * FROM student
-- 查询指定字段
SELECT `studentno`,`studentname` FROM student
-- 字段和表使用别名
SELECT `studentno` AS 学号,`studentname` AS 学生姓名 FROM student AS s
-- 函数  concat(a,b)
SELECT CONCAT('姓名:',studentname) AS 新名字 FROM student
去重
-- 查询有哪些同学参加了考试和成绩
SELECT `studentno` FROM result
-- 去掉重复数据
SELECT DISTINCT `studentno` FROM result
模糊查询
-- 模糊查询  %(字符中包含即可)_(字符中只含有一个)
-- 查询姓刘的同学
SELECT `studentno`,`studentname` FROM student
WHERE studentname LIKE '刘%'
-- 查询姓刘的同学并且后面只有一个字
SELECT `studentno`,`studentname` FROM student
WHERE studentname LIKE '刘_'
-- 查询姓刘的同学并且姓后面跟着两个字
SELECT `studentno`,`studentname` FROM student
WHERE studentname LIKE '刘__'
-- 查询名字中间有”文“的同学
SELECT `studentno`,`studentname` FROM student
WHERE studentname LIKE '%文%'
in关键字
-- 查询1001,1002,1003学号学员
SELECT `studentno`,`studentname` FROM student
WHERE `studentno` IN (1001,1002,1003);
-- 查询在广东深圳的学生
SELECT `studentno`,`studentname` FROM student
WHERE `address` IN ('济南','广东深圳');

联表查询

类型描述
inner join两个表的相同部分
right join返回右表的所有值,即使左表中没有匹配的
left join返回左表的所有值,即使右表中没有匹配的
/*
查询参加了考试的同学信息:学号,学生姓名,科目名,分数。用到三个表,先两个表进行查询,最后在加入最后一个表查询。
学生表中的 studentno = 成绩表中的 studentno
成绩表中的 subjectno = 科目表中的 subjectno
*/
SELECT s.studentno,studentname,subjectname,studentresult
FROM student s
RIGHT JOIN result r
ON r.studentno = s.studentno
INNER JOIN subject sub
ON r.subjectno = sub.subjectno

自连接

父类

categoryidcategoryName
2信息技术
3软件开发
5美术设计

子类

pidcategoryidcategoryName
34数据库
28办公信息
36web开发
57ps设计
-- 实现查询父类对应的子类
SELECT a.`categoryname` AS '父栏目',b.`categoryname` AS '子栏目',
FROM `category` AS a,`category` AS b,
WHERE a.`categoryid` = b.`pid`
-- 查询学员所属的年级(学号,学生的姓名,年纪名称)
SELECT studentno,studentname,gradename
FROM student s
INNER JOIN grade g
ON s.gradeid = g.gradeid
-- 查询科目所属的年级(科目名称,年纪名称)
SELECT subjectname,gradename
FROM subject sub
INNER JOIN grade g
ON sub.gradeid = g.gradeid
-- 查询参加了数据库结构-1考试的同学信息:学号,学生姓名,科目名,分数
SELECT s.studentno,studentname,subjectname,studentresult
FROM student s
INNER JOIN result r
ON s.studentno = r.studentno
INNER JOIN subject sub
ON r.subjectno = sub.subjectno
WHERE subjectname = '数据库结构-1'

分页和排序

-- 查询参加了数据库结构-1考试的同学信息:学号,学生姓名,科目名,分数
-- 并根据查询成绩结果排序,升序排序
SELECT s.studentno,studentname,subjectname,studentresult
FROM student s
INNER JOIN result r
ON s.studentno = r.studentno
INNER JOIN subject sub
ON r.subjectno = sub.subjectno
WHERE subjectname = '数据库结构-1'
ORDER BY studentresult ASC


-- 分页:每页只显示五条数据
-- limit 起始值,PageSize
SELECT s.`studentno`,`studentname`,`subjectname`,`studentresult`
FROM `student` s
INNER JOIN result r
ON s.`studentno` = r.`studentno`
INNER JOIN `subject` sub
ON r.`subjectno` = sub.`subjectno`
WHERE subjectname = '数据库结构-1'
ORDER BY studentresult ASC
LIMIT 0,5

子查询

-- 查询所有 数据库结构-1科目 的学生学号
SELECT `studentno`,`subjectno`,`studentresult`
FROM `result`
WHERE `subjectno` = (
      SELECT `subjectno` FROM `subject`
      WHERE `subjectname` = '数据库结构-1'
)
ORDER BY `studentresult` DESC
-- 查询分数不小于80分的学生学号和姓名,并且科目是高等数学-2
SELECT s.`studentno`,`studentname`
FROM student s
INNER JOIN result r
ON r.`studentno` = s.`studentno`
WHERE `studentresult` >= 80 AND `subjectno` = (
     SELECT `subjectno` FROM `subject`
     WHERE `subjectname` = '高等数学-2'
)
-- 只用查询不连表
SELECT studentno,studentname FROM student WHERE studentno IN (
    SELECT studentno FROM result WHERE studentresult >=80 AND studentno = (
       SELECT subjectno FROM `subject` WHERE `subjectname` = '高等数学-2'
    )
)
  • 17
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值