zoukankan      html  css  js  c++  java
  • 数据库表操作

    存储引擎

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

    常用存储引擎: 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表中的多条数据关联

  • 相关阅读:
    POJ 1251 Jungle Roads
    1111 Online Map (30 分)
    1122 Hamiltonian Cycle (25 分)
    POJ 2560 Freckles
    1087 All Roads Lead to Rome (30 分)
    1072 Gas Station (30 分)
    1018 Public Bike Management (30 分)
    1030 Travel Plan (30 分)
    22. bootstrap组件#巨幕和旋转图标
    3. Spring配置文件
  • 原文地址:https://www.cnblogs.com/sandy-123/p/10491258.html
Copyright © 2011-2022 走看看