• MYSQL-数据库、表、数据操作


    一、操作数据库

      增:  create database db1;

      删:  drop db1;

      改:      数据库没有修改,只能删除。 

      查:  show databases;

    二、操作数据表

      增(简单):create table  t3(id int,name char(10)); 

      删:       drop table t3;

      改:

      查:       select * from t3;

    三、操作数据

      增(简单):insert into t3(id,name)vlaues(1,'abc');

      删:    delete from t3 where name='abc';    # 删除数据,自增id 从最后一条记录的id开始

            truncate table t3;                              # 清除数据,自增id 从0开始

      改:    update t3 set name='abc' where name='aaa';

      查:    select * from t3;

    四、有关增加数据表

            create table t4(
                            列名 类型 null ,
                            列名 类型 not null ,
                            列名 类型 not null auto_increment primary key,
                            id int,
                            name char(10)
                            )engine= innodb default charset=utf8;
            auto_increment :表示自增
            primary key :表示约束(不能重复且不能为空),加速查找
            not null : 是否为空
         engine=innodb :引擎为innodb (支持事务)
         default charset=utf8: 字符编码为utf8

         ps :关于引擎innodb 如果数据操作写入失败后数据库会回滚操作。
                myisam
    create table class(cid int not null auto_increment primary key,
                      caption varchar(10)
                      )engine = innodb default charset=utf8;
    例子

    五、有关数据类型:

      数据类型有三种:数字、字符串、时间

    bit[(M)]
                二进制位(101001),m表示二进制位的长度(1-64),默认m=1
    
            tinyint[(m)] [unsigned] [zerofill]
    
                小整数,数据类型用于保存一些范围的整数数值范围:
                有符号:
                    -128127.
                无符号:
    ~ 255
    
                特别的: MySQL中无布尔值,使用tinyint(1)构造。
    
            int[(m)][unsigned][zerofill]
    
                整数,数据类型用于保存一些范围的整数数值范围:
                    有符号:
                        -21474836482147483647
                    无符号:
    ~ 4294967295
    
                特别的:整数类型中的m仅用于显示,对存储范围无限制。例如: int(5),当插入数据2时,select 时数据显示为: 00002
    
            bigint[(m)][unsigned][zerofill]
                大整数,数据类型用于保存一些范围的整数数值范围:
                    有符号:
                        -92233720368547758089223372036854775807
                    无符号:
     ~  18446744073709551615
    
            decimal[(m[,d])] [unsigned] [zerofill]
                准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。
    
                特别的:对于精确数值计算时需要用此类型
                       decaimal能够存储精确值的原因在于其内部按照字符串存储。
    
            FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
                单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
                    无符号:
                        -3.402823466E+38 to -1.175494351E-38,
                        1.175494351E-38 to 3.402823466E+38
                    有符号:
                        1.175494351E-38 to 3.402823466E+38
    
                **** 数值越大,越不准确 ****
    
            DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
                双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
    
                    无符号:
                        -1.7976931348623157E+308 to -2.2250738585072014E-308
                        2.2250738585072014E-308 to 1.7976931348623157E+308
                    有符号:
                        2.2250738585072014E-308 to 1.7976931348623157E+308
                **** 数值越大,越不准确 ****
    
    
            char (m)
                char数据类型用于表示固定长度的字符串,可以包含最多达255个字符。其中m代表字符串的长度。
                PS: 即使数据小于m长度,也会占用m长度
            varchar(m)
                varchars数据类型用于变长的字符串,可以包含最多达255个字符。其中m代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。
    
                注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡
    
            text
                text数据类型用于保存变长的大字符串,可以组多到65535 (2**161)个字符。
    
            mediumtext
                A TEXT column with a maximum length of 16,777,215 (2**241) characters.
    
            longtext
                A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**321) characters.
    
    
            enum
                枚举类型,
                An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)
                示例:
                    CREATE TABLE shirts (
                        name VARCHAR(40),
                        size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
                    );
                    INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');
    
            set
                集合类型
                A SET column can have a maximum of 64 distinct members.
                示例:
                    CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
                    INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
    
            DATE
                YYYY-MM-DD(1000-01-01/9999-12-31)
    
            TIME
                HH:MM:SS('-838:59:59'/'838:59:59'YEAR
                YYYY(1901/2155DATETIME
    
                YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)
    
            TIMESTAMP
    
                YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
    数据类型

    六、数据表的其他操作:

    select * from t4 where id>1 and  name !='abc' and num =123;
    
    select * from t4 where id between 1 and 3;
    
    select * from t4 where id in (1,11,12);
    
    select * from t4 where id not in (1,11,12);
    
    select * from t4 where id in (select id from t3);
    条件
    select * from t4 where name like 'ab%';  # ab 后面的多个
    
    select * from t4 where name like 'ab_';  # ab 后面的单个
    通配符
        select * from 表 limit 5;            - 前5行
        select * from 表 limit 4,5;          - 从第4行开始的5行
        select * from 表 limit 5 offset 4    - 从第4行开始的5行
    限制
    select * from t4 order by id asc              - 根据 “列” 从小到大排列
        select * from t4 order by id desc             - 根据 “列” 从大到小排列
        select * from t4 order by id desc,age asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
    排序

     分组:

      场景: 1、计算每个部门有多少人。

       

    1.分组可以带上函数 count,sum,max,min,avg

    2.分组语句可以带上多个函数如下:

    select count(id),sum(id),max(id),min(id),department_id from userinfo group by department_id;

    3.如果对于聚合函数的结果进行二次筛选,必须使用heaving关键字。 *****

    select count(id),max(id),department_id from userinfo group by department_id having count(id)>1;

    select id,name from userinfo group by id;               # 查找分组,通过id 分组
    
    select name,id from userinfo group by name,id;       #查找分组,通过name ,id 分组
    
    select id,name from userinfo  where id > 3 group by name,id order by id desc
    #查找id 和name,通过name ,id  ;id降序排序  
    
    select count(id)department_id from userinfo group by department_id;
    
    
    ps :count(id),sum(id),max(id),min(id)
    分组
    create table userinfo(id int not null auto_increment primary key,
                          name char(10),
                          department_id int,
                          constraint fk_department_id foreign key (department_id)references department(id)
                          )engine =innodb default charset=utf8;
                          
    create table department(id int not null auto_increment primary key,
                           name char(10)
                           )engine=innodb default charset=utf8;
    
    insert into userinfo (name,department_id)values('alex',1);
    insert into userinfo (name,department_id)values('jinjin',2);
    insert into userinfo (name,department_id)values('xinxin',3);
    insert into userinfo (name,department_id)values('小何',4);
    insert into userinfo (name,department_id)values('小李',4);
    
    select count(id),department_id from userinfo group by department_id;
    例子

    七、连表操作

      1.连表的操作需要有有表与表之间有关联关系才行。

      2.连表操作时如果遇到列名相同的情况,把表名带上就可以了。

      要求:

      1、把所有的用户列出来,并把用户所在的部门列出来(即:把userinfo 表和department 表关联起来)

        第一种用法:select *from userinfo,department where department.id=department_id group by userinfo.id,userinfo.name,department.name ;

             第二种用法: select * from userinfo left join department on userinfo.department_id=department.id

        第三种用法:select * from userinfo right join department on userinfo.department_id=department.id    

      2.连表练习

      要求:

      将如下表格进行连表操作:

    create table class(cid int not null auto_increment primary key,
                      caption varchar(10)
                      )engine = innodb default charset=utf8;
    create table teacher(tid int not null auto_increment primary key,
                        tname varchar(10)
                       )engine = innodb default charset=utf8;
    create table student(sid int not null auto_increment primary key,
                        sname varchar(10),
                        gender varchar(1),
                        class_id int ,
                        constraint fk_class_id foreign key (class_id)references class(cid)
                       )engine = innodb default charset=utf8;
    create table course(cid int not null auto_increment primary key,
                        cname varchar(10),
                        teach_id int ,
                        constraint fk_teacher_id foreign key (teach_id)references teacher(tid)
                       )engine = innodb default charset=utf8;
    create table score(sid int not null auto_increment primary key,
                        student_id int ,
                        course_id int ,
                        number int,
                        constraint fk_student_id foreign key (student_id)references student(sid),
                        constraint fk_course_id foreign key (course_id)references course(cid)
                       )engine = innodb default charset=utf8;
                       
        
    insert into class(caption)values('三年二班');       
    insert into class(caption)values('一年三班');
    insert into class(caption)values('三年一班');
    
    insert into teacher(tname)values('波多');       
    insert into teacher(tname)values('长空');
    insert into teacher(tname)values('反倒');
    
    insert into student(sname,gender,class_id)values('钢弹','',1);       
    insert into student(sname,gender,class_id)values('铁锤','',1);
    insert into student(sname,gender,class_id)values('山炮','',2);
    
    insert into course(cname,teach_id)values('生物',1);       
    insert into course(cname,teach_id)values('体育',1);
    insert into course(cname,teach_id)values('物理',2);
    
    insert into score(student_id,course_id,number)values(1,1,60);       
    insert into score(student_id,course_id,number)values(1,2,59);
    insert into score(student_id,course_id,number)values(2,2,100);
    
    
    select * from score
        left join student on score.student_id=student.sid
        
        left join course on score.course_id=course.cid
    
        left join class on student.class_id=class.cid
        
        left join teacher on course.teach_id =teacher.tid;
    练习

     补充:

       1.分组的补充:可以把一个表看成一个分组 然后通过函数计算。

          select count(id) from  userinfo  

          2.连表的补充:

        select * from userinfo inner join department on userinfo.department_id=department.id   

         将 出现null 的一行隐藏

      

  • 相关阅读:
    python实现双向链表
    django contenttypes
    tensorflow学习笔记一
    vue指令和事件绑定
    es6简单介绍
    mysql主从复制
    mysql事务
    winform 使用 ReportViewer做报表
    设置控件获取焦点
    修改安卓串口蓝牙app问题记录
  • 原文地址:https://www.cnblogs.com/AYxing/p/9557629.html
Copyright © 2020-2023  润新知