mysql学习告一段落,我对mysql基础部分做了总结
目录
25.参考视频:【狂神说Java】MySQL最新教程通俗易懂_哔哩哔哩_bilibili
1.基本命令操作
-
都使用net start mysql 启动数据库服务
-
mysql -uroot -p123456 连接数据库
-
flush privileges;刷新权限
-
所有的语句都使用 ;结尾
-
show databases;查看所有的数据库
-
mysql>use school; 切换数据库
-
database changed
-
show tables; 查看数据库中的所有表
-
describe student;显示数据库所有表的信息
-
create database westons;创建一个数据库
-
exit;退出连接
-
-- 单行注释
-
/* */ 多行注释
2.mysql的四种语言
DDL 定义语言
DML 操作语言
DQL 查询语言
DCL 控制语言
3.数据库的字段属性(一部分)
unsigned 无符号的整数 不能声明为负数
zerofill 零填充
自增 自动在上一次记录的基础上加一
非空 必须赋值
默认 设置默认的值
4.如何创建一个数据库表
CREATE TABLE IF NOT EXISTS `表名`(
`id` int(4) not null auto_increment comment '学号',
`name` varchar(30) not null default '匿名' comment '姓名',
`birthday` datetime default null comment '出生日期',
PRIMARY KEY (`id`)
)ENGINE =INNODB DEFAULT CHARSET=utf8
5.修改和删除数据表字段
修改表名
ALTER TABLE teacher RENAME AS teacher1
增加表的字段
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
删除
--删除表(如果表存在再删除)
DROP TABLE IF EXISTS teacher1
6.外键
给一个表添加一个外键
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(` gradeid `) REFERENCES ` grade `( ` gradeid`);
最佳实践
数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
我们相使用多张表的数据,想使用外键 (程序去实现)
7.DML语言
数据库的意义:存储数据,数据管理
-
insert
-
update
-
delete
--插如语句(添加)
insert into 表名 ([字段1,字段2,字段3])values('值1','值2','值3' ...)
一般插如语句,我们一定要数据和字段一一对应 例:
INSERT INTO `student`(` name `, `pwd `,`sex`)
VALUES ('李四','aaaaaa',`男`), ('李三,'aa11aa',`男`)
字段和字段之间使用英文逗号
字段可以省略,但插入的值要和字段一一对应
修改语句
update 表名 set colnum_ name = value where 条件
colnum_ name是数据库的列,带上` `
条件:筛选的条件,如果没有指定,则会修改所有的列
value 可以是具体的值也可以是一个变量
删除 delete
delete from 表名 [where 条件]
delete from student 清空全部数据
delete from `student` WHERE id =1
删除指定数据
TRUNCATE 命令
完全清除一个数据库表,表的结构和索引约束不会变
TRUNCATE ` student`
delete 和 truncate 的区别
相同的:都能删除数据,都不会删除表结构
不同的:
-
删除侯 值增量可能不一样
8.DQL查询数据(重点)
-
所有的查询操作都用它:SELECT
-
简单的查询,复杂的查询都可以做
-
数据库中核心的语言,最重要的语句
-
使用频率最高的语句
指定查询字段
SELECT * FROM student -->查询全部的学生
SELECT * FROM result --.>查询全部结果
查询指定字段
SELECT `studentno`,`studentname` FROM student
--别名 , 给结果起一个名字 AS
SELECT `studentno` AS 学号,`studentname` AS 学生姓名 FROM student AS stu
---函数 CONCAT(a,b)
SELECT CONCAT('姓名',StudentName AS 新名字 FROM student
9.去重操作和其他用法
去重 distinct
select distinct 'studentno' from result
查询有哪些同学参加了考试
发现重复数据,去重
--查询系统版本
select version()
--用来计算
select 100*3-1 as 计算结果
10.模糊查询
上,下方的图片是我从狂神的视频里截的 狂神讲的mysql还是不错的
11.联表查询
12.自连接
自己的表和自己的表连接
核心:一张表拆为两张表
13. 分页和排序
14.子查询和嵌套查询
15.常用函数
ABS 绝对值
CEILING 向上取整
FLOOR 向下取整
RAND 随机数
SIGN 判断一个数的符号
CHAR_LENGTH 字符串长度
CONCAT 拼接字符串
INSERT 替换
LOWER 小写字母
UPPER 大写字母
16.聚合函数和分组过滤
17.操作复习(要记住,)
CREATE DATABASE StudentScore -- 创建一个数据库
-- 创建表
-- 表名(字段名,数据类型,是否设为主键,非空(完整性约束)
CREATE TABLE Student(sNo CHAR(9) NOT NULL PRIMARY KEY,sName CHAR(12) NOT NULL ,sex CHAR(2),age INT,dept CHAR(50));
CREATE TABLE Course(cNo CHAR(9) NOT NULL PRIMARY KEY, cName CHAR(30) NOT NULL,credit INT);
CREATE TABLE Score(sNo CHAR(9) NOT NULL,cNo CHAR(6) NOT NULL,grade FLOAT,PRIMARY KEY(sNo,cNo));
DROP TABLE Student -- 删除表
-- 修改表的结构
-- alter table <表名>[alter column<字段名><数据类型>] 修改表中已有字段的定义
-- [add column<字段名><数据类型><字段级完整性约束>] 增加新字段以及相应的完整性约束条件
-- [drop column<字段名>] | [drop constraint<完整性约束>]
-- 删除该子句中给出的字段 删除指定的完整性约束条件
-- 利用sql语句添加一个字符型的电话字段phone,长度为11个字符
ALTER TABLE Student ADD COLUMN phone CHAR(11);
-- 插入数据
INSERT INTO Student(sNo,sName,sex,age,dept) VALUES('201201009','王毅','男',18,'外语');
-- values子句:指定添加数据的具体值。当指定字段名时,values子句中的值的排序顺序必须和字段名的排列顺序一致;若不指定字段,则values子句中的值的排列
-- 顺序必须与创建表字段时的排序顺序一致。
-- 修改数据
UPDATE Student SET dept = '金融' WHERE sNo = '201201009';
-- <表名>:要修改的值
-- set子句;要修改的字段及其修改后的值
-- where子句:指定待修改的记录应当满足的条件
-- 删除数据
-- DELETE FROM<表名>[WHERE <条件>]、
DELETE FROM Student WHERE sNO='201201009';
-- 数据查询
-- ALL:指定在结果集中显示所有记录,包括重复行。ALL是默认设置
-- DISTINCT:指定在结果集中显示所有记录,不包括重复行(用于去重)
-- TOP n [PERCENT]:指定从结果集中输出前n行,如果指定了PERCENT,表示结果集中输出前百分之n行
-- * :指定返回查询表的所有字段
-- FROM:用于指定查询的表或视图
-- WHERE:用于设置查询条件
-- GROUP BY子句:指明按照《字段名表>中的值进行分组,该字段的值相同的记录为一组,如果带HAVIN子句,则需要满足其后的条件,才予以输出
-- HAVING 用来指定每一个分组内应该满足的条件,即对每个分组内的记录进行筛选,常和GROUP BY连用
-- HAVING 和 WHERE 的区别
-- where子句是对整个表中的数据筛选出满足条件的记录;而HAVING子句是对Group by分组查询后产生的组设置的条件,所以是筛选出满足条件的组。
-- ORDER BY 将查询结果按指定的次序表达式的值升序或降序排列。ASC 升序 DESC 降序 ,此语句需放在sql命令的最后
-- 1.简单查询
SELECT sNo AS 学号,sName AS 姓名 FROM Student; -- 学号和姓名为别名
-- 2.条件查询
-- 常用的运算符及功能
-- =,>,<,>=,<=,!=,<> 比较大小
-- BETWEEN AND,NOT BETWEEN AND 确定范围
-- IN, NOT IN 确定集合
-- LIKE, NOT LIKE 字符匹配
-- IS NULL,IS NOT NULL 判断空值
-- AND , OR , NOT 逻辑运算
SELECT * FROM Student WHERE dept ='计算机';
-- 3.多重条件查询 当查询需要指定一个以上的查询条件时,这种条件称为多重条件或复合条件
SELECT * FROM Student WHERE dept ='计算机' AND sex = '男';
-- 4.模糊查询
-- 当查询条件不知道完全精确的值时,还可以使用like或not like进行模糊查询,模糊查询也称部分匹配查询
-- % 代表0个或多个字符
-- _代表一个字符
-- [] 表示在某一范围内的字符
-- [^]表示不在某一范围内的字符
SELECT * FROM Student WHERE sName LIKE '李%'; -- 查找所有姓李的同学
-- 5.常用的的统计函数及统计汇总查询
-- AVG<字段名> 字段名所在列的平均值
-- SUM<字段名> 字段名所在列的总和
-- MAX<字段名> 字段名所在列的最大值
-- MIN<字段名> 字段名所在列的最小值
-- COUNT (*) 统计表中记录的个数
-- 除了COUNT(*)外,其他函数在计算过程中均忽略NULL值、
SELECT AVG(grade) AS 平均成绩 FROM Score;
-- 6. ORDER BY
-- 在成绩表score中查询课程表号cNo为c001的学生的学号sNo和成绩grade,并按成绩降序排列
SELECT sNo,grade FROM score WHERE cNo = 'c001' ORDER BY grade DESC
18.ACID
19.事务
20.数据库三大范式
21.第一个JDBC程序
package com.gukeyang;
import java.sql.*;
//我的第一个jdbc程序
public class lesson01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//用户信息和url
String url = "jdbc:mysql://localhost/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true";
String username="root";
String password="123456";
//连接成功,数据库对象
Connection connection = DriverManager.getConnection(url,username,password);
//执行sql的对象
Statement statement=connection.createStatement();
//执行sql的对象去执行sql,可能存在结果,查看返回结果
String sql = "SELECT * FROM user";
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
System.out.println("id="+resultSet.getObject("id"));
System.out.println("name="+resultSet.getObject("NAME"));
System.out.println("pwd="+resultSet.getObject("PASSWORD"));
System.out.println("email="+resultSet.getObject("email"));
System.out.println("birthday="+resultSet.getObject("birthday"));
}
//释放连接
resultSet.close();
statement.close();
connection.close();
}
}
22.列的数据类型
数值
-
tinyint 一个字节
-
smallint 两个字节
-
mediumint 三个字节
-
int 四个字节
-
bigint 八个字节
-
float 四个字节
-
double 八个字节
-
decimal 字符串形式的浮点数
字符串
-
varchar 可变字符串
-
tinytext 微型文本
-
test 文本串
时间日期
-
date 日期 YYYY-MM-DD
-
time 时间 HH :mm :ss
-
datetime
-
timestamp 时间戳
-
year 年份
null
23.索引
24.数据库用户管理
操作数据库->操作数据库的表->操作表中的数据
mysql的关键字不区分大小写
*
创建数据库 CREATE DATABASE IF NOT EXITS westons
*
删除数据库 DROP DATABASE IF EXITS westos
*
使用数据库 USE school
*
查看数据库 SHOW DATABASE --->查看所有的数据库