• 数据库表操作


    存储引擎

    引擎: 存储数据的方式,不同的存储方式会影响存取效率

    常用存储引擎: Innodb  myisam  memory  blackhole

    Innodb: 支持事务,行级锁,外键

    myisam: 支持表级锁

    memory: 内存级别的存储引擎,相当于缓存的作用,存取速度快,不能完成数据的持久化存储,重启mysql之后,表中的数据就会消失,适用于断电即消失的数据,或者存储一些效率要求比较高的,丢失不要紧的数据

      一般会把所有的视频都以Innodb存储引擎的方式存在硬盘里,然后把经常被点击的热数据放到memory存储引擎中再存一次,存储到内存中,方便经常查看.

    blackhole: 黑洞,读写分离,所有数据都可以写入,但是都不会真的记录在表当中,主从多级复制

    事务: n句sql是一个完整的事件,这n句sql要么一起成功,要么一起失败

    行级锁: 能够支持更多的修改数据的并发操作,当修改的行数非常多的时候,效率也会受到影响

    表级锁: 不能支持并发的修改同一张表中的数据,不需要加很多细粒度的锁来浪费时间

    外键: 在本表中有一个字段关联外表中的另一个字段

    创建表

    use 库名     #首先切换到数据库内  
    create table 表名 (字段名 数据类型(宽度) 约束条件);   # 创建表
        create table t1 (id int,name char(10));

    注意:

    1.在同一张表中,字段名不能相同

    2.宽度和约束条件可选择不写

    3.字段名和类型必须写

    查看表结构

    desc/describe 表名;            #查看表的基础信息
    show create table 表名 G;     #查看表的详细信息(编码和存储引擎)

    基础数据类型

    数字

    整数  int(宽度) 对整数约束宽度其实并没有实际的效果,比如设置宽度为5,约束只是在不足长度的时候的显示宽度是5,而不是你只能存储5位数

    小数  float(n,m) n表示数据总长度,m表示小数位

    时间类型

    year 

    date

    time

    datetime

    timestamp     #不允许为空,默认值是当前时间 now(),能够表示的时间范围比较小(1970--2038),超出这个时间范围则表示为0000--00-00 00:00:00,如果同一个表中有两个该字段,只有第一个字段会被表示为默认当前时间

    字符串

    char(宽度)          定长  存储相对浪费空间(不足产股的时候会自动补齐长度进行存储),不管存储什么样的数据,在显示的时候都会把数据的空格去掉

    varchar(宽度)     变长    相对节省空间,存取效率相对慢

    应用:

    char        手机号  身份证号   有限的长度

    varchar    评论  备注      

    enum和set

    enum   枚举  单选  不能选择不在枚举范围内的. 在严格模式下,如果写入不在枚举范围内的内容会报错

    set       集合  多选   去重   当重复选择集合当中的选项时,只会显示一个   不能选择不在集合范围内的内容

    #创建一个表t1
    mysql> create table t1 (id int,name char(10),gender enum('male','female'));
    Query OK, 0 rows affected (1.87 sec)
    
    #向表内添加数据,当性别不在指定枚举范围内,报错
    mysql> insert into t1 values (1,'alex','unknown');
    ERROR 1265 (01000): Data truncated for column 'gender' at row 1
    
    #写入枚举范围内的选项,并查看写入之后的表
    mysql> insert into t1 values (1,'alex','male');
    Query OK, 1 row affected (0.39 sec)
    
    mysql> select * from t1;
    +------+------+--------+
    | id   | name | gender |
    +------+------+--------+
    |    1 | alex | male   |
    +------+------+--------+
    1 row in set (0.00 sec)

    表的完整性约束

    not null   非空

    unique    唯一      

    primary key    主键       =非空+唯一      一张表只能有一个或一组主键

    default    默认值

    #创建表t2,id为主键,年龄默认值为20
    mysql> create table t2 (id int primary key,name char(10) not null,age int default 20);
    Query OK, 0 rows affected (1.61 sec)
    
    # 指定要输入的字段,让年龄使用默认值
    mysql> insert into t2 (id,name) values (1,'taibai');
    Query OK, 1 row affected (0.10 sec)
    
    #查看表中的内容
    mysql> select * from t2;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | taibai |   20 |
    +----+--------+------+
    1 row in set (0.00 sec)
    
    #更改默认值并查看内容
    mysql> insert into t2 values (2,'taibai',25);
    Query OK, 1 row affected (0.36 sec)
    
    mysql> select * from t2;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | taibai |   20 |
    |  2 | taibai |   25 |
    +----+--------+------+
    2 rows in set (0.00 sec)
    示例

    unique(字段1,字段2)     联合唯一

    mysql> create table t3 (id int,name char(10) not null,phone char(11),unique(id,phone));
    Query OK, 0 rows affected (1.99 sec)
    联合唯一

    foreign key     外键

    on update cascade    级连更新

    on delete cascade     级连删除

    # 创建记录班级信息的表t4,写入数据
    mysql> create table t4_class (id int primary key,name char(10));
    Query OK, 0 rows affected (1.78 sec)
    
    mysql> insert into t4_class values (1,'python'),(2,'java');
    Query OK, 2 rows affected (0.35 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> select * from t4_class;
    +----+--------+
    | id | name   |
    +----+--------+
    |  1 | python |
    |  2 | java   |
    +----+--------+
    2 rows in set (0.00 sec)
    
    # 创建记录学生信息的表t5,指定外键,与t4中的id字段相关联
    mysql> create table t5_student (id int primary key,name char(10) not null,cls_id int,foreign key(cls_id) references t4_class(id) on delete cascade on update cascade);
    Query OK, 0 rows affected (0.26 sec)
    
    mysql> insert into t5_student values (1,'alex',1);
    Query OK, 1 row affected (0.11 sec)
    
    mysql> select * from t5_student;
    +----+------+--------+
    | id | name | cls_id |
    +----+------+--------+
    |  1 | alex |      1 |
    +----+------+--------+
    1 row in set (0.00 sec)
    外键

    auto_increment    自动增长   被约束的字段必须是int类型且唯一

    # 创建表t6,id为主键且设置为自动增长
    mysql> create table t6 (id int primary key auto_increment,name char(10),age int);
    Query OK, 0 rows affected (3.06 sec)
    
    mysql> insert into t6 (name,age) values ('alex',20),('wusir',21),('taibai',22);
    Query OK, 3 rows affected (0.11 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql> select * from t6;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | alex   |   20 |
    |  2 | wusir  |   21 |
    |  3 | taibai |   22 |
    +----+--------+------+
    3 rows in set (0.00 sec)
    auto_crement

    修改表结构

    修改表名
    alter table 表名 rename 新表名;
    
    增加字段
    alter table 表名 add 字段名 数据类型  约束条件,add 字段名 数据类型  约束条件;
                                
    删除字段
    alter table 表名 drop 字段名;
    
    修改字段
    alter table 表名 modify  字段名 数据类型  约束条件;     #修改数据类型和约束
    alter table 表名 change 旧字段名 新字段名 数据类型 约束条件;
    
    修改字段排列顺序/在增加的时候指定字段位置
    alter table 表名 add 字段名 数据类型  约束条件  first;
    alter table 表名 add 字段名 数据类型  约束条件  after 字段名;
    alter table 表名 change 字段名 旧字段名 新字段名 新数据类型 约束条件 first;
    alter table 表名 modify 字段名 数据类型 约束条件  after 字段名;

    表与表之间的关系

    一对一: b表中有一个字段是 unique且是a表中某一个字段的Foreign key

    站在A表的角度上看一条数据是不是和b表中的一条数据关联

    站在B表的角度上看一条数据是不是和a表中的一条数据关联

    一对多: Foreign key

    站在A表的角度上看一条数据是不是和b表中的一条数据关联

    站在B表的角度上看一条数据是不是和A表中的多条数据关联

    多对多: 建立c表,有一个字段是a表的Foreign key,还有一个字段是b表的Foreign key

    站在A表的角度上看一条数据是不是和b表中的多条数据关联

    站在B表的角度上看一条数据是不是和A表中的多条数据关联

  • 相关阅读:
    .NET 环境中使用RabbitMQ
    WPF窗口模板——Style样式
    C#获取当前日期时间
    C#解析JSON字符串总结
    c#简单加密和对称加密
    List<T>转换为二维数组
    java后台导出pdf
    C# 创建 读取 更新 XML文件
    python 第三天
    编写登录接口
  • 原文地址:https://www.cnblogs.com/sandy-123/p/10491258.html
Copyright © 2020-2023  润新知