zoukankan      html  css  js  c++  java
  • 数据库总结

    创建库

    create database s19 character set utf8(创建数据库时指定字符编码否则中文会乱码);
    create database 数据库名

    创建表
    create table 表名(
    id int primary key auto_increment,
    name varchar(20),

    =======================================================================================================================================
    表结构操作

    增加:alter table 表名 add 字段名 字段类型 NOT NULL/first/(after列名);
    删:drop table 表名 
    改:alter table 表名 modify 列名 字段类型 /first/(after列名);
    查:
    查看表结构:desc 表名
    查看当前数据库下有哪些表show tables
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------

    完整性约束:
    primary key(非空且唯一 ):哪个字段设置为auto_increment 那么该键就必须设置为primary key(主键)

    -- 方式1

    CREATE TABLE t1(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20)
    );

    -- 方式2

    CREATE TABLE t2(
    id INT NOT NULL,
    name VARCHAR(20)
    );

    注意:

    1、一张表中最多只能有一个主键

    2、表中如果没有设置主键,默认设置NOT NULL的字段为主键;此外,表中如果有多个NOT NULL的字段,则按顺序将第一个设置NOT NULL的字段设为主键。

    结论:主键一定是非空且唯一,但非空且唯一的字段不一定是主键。

    3、主键类型不一定必须是整型

    -------------------------------------------------------------------------------------------------------------------------------
    复合主键
    所谓的复合主键 就是指你表的主键含有一个以上的字段。

    如果一列不能唯一区分一个表里的记录时,可以考虑多个列组合起来达到区分表记录的唯一性,形式

    ①创建时:
    create table sc (
    studentid int,
    courseid int,
    score int,
    primary key (studentno,courseid)
    ); 
    ②修改时:
    alter table tb_name add primary key (字段1,字段2,字段3);

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------
    unique(唯一):create table t1 (name varchar(20) unique);
    实例:CREATE TABLE t5(
    id INT AUTO_INCREMENT,
    name VARCHAR(20) DEFAULT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY UK_t5_name (name)
    );
    建表之后添加unique(唯一性约束)
    alter table t5 add constraint UK_t5_name unique (name);
    删除
    ALTER TABLE t5 DROP INDEX UK_t5_name;




    表与表之间的关系:
    一对多
    将关联字段设置在多的那张表中
    1、书表 2、出版社表 一个出版社可以出版多本书,根据一对多外键设置在多的那张表里 即书表里有个出版社ID字段。
    多对多
    创建第三张关系表:例如 1学生表、2老师表 老师有多个学生,一个学生有多个老师
    1、创建学生表
    2、创建老师表
    3、创建两者之间的关联关系的表。
    一对一

    ==================================================================================================================================================================

    表记录操作

    增insert insert 表名 (字段名) values(值);
    删delete delete from 表 where name='字段名';(删大数据用truncate+表名) 
    改update update 表名 set salary =300 where name='whq';

    查select(重点) 
    语法顺序(不可跌倒):select 列名 form 表名 + where字句 + group by + having + order by + limit

    执行顺序:from---> where----> select ---> group by -----> having --->order by
    命令行:
    单表: select 列名 form 表名 
    where 条件+
    1、where +关系运算符
    2、where +逻辑运算符
    3、where +子关键字
    3.1、where+ between ...and...(范围) 
    3.2、where + is null
    3.3、where + in
    3.4、where +not in:select name from emp where name like 'zhang%';
    3.5、where +like + %/_ :
    3.5.1、where +like + %
    3.5.2、where +like + %%
    3.5.3、where +like + _
    3.5.4、where +like + and 
    3.5.5、where +like + or 
    3.5.6、where +like + not %/_


    group by列名(出现:"每一个XX的统计"字样) select +count/max/min/avg(所要统计的字段名) +from 表名 group by +所要分组的条件字段

    分析:每一个部门的薪水平均值
    1.1、出现'每一个' 的字样说明用分组
    1.2、'薪水'说明是分组的列字段(selec后)
    1.3、说明用的是哪个聚合函数(count/max/min/avg)
    1.4、每个部门的平均薪水,查询三个东西:1、每个部门 2、平均、3、薪水
    1.5、如果想用第四个及以上的东西就要用having
    实例1:select * from emp group by dep(部门)
    实例2:select avg(salary) from emp group by dep ;统计每个部门的平均薪水

    2、group by作为输入:查询结果作为后一个查询语句的条件:
    2.1、查询每个部门最大年龄员工的姓名
    select max(age) from emp group by dep查询的结果给select name from emp where age in 
    实例1:select name from emp where age in ( select max(age) from emp group by dep);

    3、group by 与group_concat连用查询分组后 组内的的信息
    3.1、查询每个组的员工姓名:(查询每个组的哪些年龄、姓名等:定义是:分组显示每个组内的信息)
    实例1:select dep,group_concat(name) from emp group by dep;

    having 筛选
    分组之后进行过滤

    Oder by 列名 +DESC/ASC
    1、DESC:该列名从大往小降序
    2、ASC:默认 从小往大的升序

    LIMIT 限制条数
    1、select * from emp limit 3 :取三条从第一条开始取
    2、select * from emp limit 2,5:从第2条开始取,取5条

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------

    命令行:
    多表查询:(暂略

  • 相关阅读:
    理解钩子Hook以及在Thinkphp下利用钩子使用行为扩展
    ThinkPHP 分页类的使用及退出功能的实现
    ThinkPHP登录功能代码
    thinkphp遗留问题
    ThinkPHP随笔
    ThinkPhp循环出数据库中的内容并输出到模板
    thinkphp常用Config.php配置项
    thinkphp笔记
    PHP面向对象学习七 总结
    Trie树
  • 原文地址:https://www.cnblogs.com/xyhh/p/10855607.html
Copyright © 2011-2022 走看看