主键约束、拆分表、事务、数据类型

主键约束 primary key

主键:用于表示数据唯一性的字段称为主键

约束: 是给表字段添加的限制条件

主键约束:限制主键字段值不能重复并且非空 (唯一且非空)

create table t1(id int primary key,name varchar(10));  
insert into t1 values(1,'Tom');  
insert into t1 values(1,'Jerry');//失败 重复  
insert into t1 values(null,'ABC');//失败 不能为null  

自增: auto_increment

create table t2(id int primary key auto_increment,name varchar(10));  
insert into t2 values(null,'AAA');  
insert into t2 values(2,'AAA');  
insert into t2 values(10,'mm');  
insert into t2 values(null,'AAA');  
1. 当字段值为null的时候值会自己增长
2. 自增字段值也可以手动赋值
3. 增长规则:从曾经出现的最大值基础上+1
4. 自增数值只增不减 (delete清空表 自增数值并不清零)

注释 comment

创建表声明字段的时候给字段添加的介绍

create table t3(id int primary key auto_increment comment '这是一个主键',name varchar(10) comment '这是员工的姓名');

` 和 ‘

`: 用于修饰表名和字段名 可以省略

create table `t4`(`id` int,`name` varchar(10));

‘ :用于修饰字符串

数据冗余

如果表设计不够合理,保存大量数据的同时可能随之会出现大量重复数据,这些重复数据的现象就称为数据冗余,通过拆分表的形式解决冗余问题

练习:设计表保存以下数据:

设计表保存以下数据:

  1. 保存男装分类(category)下西服分类下的商品皮尔卡丹西服,价格9800,库存98件
  2. 保存家用电器分类下,电视机分类下的小米电视,价格2500,库存108件
  • 创建商品表
    create table item(id int primary key auto_increment, name varchar(10),price int,num int,categoryid int);
  • 创建分类表
    create table category(id int primary key auto_increment,name varchar(10),parentid int);
  • 插入数据
    insert into category values(null,’男装’,null),(null,’西服’,1),(null,’家电’,null),(null,’电视机’,3);
    insert into item values(null,’皮尔卡丹’,9800,98,2),(null,’小米电视’,2500,108,4);

    事务

    什么是事务?

    事务是数据库中执行SQL语句的最小工作单元,可以保证事务内的多条SQL语句要么全部成功,要么全部失败。
    查看数据库自动提交的状态
    show variables like ‘%autocommit%’;
    关掉自动提交 0关闭 1开启
    set autocommit=0;
    测试转账:
    create table person(id int, name varchar(10),money int);
    insert into person values(1,’超人’,500),(2,’钢铁侠’,10000);
    关掉自动提交: set autocommit=0;
    1. 先让超人+2000
      update person set money=2500 where id=1;
    2. 开启另一个终端 验证 此时数据库文件中的数据并没改掉
    3. 让钢铁侠-2000
      update person set money=8000 where id=2;
    4. 执行提交
      commit;
回滚 rollback;
将内存中的修改回滚到上次提交(commit)的点
update person set money=100 where id=1;
rollback;
保存回滚点 savepoint
update person set money=100 where id=1;  
savepoint s1;  
update person set money=200 where id=1;  
savepoint s2;   
rollback to s1;  

SQL的分类

DDL Data Definition Language

  • 数据定义语言,包括 create,alter,drop,truncate ,不支持事务

    DML Data Manipulation Language

  • 数据操作语言, 包括 insert,delete,update,select(DQL),支持事务

    DQL Data Query Language

  • 数据查询语言,只包括select,和事务没有关系因为并没有修改数据

    TCL Transaction Control Language

  • 事务控制语言,包括 commit,rollback, savepoint,rollback to

    DCL Data Control Language

  • 数据控制语言,用于处理分配用户权限相关的操作

truncate

  • truncate table 表名;
  • 删除表并且创建一个新表
  • truncate、drop和delete的区别:
  • delete用于删除数据,使用delete清空表时自增数值不清零 执行效率最低
  • drop 用于删除表 执行效率最高
  • truncate 用于删除表并创建新的空表,执行效率比delete要高,而且自增数值会清零

数据库的数据类型

整数

  • 常用整数有 int(m)和bigint(m),m代表显示长度必须和zerofill结合使用
    create table t_int(num int(10) zerofill);
    insert into t_int values(123);
    select * from t_int;

    浮点数

  • 常用浮点数double(m,d) m代表总长度 d代表小数长度 23.346 m=5 d=3
  • decimal超高精度浮点数,应用场景:涉及超高精度运算时使用
    create table t_double(num double(5,3));
    insert into t_double values(23.5678); 值为23.568
    insert into t_double values(23.5); 值为23.500

    字符串

  • char(m): 固定长度 m=10 abc 占10,效率高,最大255
  • varchar(m):可变长度 m=10 abc 占3,节省空间,最大65535,如果超过255建议使用text
  • text(m):可变长度 最大65535

    日期

  • date:只能保存年月日
  • time:只能保存时分秒
  • datetime:保存年月日时分秒,默认值为null,最大值9999-12-31
  • timestamp(时间戳距离19700101 08:00:00):保存年月日时分秒,默认值为当前系统时间,最大值2038-01-19
    create table t_time(t1 date,t2 time,t3 datetime,t4 timestamp);
    insert into t_time values(‘2018-10-16’,null,null,null);
    insert into t_time values (null,’20:06:32’,’2008-11-22 18:22:11’,null);

配置URL:

jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=UTF-8

三方SQL工具:sqlyog

QAQ感谢你的支持=w=