mysql数据库(入门)二

主键约束

  • 什么是主键:表示表中数据唯一性的字段称为主键
  • 添加主键约束的字段,值唯一且非空。
    -格式: create table emp(id int primary key,name varchar(10));
    insert into emp values(1,'Tom');//成功
    insert into emp values(2,'Jerry');//成功
    insert into emp values(1,'abc');//失败 id不能重复
    insert into emp values(null,'abc');//失败 主键不能为null

主键+自增

-格式:create table t1(id int primary key auto_increment,name varchar(10));
insert into t1 values(null,'刘备');
insert into t1 values(null,'刘备');

insert into t1 values(10,‘张飞’);

  1. 当自增字段的值为null时会自动赋值并且数值+1
  2. 可以指定赋值
  3. 自增数值只增不减 不会因为删除数据而减少
  4. 在表中曾出现过的最大值的基础上+1

注释 comment

-格式:create table t2(id int primary key auto_increment comment '这是id表示唯一性', name varchar(10) comment '这是名字', sal int comment '这是工资');
-查看方式: show create table t2;

`和' 的区别

  • `是用来修饰表名和字段名的 可以省略
  • ' 是用来修饰字符串的

数据冗余

  • 什么是冗余:如果表设计不够合理,随着数据量的增多,可能会出现大量的重复数据,这种重复数据成为数据冗余,可以通过拆分多个表的形式解决此问题
  • 事务

    • 创建人物表 create table person(id int primary key auto_increment,name varchar(10),money int);
    • 插入两条数据 insert into person values(null,'超人',500),(null,'钢铁侠',50000);
    • 超人和钢铁侠借10000块钱

      1. 让钢铁侠-10000 update person set money=money-10000 where id=2;
      2. 让超人+10000 update person set money=money+10000 where id=1;
    • 什么是事务:事务是数据库中执行SQL语句的工作单元,可以保证事务内的SQL语句要么全部成功,要么全部失败。

    • 如何使用事务:
    • 把数据库的自动提交改成手动提交,
    • 执行多条sql语句,此时SQL会在内存中执行
    • 当所有SQL在内存中执行完后 手动提交,把多次改动一次性提交到数据库文件中

    • 查看数据库自动提交的状态 show variables like '%autocommit%';

    • 关闭和打开自动提交 0:关闭 1:开启 set autocommit=0;
    • 验证事务的步骤:
    • 在A窗口中执行让钢铁侠-10000 update person set money=money-10000 where id=2;
    • 此时在A窗口中执行select * from person 验证数据时被改掉的,但是此时显示的内容是内存中的数据
    • 打开新的B窗口执行select * from person 因为此时数据查询的是数据库文件中的数据,此时并没有发生改变
    • 在A窗口中执行让超人+10000 update person set money=money+10000 where id=1;
    • 此时A窗口查询数据改变(内存中数据),B窗口数据没变(数据库文件中数据)
    • 回到A窗口执行commit; 手动提交,此时B窗口查询数据也发生了改变,因为A窗口中已经把两次内存中的改动提交到了数据库文件中。
    为什么使用事务?
    当做某一件事需要执行多条SQL语句的时候(类似转账),如果不使用事务,则可能出现多条SQL部分成功部分失败,这样的结果会导致数据错乱,使用事务后可以保证多条SQL语句要么全部成功,要么全部失败。可以解决以上问题
    
事务的执行流程?
所谓开启事务实际上就是把数据库的自动提交关闭改成手动提交,在手动提交之前多次SQL语句的执行只会对内存中的数据进行更改,当提交的时候会把多次SQL的执行结果一次性提交到数据库文件中
事务回滚
  • 事务回滚会把内存中的数据回滚到上次提交的点
  • 设置回滚点: savepoint 标识;
  • 回滚到某个回滚点: rollback to 标识;

事务相关指令总结:

  1. show variables like '%autocommit%';
  2. set autocommit=0/1;
  3. commit;
  4. rollback;
  5. savepoint s1;
  6. rollback to s1;

SQL分类

  1. DDL:Data Definition Language 数据定义语言,包括:create,alter,drop,truncate。不支持事务
  2. DML:Data Manipulation Language 数据操作语言,包括:insert delete update 和 select(DQL)。支持事务
  3. DQL:Data Query Language 数据查询语言,只有select
  4. TCL:Transaction Control Language 事务控制语言,包括:commit,rollback,savepoint,rollback to xxx;
  5. DCL:Data Control Language 数据控制语言,分配用户权限相关的SQL
truncate
  • 删除表并创建一个新表(空表)
  • 格式: truncate table 表名;
  • truncate、drop、delete区别: 执行效率drop>truncate>delete, drop只是删除表,truncate是删除表并创建一个空表,delete只是删除数据自增数值不会清零

数据库的数据类型

  1. 整数: int(m) bigint(m) m代表显示长度 zerofill(零填充) create table tint(num int(10) zerofill); insert into tint values(123);
  2. 浮点数: double(m,d) m代表总长度,d代表小数长度 如:76.234 m=5 d=3;
  3. decimal(m,d) 超高精度浮点数,涉及超高精度运算时使用。
  4. 字符串
  5. char(n): 固定长度 n=10 'abc' 占10 执行效率高,最大长度255
  6. varchar(n):可变长度 n=10 'abc' 占3 更节省空间,最大长度65535,超过255建议使用text。
  7. text: 可变长度 最大65535。
  8. 日期类型
  9. date: 保存年月日
  10. time: 保存时分秒
  11. datetime: 保存年月日时分秒 默认值为null,最大值9999-12-31
  12. timestamp(时间戳):保存年月日时分秒 默认值为当前时间,最大值2038-1-19
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值