数据库相关SQL
操作 | 格式 |
---|---|
1. 查看所有数据库 | show databases; |
2.创建数据库 | create database 数据库名; |
3.查看数据库详情 | show create database 数据库名; |
4.创建数据库指定字符集 | create database 数据库名 character set utf8/gbk; |
5.删除数据库 | drop database 数据库名; |
6.使用数据库 | use 数据库名; |
表相关的SQL
操作 | 格式 |
---|---|
1.创建表 | create table 表名(字段名 字段类型,… ...); |
2.查询所有表 | show tables; |
3.查看表详情 | show create table 表名; |
4.引擎 | create table 表名(… … ) engine=myisam/innodb; |
5.查看表字段信息 | desc 表名; |
6.删除表 | drop table 表名; |
7.修改表名 | rename table 表名 to 新表名; |
8.修改表引擎和字符集 | alter table 表名 engine=*** charset=***; |
9.添加表字段 | alter table 表名 add 字段 字段类型 空/first/after 字段 |
10.删除表字段 | alter table 表名 drop 字段名称; |
11.修改表字段的名称和类型 | alter table 表名 change 字段 新字段 新字段类型; |
12.修改表字段的类型和位置 | alter table 表名 modify 字段 新类型 first/after 字段; |
数据相关SQL
操作 | 格式 |
---|---|
1.插入数据 | |
全表插入格式 | insert into 表名 values (值1,值2,值3); (所有值都得有) |
指定位置插入 | insert into 表名 (字段1,字段2) values (值1,值2); |
2.数据查询 | |
查询所有字段 | select*from 表名; |
查询部分字段 | select 字段, … from 表名; |
按条件查询字段 | select 字段,… from 表名 where 字段的条件; |
3.修改数据 | update 表名 set 字段=值where 字段的条件; |
4.删除数据 | delete from 表名 where 字段的条件; |
主键约束
- 什么是主键:用于表示数据唯一性的字段称为主键
- 约束:是给表字段添加的限制条件
- 主键约束:限制主键字段的值 唯一并且非空
- 格式: create table t1(id int primary key,name varchar(10));
- 测试:
insert into t1 values(1,'悟空'); //成功
insert into t1 values(1,'八戒'); //失败 不能重复
insert into t1 values(null,'沙僧'); //失败 不能为null
insert into t1 values(2,'玉帝哥哥');//成功
主键约束+自增 primary key auto_increment
- 格式: create table t2(id int primary key auto_increment,name varchar(10));
- 测试:
insert into t2 values(null,'悟空'); 1
insert into t2 (name) value ('八戒'); 2
insert into t2 values(10,'小龙女'); 10
insert into t2 values(null,'白龙马'); 11
delete from t2 where id>9;
insert into t2 values(null,'黑熊怪'); 12
delete from t2;
insert into t2 values(null,'奔波霸'); 13
自增数值只增不减,从历史最大值基础上+1
truncate
- 格式: truncate table t2;
- 删除表 并且创建新表,自增数值清零
注释 comment
- 格式: create table t3(id int primary key auto_increment comment ‘这是主键’,name varchar(10) comment ‘这是名字’);
- 查看注释: show create table t3;
`和’区别:
` :是修饰表名和字段名的 ,可以省略 create tablet4(id` int);
’ : 是用于修饰字符串的
数据冗余
如果表设计不够合理,当数据量增多时出现的大量重复数据,这种现象称为数据冗余,通过拆分表的方式解决冗余问题
外键: 用于建立关系的字段称为外键
事务
-
事务是数据库中执行同一业务多条sql语句的工作单元 可以保证多条sql语句要么全部执行成功,要么全部执行失败。
-
创建用户表: create table user(id int,name varchar(10),money int,state varchar(5));
-
插入数据: insert into user values(1,‘超人’,50,‘冻结’),(2,‘蝙蝠侠’,2000,‘正常’);
**例子:**
蝙蝠侠给超人转账200块钱 无事务保护:
update user set money=money-200 where id=2 and state='正常';
update user set money=money+200 where id=1 and state='正常';
有事务保护:转账失败
begin; //开启事务
update user set money=money-200 where id=2 and state='正常';
update user set money=money+200 where id=1 and state='正常';
rollback;//回滚
有事务保护: 转账成功
insert into user values(3,'海王',10,'正常');-蝙蝠侠给海王转账500
begin;
update user set money=money-500 where id=2 and state='正常';
update user set money=money+500 where id=3 and state='正常';
commit;//提交
保存回滚点:savepoint 标识
begin;
update user set money=money-10 whereid=2;
savepoint s1;
update user set money=money-50 where id=2;
update user set money=money-100 where id=2;
rollback to s1;
SQL分类
- DDL Data Definition Language 数据定义语言
- 包括: create,drop,alter,truncate
- 不支持事务
- DML Data Manipulation Language 数据操作语言
- 包括: insert,update,delete,select(DQL)
- 支持事务 select和事务没有关系
- DQL Data Query Language 数据查询语言(重要!)
- 只包括select
- TCL Transaction Control Language 事务控制语言
- 包括:begin 、 rollback、 commit、 savepoint s1 、rollback to s1
- DCL Data Control Language 数据控制语言
- 涉及分配用户权限相关的SQL
数据库的数据类型
整数
- int对应java里面的int bigint对应java中的long
- int(m) m代表显示长度 需要结合zerofill使用
create table t_int(id int,age int(10) zerofill);
insert into t_intvalues(1,18);
select * from t_int;
浮点数
- double(m,d) m代表总长度 d代表小数长度 76.234 m=5 d=3
- decimal超高精度浮点数,涉及超高精度运算时使用
字符串
- char(m): 不可变长度字符串 m=10 “abc” 所占长度为10 ,执行效率略高
- varchar(m):可变长度字符串 m=10 “abc” 所占长度3 好处是节省空间 最大长度为65535,但是建议长度不要超过255 超过255建议使用text
- text(m):可变长度字符串 m=10 “abc” 所占长度3 最大长度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-1-15',null,null,null);
insert into t_date values(null,'16:57:38',
'2018-10-22 20:18:30',null);