mysql - 相关内容4

目录

一、创建表

二、增删改

1、增:往数据库表中添加一条数据,insert into

2、删:从数据库表中删除指定的数据

3、修改:update,将指定数据内容进行修改

4、扩充

三、事务


一、创建表

1、建表语法:

creat  table  表名(

        字段名  数据类型  [约束]  [默认值] ,

        字段名   数据类型  [约束] ,

        字段名  数据类型

注意:最后一个字段后面不加 逗号

2、常用数据类型:

(1)数值类型:

        int :整数,4B,存储数据的范围   -2147483648~2147483647

        double : 小数, 双精度 ,8B

(2) 字符串类型 :

         a. char(n):固定长度的字符串
            char(5):字符串长度为,'abc'利用空进行填充,实际长度为5
        
         b. varchar(n):不固定长度的字符串
           varchar(5):'abc',实际长度为3
       
       存储:手机电话(固定长度为11位,char(11))
            账户用户名(字符个数不固定,varchar(50))
            身份号(固定长度18位,char(18))

(3) 日期类型:

    date:年月日,默认格式为 YYYY-MM-DD. 
    datetime:年月日时分秒,YYYY-MM-DD  HH:MM:SS  精确到秒
    TIMESTAMP: 年月日时分秒,时间戳

(4) 布尔类型:mysql中不支持

    a. 利用 int 中 1代表 true; 0 false
    b. 利用 char(1) 中'y' 代表 true, n 代表false
    c. 利用 char(3) 中 '是' 代表 true, '否'代表 false
       注意:utf-8中汉字占 2~3个字节

3、默认值

(1) 作用:标识该字段不给数据时,系统会根据指定的内容默认赋值
(2) 语法:
    字段名 数据类型 default 值
(3) 注意:
    指定默认的值,必须和该字段的数据类型匹配

4、约束

(1) 主键约束:primary key , pk

    a. 作用:用于标识表中每一行数据,例如:学号|工号|id等
    b. 特点:唯一、非空
    c. 语法:字段名 数据类型 primary key
    d. 注意:实际开发时,通常每一张表都会设置一个主键列

(2) 唯一约束:unique  ,un

    a. 作用:用于标识该字段中的内容不允许重复,例如身份号、电话
    b. 特点:唯一、可以为空
    c. 语法:字段名 数据类型 unique

(3) 非空约束:not null , nn

    a. 作用:用于标识该字段的内容不能为空,必须有内容,例如:学生名
    b. 特点:不能为空、可以重复
    c. 语法:字段名 数据类型 not null

(4) 外键约束:简称 fk

    a. 作用:用于标识当前字段的值不能随意输入,需要跟从于另一张表的主键列或是唯一列的值
    b. 注意:设置外键列的表被称为从表;被从表指定的表称为主表
            从表中的外键列数据跟从于主表中的指定列中的数据
    c. 特点:可以重复、可以为空(null)
    d. 语法:references 主表表名(主表中主键列名/唯一列列名)

二、增删改

1、增:往数据库表中添加一条数据,insert into

(1) 语法:insert into 表名 (字段名1,字段名2,字段名3) values (值1,值2,值3) -- 部分字段赋值

(2) 注意:

    a. 此种语法可以对表中的部分字段赋值,但是选择的字段中必须包含表中主键列和非空列
    b. 后面给定值的顺序、数据类型、个数需要和前面字段一致
    c. 给定值时,需要遵循对应字段约束(唯一、非空、主键、外键)
    d. 前面指定字段的顺序和表中字段顺序没有强制要求

(3) 案例:

(4) 语法2:insert into 表名 values(值1,值2,值3) --给所有的字段赋值

    a. 注意:此语法必须为表中所有的字段一一赋值
    b. ()中给的值顺序、个数、数据类型取决于 表结构
   

(5)利用工具对主键自动维护唯一性:

insert into t_student (stu_name,sex,email,birthday)
values('欢欢',2,'hh@qq.com','2000-10-27')

2、删:从数据库表中删除指定的数据

(1) 语法:delete from 表名 where 过滤条件   -- 删除符合过滤条件的数据

(2) 注意:删除数据时,根据开发需求指定过滤条件,如果没有加过滤条件,删除表中所有的数据

(3) -- 给定一个删除指定id对应的数据

    delete from t_student where stu_id=16  -- 采用唯一主键删除,等值判断最多删除一条
    注意:如果没有符合过滤条件的数据,则不删除任何一条数据

(4) -- 删除班级
            delete from t_clazz where cls_id=3
      如果被删除的主表中的数据被从表占用,则不能直接删除,解决方案分为以下两种:
       -- 第一个解决方案:删除被占用的子项中的对应数据(直接删除调用当前班级的学生)
       delete from t_student where cls_id=3

       -- 第二种解决方案:先将占用的子项中对应的数据修改到其他的数据上
          -- 先将学生调整其他班级中,清空当前班级学生
          update t_student set cls_id = 1 where cls_id=3
          delete ..... 

3、修改:update,将指定数据内容进行修改

(1) 语法:update 表名 set 字段名 = 新值,字段名2=新值2 where 过滤条件

(2) 案例:

(3) 注意:
    a. 修改的新值需要对应字段数据类型
    b. 修改时需要遵循字段约束

4、扩充

(1) 如果 delete的过程没有加过滤条件,则将指定表中所有的数据删除
    delete from 表名
    注意:对表中的所有数据进行一条条删除(删除数据效率相对低);表结构依然存在

(2) 语法:truncate table 表名

    本质: 直接将存储表数据部分的空间,直接清除,进而删除数据[非DML]
    特点: 效率远远高于delete

(3) 删除表:drop table aa
    将表中的数据删除的同时,表结构也被删除

三、事务

1、事务:

        通常由一条或是多条sql组成,这多条sql看成整体,如果执行所有事务中sql都会执行,事务执行成功,提交事务(commit);只要有一条sql没有执行成功(或是没有执行到),事务执行失败(撤销已经执行过的sql),回滚事务(rollback)

        事务在开发中是最小执行单元;
在navicat中以一条sql为一个事务,执行一条sql自动完成提交,需要设置为手动控制事务时,执行
set autocommit=false,可以利用 commit和 rollback让客户端应用者自己控制事务提交的时机

2、事务执行的原理

       数据库会为每一个客户端都分配一个独有的回滚段,如果客户端发送的为insert/delete/update操作时,先将操作的结果存储在客户端对应回滚段中,如果执行到 commit,将客户端对应回滚段中的数据同步到数据库中,但是如果执行到 rollback(回滚),则将回滚段中的数据撤销,此时数据库不会被同步,被回滚的数据结果不会被其他客户端查询到 。

3、事务的大小:

(1) 事务的大小由业务决定,不同的业务下,需要事务sql数量不同。

(2) 案例:

        -- 开户业务:由1条sql组成 --> 事务
    insert into accounts ....
    
    -- 转账业务:由2条sql组成 --> 事务
    update account set balance=balance-money where numId = 8298349
    
    update account set balance=balance+money where numId = 8990909

(3)事务的边界

       a. 开始:从第一条sql开始执行,事务开始
       b. 结束:执行的sql为insert/delete/update时
                    第一种情况:commit:事务提交
                    第二种情况:rollback:事务回滚
       
       注意:select查询语句无需控制事务

4、事务的底层安全

(1) 事务底层基于锁对数据库安全进行保证

(2) 在一个事务中 insert/update/delete 数据时,会获取该数据的锁标记,直到该事务结束(commit/rollback)才会释放锁标记;在一个事务持有数据的锁标记时,多事务并发操作,其他事务不能对该数据进行  insert/update/delete 操作,直到获取到锁标记为止,但是可以进行select查询操作,查询操作默认不参与事务。

5、事务的特点(ACID)

(1) 事务的原子性(Atomic):
    事务中的多个sql语句是一个整体, 要么全部成功,要么全部失败。

(2) 事务的一致性(Consistency):
    (数据的合理性),事务执行前后(无论失败还是成功),最终数据是合理的。

(3) 事务的隔离型(Isolation):
    多个事务并发时,事务之间相互独立,互不影响。

(4) 事务的持久性(Durability):
    事务结束(成功或失败),对数据库的数据修改时永久性的。


  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值