• MySQL学习(3)


    一 SQL语句

      1. 数据库级别(*)

    •     显示全部数据库:show databases;
    •     创建数据库:create database '数据库名字’;
    •     使用数据库:use '数据库名字';
    •     删除数据库:drop database 's数据库名字‘;
    •     导出数据库:mysqldump -uroot -p 数据库名 > 导出文件名
    •     导入数据库:mysql -uroot -p 数据库名 < 文件路径.数据表

      2.数据表级别(*)

    •     显示全部数据表:show tables;
    •     显示数据表列:desc '数据表名';
    •     创建表:create table '数据表名'(nid 类型,name 类型);
    •     删除表:drop table '数据表名';
    •     清空表内容:elete from '数据表名';
    •     清空表内容:truncate table '数据表明'; 速度快,自增回到原点
    •     添加列:lter table '表名' add ‘列名’ 类型;
    •     删除列:alter table '表名' drop column '列名';
    •     修改列类型:alter table '表名' modify column '列名' 类型;
    •     修改列名和类型:alter table '表名' change '原列名' '新列名' 类型;
    •     添加主键:alter table '表名' add primary key;
    •     删除主键:alter table '表名' drop primary key;
    •     添加外键:alter table '主表名' add constraint '外键名' foreign key '从表名'('外键字段') references '主表'(字段');
    •     删除外键:alter table '表名' drop foreign key '外键名';

        create table '表名'('Field名' 'Field类型' '是否为空' 默认值,'Field名' 'Field类型' '是否为空' 默认值)engine=innodb charset=utf8;

        例:

          

        创建表tb2成功。

        create table '表名'('Field名' 'Field类型' '是否为空' 默认值 auto_increment primary key,'Field名' 'Field类型' '是否为空' 默认值)engine=innodb charset=utf8; auto_increment代表自增(只能数值类型,所引,主键,一张表只能由一个自增列),加它时后面一定要由primary key(一张表只能由一个主键,不能为NULL,一般情况下把自增列设为主键,可以两列一起作为主键,查找速度非常快

        例:

          

           

           可以看到,我只查了num的值,但是id的value是随着递增的。

        a. delete from '数据表'与truncate table '数据表'的区别

          (1) 用delete from tb2;清空数据表tb2后,然后重新插入两行数据,结果:

          

           可以看到id是在原来的基础上递增的。

          (2) truncate table tb2; 然后再重新插入数据,结果:

           

           可以看到表中id列是从1开始递增了。

        b. 外键

          把两个表中的两列进行了关联,加了约束。

          (1) 创建friInfo的表:

          

            创建department的表:

          

          向department表中插入数据,显示:

          

           将friInfo表中的departmentId和department表中的id建立关联:

          

           fk_f_d是外键的名字;外键建立成功。

          我们看看能否在friInfo表中的departmentId中插入在department表id列中没有的数字,结果:

          

           提示我们不可以插入数据,那我们插入符合要求的,结果:

          

           可以看到插入成功。

          friInfo表中的departmentId列的数据只能从department中的id列选取。

          (2)可以在创建表的时候直接添加约束

          例: 

            create table department(
                id int not null auto_increment primary key,
                name varchar(20))engine=innodb default charset=utf8;
    
            create table friInfo(
                id int not null auto_increment primary key,
                name varchar(20),
                departmentId int,
                constraint fk_f_d foreign key(departmentId) referneces department(id))engine=innodb default charset=utf8;

      3.数据行级别(****)

        增:a. insert into '表名'('列名','列名') values('值','值'),('值','值'), ('值','值'); 一次插入多条数据;

          b. insert into '表名'('列名','列名') select '列名','列名' from '表名'; 把另一个表的两列中的数据插入到表的列中;

        删:delete from  '表名' where '列名'='值'; 将某一列中某一值的一行数据删掉; '列名'>'值',  '列名'<值',  '列名'!='值' 都可以;

        改:update '表名' set '列名1'='值1' where '列名2'='值2' and ...; 把'列名2'='值2的'列名1'的值改为'值1';

        查:select  '列名1', '列名2' from '数据表名' where '列名'='值'; 显示表中'列名'='值'的那行中 '列名1'和'列名2'数据;

        其他:条件,通配符,限制,排序,分组,连表,组合。参考https://www.cnblogs.com/wupeiqi/articles/5713315.html

    二 SQL基本数据类型

      1. 数字

       (1) bit(m) 二进制位,m表示二进制位的长度,范围1~64,默认m=1

       (2) tinyint 相当于c++中的int8类型,默认是有符号的,创建无符号:tinyint unsigned;注意:布尔类型用 tinyint(1)表示

       (3) smallint 相当于c++中的int16类型;

       (4) int 相当于c++中的int32类型;

       (5) bigint 相当于c++中的int64类型;

       (6) decimal(m[,d]) 精确的小数,m是数字总个数(负号不算),最大值65,d是小数点后个数,最大值30;

       (7) float(m,d) 单浮点数,m是数字总个数,d是小数点后数字个数;数值越大越不准确;

       (8) double(m,d) 双浮点数,m是数字总个数,d是小数点后数字个数;数值越大越不准确;

      2.字符串

       (1) char(m) 固定长度的字符串,最大长度255字符,m代表字符串长度,即使数据小于m,也会占用m个字符;

       (2) varchar(m) 可变长度的字符串,最大长度255字符,m代表字符串长度,只要小于m长度的字符串都可以保存在数据类型中;相比于char类型效率较低;

       (3) text 保存变长的大字符串,最大长度65535个字符;

       (4) mediumtext 保存变长的大字符串,最大长度16777215个字符;

       (5) longtext 保存变长的大字符串,最大长度4294967295个字符;

       (6) TinyBlog、Blog、MediumBlog、LongBlog 二进制数据;

      3.时间

       (1) date: YYYY-MM-DD;

       (2) time: HH:MM:SS;

       (3) datetime:  YYYY-MM-DD HH:MM:SS;

       (4) year: YYYY;

       (5) timestamp: YYYYMMDD HHMMSS;

      4.枚举

       相当于c++中的枚举。

       用法:

          create table studentInfo(
              name varchar(20),
              age int,
              class ENUM('class1', 'class2', 'class3')
          )engine=innodb default charset=utf8;
          
          insert into studentInfo(name,age,class) values('a',19,'class1'),(
    'b',20,'class2'),('c',21,'class3');

      5.集合

       可以设置多个值。

       用法:

          create table teacher(
              name varchar(20),
              course SET('math', 'sports', 'english')
          )engine=innodb default charset=utf8;
    
          insert into teacher(name,course) values('a', ('math', 'sports')), ('b', ('english', 'sports')), ('c', ('math', 'english'));
    愿有志之人,成就非凡之事。
  • 相关阅读:
    任务安排(代价提前付)
    10 01模拟赛订正
    哈希hash
    初学期望
    P1251 递推专练3
    P1229-神秘岛
    P1228-重叠的图像
    白银莲花池
    求强连通分量
    割边
  • 原文地址:https://www.cnblogs.com/damon-song/p/12385380.html
Copyright © 2020-2023  润新知