mysql数据库

数据库

  • 基本概念、

    • 数据(data):数据是数据库中存数据的基本对象,是描述事物的符号记录

    • 数据库(database DB):数据库就是存储数据的仓库,长期存储在计算机中有组织可共享的相关数据集合

    • 数据库管理系统(database management system DBMS):专门用于数据库创建和管理的软件

    • 数据库系统(database system DBS):支出数据库的相关计算机硬件软件人员

  • 数据库管理技术发展阶段

    • 人工管理阶段

    • 文件系统阶段

    • 数据库系统阶段:数据结构化,数据共享,数据独立性高,数据统一由dbms控制

  • 三级模式与二级映射

    • 外模式

    • 外模式/概念模式映像(保障逻辑独立性)

    • 概念模式

    • 概念模式/内模式映像(保障物理独立性)

    • 内模式(存储模式)

  • 数据模型

    • 现实世界

    • 信息世界

      • 概念模型

      • e-r图

        • 实体—矩形框

        • 属性—椭圆形

        • 联系—菱形

        • 1—1(一个学生一个学号)

        • 1—n(一个班级多个学生)

        • n—m(多和学生多门课程)

  • SQL

    • 定义

      • Structured Query Language:结构化查询语言

      • 是用访问和处理数据库的标准计算机语言

    • 组成

      • DDL

        • Data Definition Language 数据定义语言

        • 用来定义数据库对象:数据库,表,列。关键字:CREATE,DROP,ALTER

      • DML

        • Data Manipulation Language 数据库模拟语言

        • 用来对数据库中的数据进行增删改。关键字:INSERT,DELETE,UPDATA

      • DQL

        • Data Query Language 数据库查询语句

        • 用来查询数据库中表的记录(数据)。关键字,SELECT

      • DCL

        • Data Control Language 数据库控制语言

        • 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE,ROLLBACK,COMMIT等

    • 语法

      • 语句可以单行或者多行书写,以分隔符(常用分号)结尾

      • 不区分大小写,但强烈建议遵循规范

        • 关键字与函数名称全部大写

        • 数据库名称,表名称,,字段名全部小写

      • 3钟注释

        • 单行注释 -- (杠杠空格)和 #

        • 多行注释 /*注释*/

  • SQL的具体使用

    • DDL:数据库,数据操作

      • 数据库操作

        • 查看数据库

          • 查看已有的数据库:SHOW DATABASE;

            • 开始和结束输出日志:\T开始,\t结束

            • \T具体路径\文件名.txt

          • 查看指定数据库的创建信息:SHOW CREATE DATABASE 指定的数据库名称;

          • 查询当前正在使用的数据库名称:SELECT DATABASE();

        • 创建数据库

          • 创建数据库:CREATE DATABASE 数据库名称

          • 创建数据库,判断不存在,再创建:CREATE DATABASE ID NOT EXISTS

            • 查看上一步操作产生二代警告信息:SHOW WARNNGS

          • 创建数据库,并指定字符集:CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET = "utf-8"

            • 修改数据库的字符集:ALTER DATABASE 数据库名称 DEFAULT CHARACTER SET="utf-8"

            • 修改数据库的字数集:ALTER DATABASE 数据库名称 CHARSET'UTF8'

        • 选择数据库

          • 选择(转到/使用)数据库:USE 数据库名称

            • 登录mysql时选择数据库:mysql -uroot -p 数据库名称

        • 删除数据库

          • 删除数据库:DROP DATABASE 数据库名称(慎重使用)

          • 判断数据库是否存在,存在再删除:DROP DATABASE IF EXISTS 数据库名称

      • 数据表操作

        • 查看数据表

          • 查看数据库中已有的数据表:SHOW TABLES;

          • 查看指定表的表结构:DESC 表名称;

            • DESC即DESCRIBE的缩写,也可完整写出:DESCRIBE 表名称

          • 查看指定表的表结构:SHOW COLUMNS FROM 表名称;

            • SHOW FULL COLUMNSFROM 表名称

          • 查看数据表创建语句:SHOW CREATE TABLE 表名称;

        • 创建数据表

          • 数据类型

          • 语法

            CREATE TABLE 表名称( 
                列名1 数据类型1, 
                列名2 数据类型2, 
                .........     
                列名n 数据类型n​ ​
            ); 
            注意:最后一列,不需要加逗号 
            为列加备注信息,列名1 数据类型1 COMMENT '备注信息'​,
            • 判断不存在再创建表:CREATE TABLE IF NOT EXISTS表名();

            • 创建表时指定字符集:CREATE TABLE ID NOT EXISTS 表名() CHARSET utf8;

        • 修改数据表

          • 修改字符集

            • ALTER TABLE 表名 CHARSET 字符集名称;

            • ALTER TABLE 表名 DEFAULT CHARACTER SET 字符集名称;

          • 修改表名称

            • ALTE TABLE 表名 RENAME TO 新表名;

            • RENAME TABLE 表名 TO 新表名;

          • 新增字段

            • 在最后添加一个字段:ALTER TABLE 表名 ADD 字段名称 字段类型;

            • 一次添加多个字段:ALTER TABLE 表名 ADD 字段名称1 字段类型1,字段名称2 字段类型2,.....;

            • 指定位置添加字段

              • 在最前面添加:ALTER TABLE 表名 ADD 字段名称 字段类型 FIRST;

              • 在某字段之后添加:ALTER TABLE 表名 ADD 字段名称 字段类型 AFTER 某字段名

          • 修改字段

            • 修改字段名:ALTER TABLE 表名 CHANGE 旧字段名称 新字段名称 字段类型;

            • 修改字段类型:ALTER TABLE 表名 MODIFY 字段名称 字段类型

            • 修改字段的位置:

              • ALTER TABLE 表名 MODIFY 字段名称 字段类型 FIRST;

              • ALTER TABLE 表名 MODIFY 字段名称 字段名称 字段类型;

            • 修改字段字符集:ALTER TABLE 表名 MODIFY 字段名 字段类型 CHARACTER SET 字符集名称;

          • 删除字段

            • ALTER TABLE 表名 DROP 字段名称;

            • ALTER TABLE 表名 DROP COLUMN 字段名称;

        • 删除数据表

          • 删除数据表:DROP TABLE 表名;

          • 判断数据表不存在,存在再删除:DROP TABLE IF EXISTS 表名;

          • 一次删除多个表:DROP TABLE 表名1,表名2...;

    • DML:增删改表中的内容

      • 添加数据

        • 不指定具体的字段名

          • INSERT INTO 表名 VALUES(值1,值2,值3....)

          • 除了数字类型,其他类型的值需要使用引导(单双都可以)引起来

        • 列出指定字段

          • INSERT INTO 表名(字段名1,字段名2,字段名3.....) VALUES(值1,值2,值3.....);

        • 一次添加多条记录

          • INSERT INTO 表名(字段名1,字段名2,字段名3.....) VALUES(值1,值2,值3.....),(值1,值2,值3.....);

        • 通过SET形式插入记录

          • INSTER INTO 表名 SET 字段名1=值1,字段名2=值2,字段名n=值n;

      • 修改数据

        • UPDATE 表名 SET 字段名1=值1,字段名2=值我,....[WHERE 条件表达式];

          • 注意,如果不加WHERE子句,则修改表中所有的数据

      • 删除数据

        • DELETE FROM 表名 [WHERE 条件表达式];

          • 注意,如果不加WHERE子句,则删除表中所有的数据

        • 彻底清空数据表:TRUNCATE TABLE 表名;效率高

      • 字符集与校对集

        • 字符集:用来定义MySQL存储字符串的方式

          • 查看对应字符集:SHOW CHARACTER SET;或SHOW CHARSET;

            • 常用的字符集:

              • latin1(iso8859) 最大长度:1 字节 支持西欧字符,希腊字符等;

              • gbk 最大长度:2字节 支持简体和繁体中文、日文、韩文等;

              • utf8 最大长度:3字节 支持世界上大部分国家的文字

        • 校对集:用来定义比较字符串的方式,如是否区分大小写等

          • 查看校对集信息:SHOW COLLATION

          • 校对集组成:字符集名称_国家名称/general_ci/cs/bin

            • ci:Case Insensitive 不区分大小写

            • cs:Case Sensitive 区分大小写

            • bin:binary 以二进制方式进行比较

      • 字符集校对集设置

        • 查看字符集相关变量:SHOW VARIABLES LIKE 'character%';

          • Variable_name变量名 说明

          • character_set_client 客户端字符集

          • character_set_connection 客户端与服务器连接所用的字符集

          • character_set_database 默认数据库使用的字符集

          • character_set_filesystem 文件系统字符集

          • character_set_results 将查询结果返回给客户端用的字符串

          • character_set_server 服务器默认字符集

          • character_set_system 服务器用来存储标识符的字符集

          • character_set_dir 安装字符集的目录

        • 可在创建数据库、数据表是指明数据库、数据表、字段的字符集与校对集

        • 通过 SET 变量名 = 值;来更改,但修改只对当前对话有效

          • 例如:SET charater_set_server = utf8;—将服务器默认字符集设置为utf8

          • 同时更改客户机、链接和返回结果字符集:SET NAMES 字符集名;(对应标黄的几个)

        • 在MySQL配置文件中进行设置:

          [mysqld]
          basedir=mysql路径
          basedir=mysql路径/data
          port=3306
          character-set-server=utf8
          [client]
          default-character-set=utf8​

           

    • DQL:查询表中的数据

      • 查询语句语法

        • SELECT

          • 字段列表

        • FROM

          • 表名列表

        • WHERE

          • 条件列表

        • GROUP BY

          • 分组字段

        • HAVING

          • 分组之后的条件

        • ORDER BY

          • 排序

        • LIMIT

          • 分页限定

      • 查询表中全部数据: SELECT * FROM 表名:

      • 查询指定列:SELECT 字段名1,字段名2...FROM表名;

      • 查询是去除重复值:DISTINCT关键字

      • 限制结果:LIMIT

        • 显示前n条记录:SELECT字段列表 FROM 表名列表 LIMIT n;

        • 显示从指定位置开始的n条数据:SELECT 字段列表 FROM 表名列表 LIMIT 查询的条数n OFFSET 开始的索引;

          • 注意:开始的索引=第几行记录-1,第一行记录的索引为0

          • 举例:SELECT sno,sname FROM student LIMIT 2 OFFSET 3;——显示从第4行还是的2条记录

          • 可以省略OFFSET此时格式为:SELECT sno,sname FROM student LIMIT 3,2;

        • 实现分页查询:SELECT 字段列表 FROM 表名列表 LIMIT 开始的索引,每页显示的条数;

          • 开始的索引=(当前页码-1)*每页显示的条数

          • 举例(每页显示3条,显示第3页结果数据):SELECT 字段列表 FROM 表名列表LIMIT 6.3;

      • 使用完全限定的表名:在字段名称前加上表名称

      • 查询结果排序:ORDER BY

        • 注意:ORRDER BY 子句不行是SELECT语句中最后一个子句

        • 排序方向:ASC:升序,ASCENDING,默认,可不写出;DESC:降序,DESCENDING,必须指出;

        • 举例:

          • SELECT sno,sname,sage FROM student ORDER BY sage DESC,sno;——先按年龄再按学号排序

          • SELECT *FROM student ORDER BY sage;——按年龄升序排序(默认,未给出ASC)

          • SELECT *FROM student ORDER BY sage ASC;——按年龄升序排序

          • SELECT *FROM student ORDER BY sage DESC;——按年龄降序排列

          • SELECT *FROM student ORDER BY sage,sno DESC;——按年龄升序,学号降序排序

          • SELECT *FROM student ORDER BY CONVERT(sname USING gbk);——字符集utf8中文排序方式3

      • 过滤数据(按条件查询):WHERE

        • WHERE子句操作符:

          • 逻辑比较,=、>、<、>=、<=、<>、!=(不等于)

          • 范围值检查:BETWEEN AND——指定的两个值之间

            • 查询年龄介于19到21岁之间的学生信息:SELECT *FROM student WHERE sage BETWEEN 19 AND 21;

          • 空值检查:IS NULL/IS NOT NULL

      • 多个限定条件查询:使用AND,OR连接多个条件

        • 查询星系系的女生信息:SELECT *FROM student WHERE sdept='IS' AND sgender='女';

        • 查询学分为3或者4的课程信息:SELECT *FROM course WHERE ccredit=3 OR ccredit=4;

        • AND优先级比OR高

          • SELECT *FROM course WHERE ccredit=3 OR ccredit=4 AND cpno=6;

          • SELECT *FROM course WHERE (ccredit=3 OR ccredit=4) AND cpno=6;

          • IN操作符:SELECT *FROM course WHERE ccredit IN(3,4) AND cpno=6;

      • 模糊查询:LIKE操作符 结合通配符%(百分号)和_(下划线)

        • %代表 任何字符出现任意次数

          • SELECT * FROM student WHERE sname LIKE '%王'——名字 以王为结尾的

          • SELECT * FROM student WHERE sname LIKE '王%'——名字以王为开头的

          • SELECT * FROM student WHERE sname LIKE '%王%'——名字中有王的

        • _代表 单个字符

          • SELECT * FROM student WHERE sname LIKE '王_'——名字以王为开头,且后面还有一个字的

        • 转义字符:反斜杠 \

          • SELECT * FROM student WHERE sname LIKE '%\_%'——名字中有_的

      • 使用正则表达式(regular expression)进行搜索:REGEXP 关键字

        • LIKE配合通配符匹配整个列的值,REGEXP匹配列中的部分数据

        • 查询姓名中包含“大”字的学生:SELECT * FROM student WHERE sname REGEXP'大';

        • 查询姓名中包含“大海”字或者“大宝”字的学生:SELECT * FROM student WHERE sname REGEXP"大海|大宝";

        • 查询课程名称包含英文字母的课程:SELECT * FROM course WHERE cname REGEXP'[a-zA-Z]';

        • 查询课程名称包含数字的课程:SELECT * FROM course WHERE cname REGEXP ‘[0-9]’;

        • 查询课程名称包含7个以上连续英文字母的课程:SELECT * FROM course WHERE cname REGEXP ‘[a-zA-Z][7]’;

        • 查询课程名以“数”开头的课程:SELECT * FROM course WHERE cname REGEXP ‘^数’;

        • 查询课程名以“数”结尾的课程:SELECT * FROM course WHERE cname REGEXP ‘数$’

      • 创建计算字段

        • 存储在数据库表中的基础数据一般或者有可能不是所需的最终格式,那么可以检索出相关经过转换、计算或者格式化的数据,这就是计算字段

        • 拼接:Concat

          • 字段与字段之间的拼接,如学号拼接姓名:SELECT Concat(sno,sname)FROM student;

          • 字符与字段拼接,如姓名前加上姓名:SELECT Concat(‘姓名:’sname)FROM student;

        • 使用别名:AS关键字

          • 字段与字段拼接,如:学号拼接姓名:SELECT Concat(sno,sname)AS 学号姓名FROM student;

          • AS关键字可省略:SELECT Concat(sno,sname)学号姓名 FROM student;

        • 算术运算:+-*/

          • 查询学生学号、姓名及出生年信息:SELECT sno.sname,2020-sage AS 出生年 FROM student;

          • 查询学生学号、姓名以及出生年信息:SELECT sno,sname,YEAR(NOW())-sage AS 出生年 FROM student;

      • 使用函数

        • 文本处理函数

          • SELECT cname,UPPER(cname)AS大写,LOWER(canme)AS小写,LENGTH(canme)AS长度,LEFT(canme,1)AS左起第一位,RIGYHT(canme)AS右起第一位,SUBSTRING(cname,2,3)AS从第二位开始取到第三位,LTRIM(canme)AS去左空格,RTRIM(cname)AS去右空格 FROM course;

        • 日期和时间处理函数

          • 返回当前日期和时间:SELECT NOW();

          • 返回当前日期:SELECT CURDATE();

          • 返回当前时间:SELECT CURTIME();

          • 返回一个日期的年份部分:SELECT YEAR(NOW());

        • 数值处理函数

          • 绝对值:SELECT ABS(-5)

          • 平方根:SELECT SQRT(9)

      • 聚集函数

        • 将表中的数据做一些汇总,得到汇总之后的结果而不需要将表中原始数据检索出来:借助聚集函数可以完成

        • 常见聚合函数

          • COUNT() 计数

            • 确定行的数码或符合特定条件行的数目

            • 查询总共有多少学生:SELECT COUNT(*) AS 学生总数 FROM student;

              • SELECT COUNT(sno) AS学生总数 FROM student;

            • 查询总共有多少男学生:SELECT COUNT(sno) 男生总数 FROM student WHERE ssex="男";

            • 查询选课记录条数:SELECT COUNT(*) AS 选课记录数 FROM sc;

            • 查询已有成绩的选课记录条数:SELECT COUNT(score) AS 有成绩的选课记录 FROM sc;

              • NULL值不参与运算

            • 查询选课记录条数:SELECT COUNT(sno) AS 选课记录数 FROM sc;——一般选择非空的字段,如主键或主属性

          • SUM() 汇总

            • 用于返回指定列值的和

            • 查询课程表中索引课程的学分总和:SELECT SUM(ccredit) AS 学分总数 FROM course;

          • AVG() 平均值

            • 返回特点列值的平均值

            • 查询所有学生的平均值:SELECT AVG(SAGE) AS 平均年龄 FROM student;

            • 查询课程号为02的课程的平均成绩:SELECT AVG(score) AS 学分总数 FROM sc WHERE cno='02';

          • MAX() 最大值

            • 返回列中的最大值

            • 所有选课记录中的最高成绩:SELECT MAX(score) AS 最高成绩 FROM sc;

          • MIN() 最小值

            • 返回列中的最小值

            • 所有选课记录表中的最低成绩:SELECT MIN(score) AS最低成绩 FROM sc;

        • DISTINCT 关键字在函数中的作用

          • 查询已选课人数:SELECT COUNT(sno) AS 已选课人数 FROM sc;

          • 查询已选课人数:SELECT COUNT(DISTINCT sno) AS 已选课人数 FROM sc;

        • 说明:SUM()、AVG()仅对数值类型列值计算,MAX()、MIN()可针对任意类型的列

        • 组合使用

      • 分组数据:GROUP BY

        • 查询各个学生的平均分:SELECT sno,AVG(score) AS 平均分 FROM sc GROUP BY sno;

        • 查询各课号及相应的选课人数:SELECT cno.COUNT(sno) 人数 FROM sc GROUP BY cno;

        • 已选课学生的选课门数、最高分、最低分、平均分、总分:

          • SELECT sno,COUNT(sno) 选课门数, AVG(score) 平均分,MAX(score)最高分,MIN(score)最低分,SUM(score)总分 FROM sc GROUP BY sno;

        • WHTH ROLLUP:对分组计算的结果进行汇总级别的计算

        • 分组过滤:HAVING 对分组计算出的结果进行过滤

          • 统计相同年龄且大于1的字段:SELECT sc,COUNT(*) 人数 FROM student GROUP BY sage HAVING COUNT(*) >1;

      • 子查询,把一个查询嵌入到另外一个查询中

        • 不相关子查询:作为查询条件,把一条SELECT语句返回的结果用于另一条SELECT语句的WHERE子句中

          • 查询分数最高的那一位学生的学号

          • 查询已选课学生的学号和i姓名

          • 查询成绩平均分在80分以上的学生学号,姓名

          • 查询选修了‘数学’和‘信息系统’课程的学生

        • 相关子查询:根据一个查询的结果计算另一个查询结果,作为计算字段使用子查询

      • 联结表(多表查询)

    • DCL:管理用户,授权及事物

  • 数据库完整性

    • 定义:数据库完整性(integrity)指数据的正确性和兼容性

    • 分类

      • 实体完整性

        • 主键约束PRIMARY KEY :限定字段非空且唯一

        • 关于键的相关术语

          • 超键/超码(super key):在关系中某一属性住能唯一表似乎的一个元组的成该属性组为超键

          • 候选键/候选码(candidate key):当超键中不含有多余属性是成为候选键

            • 候选键中的属性称之为主属性,不包含在任何候选键中的属性被称为非主属性

          • 主键/主码(primary key):用户根据需要选定多个候选键中额一个来作为主键

          • 外键/外码(foreign key):如果某属性组不是关系R1的码,而在另一个关系R2中是主键则该属性集是关系模式R1的外键,其参照于R2中的主键

          • 码:候选键/候选码、主键/主码简称为码

          • 举例:有如下关系:

            • 学生(学号,姓名,性别,身份证号,专业号,年龄)

            • 专业(专业号,专业名)

        • 在创建表时,添加主键约束

        • 创建完表之后,添加主键

          • ALTER TABLE student MODIFY sno CHAR(9) PROMARY KEY;——针对列声明

          • ALTER TABLE student ADD PRIMARY KEY(sno);——针对表声明

          • ALTER TABLE sc ADD PRIMARY KEY(sno,cno);

        • 删除主键

          • ALTER TABLE student DEOP PRIMARY KEY;

      • 参数完整性

        • 外键约束 FOREIGN KEY:保证不引用不存在的数据

        • MySQl存储引擎

        • 在创建表时,添加外键

        • 创建表之后,添加外键

        • 删除外键

        • 父表中更新、删除数据是外键的应对

      • 用户自定义完整性

        • 非空约束 NOT NULL :限定字段内容不能为空值

          • 创建表时添加非空字段

            • 格式为:字段名 类型声明 NOT NUll

            • CREATER TABLE IF NOT EXUSTS student(......sname VARCHAR(10) NOT NULL,......);

          • 创建表完之后,添加非空约束

            • ALTER TABLE student MODIFY sname VARCHAR(10) NOT NULL;

          • 删除非空约束

        • 唯一约束 UNIQUE:限定字段值不能有重复(但允许为NULL)

          • 创建表是添加的唯一约束

            • 格式为:字段名 类型声明 UNIQUE

            • CREATER TABLE IF NOT EXUSTS student(......sname VARCHAR(10) UNIQUE,......);

          • 创建表后,添加唯一约束

            • ALTER TABLE student MODIFY sname VARCHAR(10) UNIQUE;

            • ALTER TABLE student ADD CONSTRAINT sname UNIQUE(sname);——sname别名可自定义

          • 删除唯一约束

            • ALTER TABLE student DROP INDEX sname;——通过查看表创建语句查看唯一约束名称

              • SHOW CREATER TABLE stu

        • 默认值约束DEFAILT:给字段设定一个默认值

        • 检查约束CHECK(MySQL不支持)

        • 自动增长AUTO_INCREMENT:实现数值的自动增长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值