SQL入门
基本SQL语句
创建数据库
create database cgb2022 default character set utf8;
create database mydb charset=GBK;
删除数据库
drop database cgb2022;
查看某个数据库创建时的信息
show create database mydb;
查看所有的数据库
show databases;
使用数据库
use cgb2022;
修改数据库名
create database '新的数据库名';
rename table '旧的数据库名'.'旧数据库里的表' to '新的数据库名'.'新数据库里的表';
use '新的数据库名';
drop DATABASE '旧的数据库名';
查看所有的表
show tables;
删除表
drop table if exists tb_door;
drop table tb_door;
创建表
create table tb_door(
id int primary key auto_increment,
door_name varchar(100) default '无门市',
tel varchar(50) default '无座机'
);
修改表名
rename talbe user to userinfo
插入列(字段)
alter table tb_door add column money numeric(7,2);
alter table test add column tel varchar(11) first;
alter table tb_door add column hiredate date after door_name;
删除列(字段)
alter table tb_door drop column money;
查看表结构
desc tb_door;
查看表创建时的信息
show create table tb_door
插入行记录
insert into tb_door(id,door_name,tel,money) values(null,"永和大王一号店","022-123456",998);
insert into tb_door values(null,"永和大王二号店","022-789456",886);
insert into person(name,age) values(default,22),(阿猫,null),(default,null);
查询表记录
select * from tb_door;
修改表单个记录
update tb_door set tel = 10086 where id = 1;
update person set name ='阿狗',age=6 where name = '阿猫';
删除表单个记录
delete from tb_door where id = 13;
清空单表
delete from Person
truncate table tb_door;
truncate tb_door;
记录排序(正序 从小到大)
select * from tb_door order by money;
倒序(从大到小)
select * from tb_door order by money desc;
查询总数
select count(1) door from tb_door;
批量增加字段
事务
begin;
alter table tb_door add sal numeric(7,2);
alter table tb_door add comm numeric(7,2);
alter table tb_door add hiredate varchar(11);
commit;
修改字段类型
alter table tb_door modify hiredate date;
alter table tb_door change hiredate hiredate date;
alter table tb_door change door_name door_name varchar(100) default '待售';
修改字段名称
注意: 修改字段名称同时必须重新定义 修改后名称的类型
alter table tb_door change comm loc varchar(11) not null;
调整字段顺序
注意: 调整字段顺序同时必须重新定义 字段名称和字段类型
alter table tb_door change loc loc varchar(11) after tel;
alter table test modify id int(10) unsigned auto_increment first;
alter table test add column tel varchar(11) first;
添加注释
alter table tb_door comment "注释..."; -- 为表添加注释 或修改注释
create table test(
id int(11) comment "字段的注释"
)comment = "表的注释";
-- 创建表时给表和字段分别添加注释
alter table test change column id id int(11) primary key auto_increment comment "添加字段的注释"; -- 给字段添加注释 或修改注释
查看注释
show create table tb_door; -- 查看创建表的SQL的全部信息,甚至是表和字段的注释
show full columns from tb_door; -- 查看每一个字段的注释
数据类型
命名规则
- 字段名必须以字母开头,尽量不要使用拼音
- 长度不能超过30个字符(不同数据库,不同版本有所不同)
- 不能使用SQL的保留字,如where,order,group等
- 只能使用如下字符 a-z、A-Z、0-9、$ 等
- Oracle 习惯全大写:USER_NAME;MySQL习惯全小写:user_name
- 多个单词用下划线隔开,而非java语言的驼峰规则
字符
- char
字符串,长度固定,不足使用空格填充,最多容纳2000个字符,char(11) 存储abc,占11位。
查询速度极快但浪费空间。 - varchar
变长字符串,最多容纳4000个字符,varchar(11) 存储abc,只占3位。Oracle varchar2 4000。
查询稍慢,但节省空间。 - 大文本
大量文字(不推荐使用,尽量使用varchar替代)
注:
- 以UTF8 编码计算,一个汉字占3个字节。
- 不同数据库版本长度限制可能会有不同
数字
- tinyint、int 整数类型
- float、double 小数类型
- numeric(5,2) decimal(5,2) 小数类型 案例表示共5位,其中3位整数2位小数
- decimal 和 numeric 表示精确的整数数字
日期
- date 年月日
- time 时分秒
- datetime 年月日和时分秒
- timestamp 时间戳,不是日期,而是从1970年1月1日到指定日期的毫秒数
图片
- blob
二进制数据,可以存放图片、声音、容量 4G。数据库庞大,备份缓慢,这些内容去备份多份价值不大。同时数据库迁移过大,迁移时间过久。
目前主流不会直接存储这样的数据,而只是存储其访问路径,文件则存放在磁盘上
字段约束
-
主键约束
如果为一个列添加 primary key 时,那么这个列就是主键,
主键特点是唯一且不能为空
主键自增策略
当主键为数值类型时,为了方便维护,可以设置主键自增策略 auto_increment -
非空约束
如果为一个列添加了 not null 时,那么这个列的值就不能为空,但可以重复 -
唯一约束
如果为一个列添加了 unique 时,那么这个列的值就必须是唯一的,即不能重复,但可以为空