主键约束
- 约束:创建表时给表字段添加的限制条件
- 主键:表示数据唯一性的字段称为主键
- 主键约束:保证字段的值唯一且非空
- 如何使用: create table t1(id int primary key,name varchar(10)); insert into t1 values(1,‘aaa’); //成功 insert into t1 values(1,‘bbb’); //报错 因为不能重复 insert into t1 values(null,‘ccc’); //报错因为不能为null
主键+自增
- 让主键值自己增长
- 自增数值只增不减,从历史最大值基础上+1
- 如何使用: create table t2(id int primary key auto_increment,name varchar(10)); insert into t2 values(null,‘aaa’); 1 insert into t2 values(null,‘bbb’); 2 insert into t2 values(10,‘ccc’); 10 insert into t2 values(null,‘ddd’); 11 delete from t2 where id>=10;
insert into t2 values(null,‘eee’); 12 delete from t2; insert into t2 values(null,‘fff’); 13
注释
- 给表字段添加注释
- 如何使用: create table t3(id int primary key auto_increment comment ‘这是个主键’,name varchar(10) comment ‘这是名字呵呵’); show create table t3; //查看注释
`符号的作用
- 用于修饰表名和字段名 可以省略,但不要和单引号搞混 create table
t4
(name
varchar(10));
数据冗余
- 由于表设计不够合理导致的大量重复数据 称为数据冗余,可以通过拆分表的形式降低或避免冗余的出现
事务
- 事务是数据库中执行同一业务多条SQL语句的工作单元,可以保证这多条SQL语句全部执行成功或全部执行失败,不会出现部分成功部分失败的情况
- 验证转账业务:
- 创建表 create table user(id int primary key auto_increment,name varchar(10),money int,status varchar(5)); insert into user values(1,‘蝙蝠侠’,20000,‘正常’),(2,‘超人’,50,‘冻结’); insert into user values(3,‘神奇女侠’,20,‘正常’);
- 蝙蝠侠给超人转账SQL update user set money=money-2000 where id=1 and status=‘正常’; update user set money=money+2000 where id=2 and status=‘正常’;
验证过程:转账失败
- 开启事务 begin;
- 执行转账SQL update user set money=money-2000 where id=1 and status=‘正常’; 此时查看内存中数据和数据库中数据(需要开启新的终端窗口) update user set money=money+2000 where id=2 and status=‘正常’; 发现转账失败,把内存中的错误操作回滚回去
- 回滚事务: 把内存中的错误操作修改回去 rollback;
验证过程:转账成功
- 开启事务 begin;
- 执行转账SQL update user set money=money-2000 where id=1 and status=‘正常’; 此时查看内存中数据和数据库中数据(需要开启新的终端窗口) update user set money=money+2000 where id=3 and status=‘正常’; 此时判断两条全部执行成功,认为转账成功,把内存中的改动一次性提交到磁盘中
- 提交事务 commit;
事务相关指令
- 开启事务 begin
- 提交事务 commit
- 回滚事务 rollback
- 保存回滚点 savepoint xxx;
- 回滚到指定回滚点 rollback to xxx;
begin; update user set money=1000 where id=1; savepoint s1; update user set money=2000 where id=1; savepoint s2; rollback to s1;
SQL分类
- DDL Data Definition Language:数据定义语言 包括:create,drop,alter,truncate , 不支持事务
- DML Data Manipulation Language: 数据操作语言 包括:insert、update、delete、select(DQL),支持事务
- DQL Data Query Language:数据查询语言 只包括:select
- TCL Transaction Control Language:事务控制语言 包括:begin commit rollback savepoint xxx ,rollback to xxx;
- DCL Data Control Language:数据控制语言 分配用户权限相关的SQL
truncate
- 格式: truncate table 表名;
- 删除表并创建新表 自增数值清零 create table t5(id int primary key auto_increment,name varchar(10)); insert into t5 values(null,‘aaa’),(null,‘bbb’); truncate table t5; insert into t5 values(null,‘aaa’),(null,‘bbb’);
数据类型
- 整数类型
- 常用:int(m)和bigint(m) m代表的是显示长度 需要结合zerofill关键字使用 create table t_int(id int,age int(10) zerofill); insert into t_int values(1,18);
- 浮点数
- 常用:double(m,d) m代表总长度 d代表小数长度 78.386 m=5 d=3
- decimal(m,d) 超高精度浮点数 当超高精度运算时使用
- 字符串
- 常用: char(m) 不可变长度 最大长度255 ,varchar(m) 可变长度 节省资源 最大长度为65535 长度超过255建议使用text text(m)可变长度 最大长度65535
- 日期
- date:只能保存年月日
- time:只能保存时分秒
- datetime:年月日时分秒,默认值为null,最大值9999-12-31
- timestamp:时间戳,年月日时分秒,默认值为当前系统时间,最大时间2038-1-19
create table t_date(t1 date,t2 time,t3 datetime,t4 timestamp);
insert into t_date values('2019-03-20',null,null,null);
insert into t_date values(null,'16:33:30','2019-03-22 15:00:05',null);
导入*.sql文件
-
windows系统 把文件解压出来 把tables.sql文件放到C盘根目录 source c:/tables.sql;
-
linux系统 把文件解压出来 把tables.sql文件放到桌面 source /home/soft01/桌面/tables.sql;
show tables; 如果出现乱码 执行以下代码 set names gbk;