菜鸡学习day27

菜鸡学习day27

DQL查询语句
1.排序查询
    语法:order by 排序字段1,排序字段2 desc 降序
                                      asc升序 (默认升序)
                        前面的条件一样时才会考虑后面的条件

2.聚合函数
将一列数据作为一个整体,进行纵向计算
聚合函数的计算排除null值
解决方案:(选择非空列计算/ifnull)
    count计算个数   SELECT COUNT(NAME)FROM student;
                   count(*)
    max最大值       SELECT MAX(age) FROM student;
    min最小值       SELECT MIN(age) FROM student;
    sum求和         SELECT SUM(age) FROM student;
    avg平均         SELECT AVG(age) FROM student;

3.分组查询
分组之后查询的字段:分组字段,聚合函数
SELECT COUNT(num) FROM student GROUP BY age;
        age低于17不参与分组
        SELECT age,COUNT(num) FROM student WHERE age >=17 GROUP BY age;
        where和having的区别     where在分组前限定,不满足条件则不参与分组
                                having分组后限定,不满足则不被查询到
                                where后不能跟聚合函数判断

4.分页查询
limit 开始的索引,每页查询的条数
SELECT *FROM student LIMIT 0,3;
公式:  开始的索引 = (当前页码-1*每页条数
分页操作是一个方言

约束
对表中数据进行限定,从而保证数据正确性,有效性,完整性
分类:
1.主键约束    primary key    非空且唯一,一张表只能有一个字段为主键(主键就是表中记录的唯一标识)
                   CREATE TABLE stu2(id INT PRIMARY KEY,NAME VARCHAR(20));
                   删ALTER TABLE stu2 DROP PRIMARY KEY;
                   加ALTER TABLE stu2 MODIFY id INT PRIMARY KEY;

     自动增长:若某一列是数值类型的,使用auto_increment可用来完成值的自动增长
              创建CREATE TABLE stu3(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20));
              删ALTER TABLE stu3 MODIFY id INT;
              加ALTER TABLE stu3 MODIFY id INT AUTO_INCREMENT;

2.非空约束     not null
           创建时加CREATE TABLE stu(id INT,NAME VARCHAR(20)NOT NULL);
           过程中(删)ALTER TABLE stu MODIFY NAME VARCHAR(20);
                 (加) ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

3.唯一约束     unique 值不能重复
唯一约束可以有多个null
            创建时加CREATE TABLE stu1(id INT,NAME VARCHAR(20)UNIQUE);
            删ALTER TABLE stu1 DROP INDEX NAME;
            加ALTER TABLE stu1 MODIFY NAME VARCHAR(20)UNIQUE;

4.外键约束   foreign key
            先创建从表,再创建主表
            创建 create table 表名(
                    …………
                    外键列,
                    constraint 外键名 foreign key (外键列名称)references 主表名称(主表列名称)
            );
            CREATE TABLE dept(id INT PRIMARY KEY AUTO_INCREMENT,didian VARCHAR(20),bumen VARCHAR(20));
            CREATE TABLE yuangong(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),
                                 dep_id INT,
                                 CONSTRAINT dep_bumen FOREIGN KEY(dep_id)REFERENCES dept(id));
            删ALTER TABLE 主表名 DROP FOREIGN KEY 外键名;
                    ALTER TABLE yuangong DROP FOREIGN KEY dep_bumen;
            加ALTER TABLE 主表名 ADD CONSTRAINT 外键名  foreign key (外键列名称)references 主表名称(主表列名称)
                ALTER TABLE yuangong ADD CONSTRAINT dep_bumen FOREIGN KEY(dep_id)REFERENCES dept(id);
        级联  添加外键时设置+级联更新(+级联删除) 创建+ON UPDATE CASCADE;
                ALTER TABLE yuangong ADD CONSTRAINT dep_bumen FOREIGN KEY(dep_id)REFERENCES dept(id) ON UPDATE CASCADE ;
                级联更新+级联删除   创建+ON UPDATE CASCADE ON DELETE CASCADE;
                ALTER TABLE yuangong ADD CONSTRAINT dep_bumen FOREIGN KEY(dep_id)REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE;

数据库设计
1.多表之间的关系
一对一:一一对应(了)任一表唯一外键指向另一表主键
一对多:***在多的一方建立外键,指向一的主键
多对多:创建中间表,至少包含两个字段(联合主键),分别指向两个主表的主键
CREATE TABLE fenlei(
 fenlei_id INT PRIMARY KEY AUTO_INCREMENT,-- 主键 自动排序
 fenlei_name VARCHAR(20) NOT NULL UNIQUE-- 非空且不重复
)

CREATE TABLE xianlu(
 xianlu_id INT PRIMARY KEY AUTO_INCREMENT,-- 主键 自动排序
 xianlu_name VARCHAR(20) NOT NULL UNIQUE,-- 非空且不重复
 xianlu_price DOUBLE,
 xianlu_date DATE,
 xianlu_wid INT,-- 外键列
 CONSTRAINT xl FOREIGN KEY(xianlu_wid) REFERENCES fenlei(fenlei_id)
)

CREATE TABLE guke(
 guke_id INT PRIMARY KEY AUTO_INCREMENT,
 guke_name VARCHAR(20) NOT NULL UNIQUE,
 guke_password VARCHAR(20) NOT NULL,
 guke_birthday DATE,
 guke_gender CHAR(1) DEFAULT "男",
 guke_tel VARCHAR(100)
)

CREATE TABLE zhongjianbiao(
 zjb_xid INT,-- 连接线路
 zjb_gid INT,-- 连接顾客
 PRIMARY KEY (zjb_xid,zjb_gid),-- 联合主键
 CONSTRAINT zj_x FOREIGN KEY (zjb_xid) REFERENCES xianlu(xianlu_id),
 CONSTRAINT zj_g FOREIGN KEY (zjb_gid) REFERENCES guke(guke_id)
)
范式
设计数据库时遵循的规则
一共六种,呈现第次规范
A->B
*函数依赖(如果通过A属性(组)的值可以确定唯一B属性的值,则称B依赖于A) 分数 依赖于 (学号+课程)
*完全函数依赖:确定B属性的值需要完全依赖A属性组中所有的属性
*部分函数依赖:……………………………………………………………A属性组中的部分属性
*传递函数依赖:A->B  B->C,则A->C (C传递函数依赖于A)
*码:一张表中,一个属性(组)被其他所有属性完全依赖,则称其位该表的码
*主属性:码中的所有属性
*非主属性:其他
1.第一范式1NF:每一列都是不可分割的原子数据项
2.第二范式2NF:1的基础上,消除非主属性对码的部分函数依赖,使非码属性完全依赖于码
3.第三范式3NF:2的基础上,消除传递函数依赖,使所有非主属性不依赖于其他非主属性

备份与还原
1.命令行
备份      mysqldump -u用户名 -p密码 -prot数据库名称 > 保存路径
还原      创建使用数据库,执行文件source 文件路径

2.图形化工具

你可能感兴趣的:(给自己看,sql)