主键约束 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));
‘ :用于修饰字符串
数据冗余
如果表设计不够合理,保存大量数据的同时可能随之会出现大量重复数据,这些重复数据的现象就称为数据冗余,通过拆分表的形式解决冗余问题
练习:设计表保存以下数据:
设计表保存以下数据:
- 保存男装分类(category)下西服分类下的商品皮尔卡丹西服,价格9800,库存98件
- 保存家用电器分类下,电视机分类下的小米电视,价格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;
- 先让超人+2000
update person set money=2500 where id=1; - 开启另一个终端 验证 此时数据库文件中的数据并没改掉
- 让钢铁侠-2000
update person set money=8000 where id=2; - 执行提交
commit;
- 先让超人+2000
回滚 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