• 六千字带你快速上手操作MySQL


    快速上手MySQL

    mysql基础语法

    ### 字段操作
    
    • 1
    字段操作概念语法
    新增字段对已经存在的表,插入新的字段alter table 【表名】 add 字段名 数据类型 属性
    修改字段在我们需要改进某个字段时alter table 【表名】change 原版字段名,新版字段名 属性
    删除字段删除无用字段alter table 【表名】 drop 字段名

    主外键设置

    我们使用主外键的方式来保证我们的数据完整性

    ​ 概念及语法见如下表格

    概念语法
    添加主键保证数据完整性ALTER TABLE 表名 ADD CONSTRAINT 主键名PRIMARY KEY 表名(字段名);
    添加外键保证数据完整性ALTER TABLE 表名ADD CONSTRAINT 设置外键名称 FOREIGN KEY(关联字段名) REFERENCES 关联表名字(字段名);

    ​ 注意事项:mysql的引擎支持问题,innoDB储存类型支持外键,MYISAMD的储存类型不支持外键

    ​ 复合主键创建方式:

    alter	table  result aDD constraint PK_RESULT primary key (studentNo,subjectNo,examDate);
    
    • 1

    DMl语句操作数据

    插入数据记录

    概念语法
    插入单行数据插入一条需要存储在数据库的数据记录INSERT INTO 表名 (字段1,字段2)value(插入数据)
    插入多行数据插入多行需要存储在数据库的数据记录INSERT INTO 表名 (字段1,字段2)value(插入数据1),(插入数据2)
    将查询结果插入新表第一种将查询结果备份到新创建的数据库INSERT INTO 新表名 (字段1,字段2) select 字段1,字段2,… from 数据源表
    将查询结果插入新表第二种将查询结果备份到新创建的数据库select 字段1,字段2 into 新表 from 原表
    修改数据记录
    概念语法
    修改数据记录当我们要对某一条数据修改或者更新时我们要用到UPDATE 表名 SET 字段1= '修改内容 WHERE 条件
    删除表
    概念语法
    删除数据方法一删除与条件相符的数据Delete from 表名 where 判断条件
    删除数据方法二删除整个表的所有记录truncate table 表名

    DQL查询

    概念语法
    查询语句方法在数据库中查询符合条件的数据SELECT 字段列表 FROM 查询表名 WHERE 条件 GROUP BY 分组字段 HAVING 条件 ORDER BY 排序字段名 ASC

    LIMIT子句

    LINIT子句的使用
    概念语法
    limit子句设置查询显示的数据条数SELECT * FROM grade LIMIT 位置偏移量;

    常用函数集合

    聚合函数
    函数名作用
    avg()返回某一字段的平均值
    count()返回某个字段的函数
    max()返回某字段的最大值
    min()返回某字段的最小值
    sum()返回某字段的总和
    常勇字符串函数
    函数名作用举例
    concat(STR1,STR2)连接字符串str1,str2为一个完整的字符串select concat(‘my’,‘s’,‘ql’)返回:mysql
    insert (str,pos,len,newstr)将str从怕pos的位置开始len个字符长度替换为newstrinsert (‘这是sql数据库’,‘3’,‘10’,‘mysql’);返回:这是mysql数据库
    lower(STR)将str所有字符改为小写SQL LOWER(SQL)返回:sql
    upper(str)将str所有的字符串改为大写sql upper(sql)返回:SQL
    SUBSTRING(STR,NUM,LEN)返回字符串str的第num个位置开始长度为len的子字符串substring(‘javaMysqlOracle’,5,5)返回结果:Mysql
    时间日期函数
    作用举例
    curdate()获取当前日期curdate()返回:2021-3-5
    curtime()获取当前时间curtime()返回:15-39-45
    now()获取当前的日期与时间返回:2021-3-5-15-39-45
    week(date)返回日期date为一年中的第几周SELECT WEEK(NOW());返回9
    year(date)返回日期date的年份SELECT YEAR(NOW());返回时间为2021
    HOUR(TIME)返回time的小时值SELECT HOUR(CURTIME());返回为 15
    minute(time)返回time的分钟值SELECT MINUTE(CURTIME()); 返回值为44
    datediff(date1,date2)返回d1和d2之间的相隔天数SELECT DATEDIFF(NOW(),‘2008-8-8’);返回值:4592
    adddate(date,n)计算日期参数date加上n天之后的时间SELECT ADDDATE(NOW(),5);返回值:20213-10-15-48-05
    数学函数
    函数名字作用举例
    ceil(x)返回大于或等于数值x的最小整数SELECT CEIL(5);返回:5
    floor(x)返回小于或者等于数值x的最大整数SELECT FLOOR(5);返回:5
    rand()返回0~1的随机数SELECT RAND();返回0.86

    in和not in 子查询

    IN 子查询

    ​ 问题: 在mysql中档当子查询跟随在=,!=,<,<=,>,>=之后,它不允许子查询返回多条记录,如果有多条满足条件的记录返回,会出现执行代码错误。

    ​ 解决方法 :

    把等号替换成 in关键字

    in子查询的语法:

    	 select 字段 from 表名
    	 where 条件1 in(select 字段 from 表名 where 条件)————————>	 //在小括号中,再来一次查询,作为一个条件,来与条件1判断
    
    
    • 1
    • 2
    • 3
    NOT IN 子查询

    问题:如果我们想要获得与in子查询相反的结果,

    解决方案:不需要去进行过多的代码操作,只需要在代码中的 in 前加一个not 就可以获取到查询相反的结。

    语法没有太大的变化

    语法总结

    启动与关闭

    net stop MySQL;
    net stop MySQL;
    mysql -u root -p

    创建数据库
    create database 数据库名;
    
    查看数据库列表,可查看已存在的数据库
    show databases;
    
    • 1
    • 2
    • 3
    • 4
    选择数据库
    use 数据库名;
    
    删除数据库
    drop database 数据库名;
    创建表
    create table 表名(
    字段1 数据类型 [字段属性|约束] [索引] [注释],
    字段1 数据类型 [字段属性|约束] [索引] [注释]
    );
    
    查看表
    show tables;
    
    查看表定义
    describe 表名;      desc 表名;
    
    删除表
    drop table [if exists] 表名;
    
    在删除表之前,先使用IF EXISTS语句验证表是否存在
    设置数据表的存储引擎
    creata table 表名(
    
    )engine=存储引擎;
    
    修改表名
    alter table<旧表名> rename [to] <新表明>;
    alter table `demo01` rename `demo02`;
    
    添加字段
    alter table 表名 add 字段名 数据类型 [属性];
    alter table demo02 add `password` varchar(20) not null;
    
    修改字段
    alter table 表名 change 原字段名 新字段名 数据类型 [属性];
    alter table demo02 change `name` `username` char(10) not null;
    
    删除字段
    alter table 表名 drop 字段名;
    alter table demo02 drop `password`;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    约束

    添加主键约束
    alter table 表名 add constraint 主键名 primary key 表名 (字段名);
    alter table student add constraint pk_studen primary key grade (gradeId);

    添加外键约束
    alter table 表名 add constraint 外键名 foreign key (外键字段) references 关联表名 (关联字段)
    alter table student add constraint fk_student_grade foreign key(gradeId) references grade (gradeId);

    插入单行数据
    insert into 表名 [(字段名列表)] values (值列表);
    insert into syudent(loginPwd,studentName,gradeId,phone,bornDate)
    values(‘123’,‘黄小平’,1,‘13956799999’,‘1996-5-8’);

    插入多行数据
    insert into 新表 (字段名列表)
    values(值列表1),(值列表2),……,(值列表n);
    insert into subject (subjectName,classHour,gradeID)
    values(‘Logic Java’,220,1),(‘HTML’,160,1),(‘Java OOP’,230,2);

    将查询结果插入的新表
    insert into 新表 (字段1,字段2,字段3)
    select 字段1,字段2……
    from 原表;

    句式1需要先按照所插入字段的类型,顺序,个数创建新表,才能插入数据
    create table 新表 (
    select 字段1,字段2
    from 原表 );

    句式2: 岁插入语句的执行而创建新表,无须先创建表;
    更新数据记录
    update 表名 set 字段1=值1,字段2=值2,…,字段n=值n [where 条件];

    删除数据记录
    delate from 表名 [where条件];

    删除表中所有记录
    truncate table 表名;

    DQL语句
    select <字段名列表>
    from <表名或视图>
    [where <查询条件>]
    [group by <分组的字段名>]
    [having<条件>]
    [order by <排序的字段名>[asc或deac]]
    limit字句
    select <字段名列表>
    from <表名或视图>
    [where <查询条件>]
    [group by <分组的字段名>]
    [order by <排序的列名>[asc或deac]]
    [limit [位置偏移量,]行数]

    简单子查询

    SELECT … FROM 表1 WHERE 字段1 比较运算符(子查询)

    select `studentNo`,`studentName`,`sex`,`bormDate`,`address`
    from `student`
    where `bornDate`>
    (select `bornDate`from`student`where`studentName`=`李斯文`);
    
    select 'studentName` from `student` where `studentNo` = (
    swelect `studentNo` from `result`
    inner join `Subject` on result.subjectNo= subject.subjectNo
    where `studentResult` =60 AND `subjectName` ='Logic Java'
    );
    
    SELECT `studentName` FROM `student` 
    WHERE `studentNo` IN(
        SELECT `studentNo` FROM `result` 
        WHERE `subjectNo` =  (
            SELECT `subjectNo` FROM `subject`
            WHERE `subjectName`='Logic Java'
        )AND `studentResult` = 60  
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    vue中 mock 使用及注意事项
    为什么说阿里云服务器5M带宽是最划算的?
    Python毕业设计选题推荐
    linux 修改用户的密码
    gitlab-runner 的安装使用(含 .gitlab-ci.yml 的简单使用)
    海思3559万能平台搭建:YUV格式简介
    axios 实现上传、下载
    基于新版OpenCV5(C++)框架的DNN实现yolov3、4、5、6、7、x模型部署推理
    2022-08-27 AndroidR 插入USB设备自动授权不弹出权限对话框
    【概率论基础进阶】随机事件和概率-随机事件、事件间的关系与运算
  • 原文地址:https://blog.csdn.net/doomwatcher/article/details/127807867