SQL语句格式要求:
以;结尾
不区分大小写
可以包含空格和换行
查询所有数据库
- show databases;
创建数据库
- create database 数据库库名 charset = utf8/gbk;
查看数据库信息
- show create database 数据库名;
显示的是创建该数据库时所设置的一些信息
删除数据库
- drop database 数据库名;
使用数据库,在执行表和数据相关的SQL语句之前必须使用了某一个数据库,否则会报错,
语句为 use 数据库名 当使用一些图形化工具时,可以直接点击对应的数据库进行连接.
查询某一个数据库所有的表
- show tables;
创建表
- create table 表名 (字段1 类型, 字段2 类型.....)charset=utf8/gbk;
create table student(name varchar(50),chinese int,math int,english int)charset=gbk;
查看表信息
- show create table 表名;
创建表时的信息
删除表
- drop table 表名;
修改表名
- rename table 原名 to 新名;
查看表字段
- desc 表名; desc = description 描述
注:查看结果为表段的名字以及数据类型,默认要求之类的一些信息
添加表字段
- alter table 表名 add 字段名 类型; 默认加在表字段的最后一个
- alter table 表名 add 字段名 类型 first; 添加到第一个
- alter table 表名 add 字段名 类型 after xxx; 在xxx字段后面添加
删除表字段
- alter table 表名 drop 字段名;
修改表字段
- alter table 表名 change 原名 新名 新类型;
数据表的相关操作
表中插入数据
- insert into 表名 values (值1,值2,......); 全表插入格式,就是表的所有字段都会添加数据
注:一般不推荐使用,因为要输入所有的字段的对应信息,不能为空,否则报错
- insert into 表名(字段1名,字段2名) values (值1,值2);
注:推荐使用这种,可以插入指定字段的信息,未填写部分会写默认值
- 批量插入数据: insert into 表名 (字段1名,字段2名...) values (值1,值2....), (值1,值2....), (值1,值2....)...
查询表数据
- select 字段信息 from 表名 where 条件; 例如
select name from person; select name,age from person; 当字段信息换为 * 时,去掉后面的where查询的就是表的所有信息 select * from person; select name from person where age=28; select * from person where name='刘德华';
修改数据
- update 表名 set 表字段1 =值,表字段2=值 where 条件;
update person set name="杰瑞" where name='Jerry';
可以使用两个不同的表字段
update person set age=50 where name="aa";
删除数据
- delete from 表名 where 条件;
- 注:delete和truncate原理不同,delete只删除内容,而truncate类似于drop table,可以理解为是将整个表删除,然后再创建该表.
delete from person where age=88;
delete from person where age>10;
数据类型
整数: int(m) 和 bigint(m) , bigint等效java中的long, m代表显示长度,举例m=5,存18 查询到 00018 , 需要补零的话必须使用zerofill关键字
create table t1(age int(5) zerofill);
insert into t1 values(18);
select * from t1;
浮点数: double(m,d) m代表总长度,d代表小数长度 54.432 m=5 d=3
create table t2(price double(5,3));
insert into t2 values(45.2312312123);
insert into t2 values(455.231); //报错
字符串
- char(m): 固定长度字符串 , m=5 存abc 占5个字符长度 , 应用场景: 当存储长度固定时,比如存储性别char(1) , 最大字符长度255
- varchar(m):可变长度字符串, m=5 存abc 占3个字符长度, 最大值65535但是建议保存255以内长度的数据
- text(m):可变长度字符串, 最大值65535 建议保存长度大于255的数据
日期
- date: 只能保存年月日
- time: 只能保存时分秒
- datetime: 保存年月日时分秒, 最大值9999-12-31, 默认值为null
- timestamp(时间戳:保存1970年1月1日到现在的毫秒数):保存年月日时分秒, 最大值2038-1-19 , 默认值为当前系统时间(当赋值为null时触发默认值)
create table t_date(t1 date,t2 time,t3 datetime,t4 timestamp);
insert into t_date values("2022-06-09",null,null,null);
insert into t_date values(null,"16:16:20","2011-11-22 10:20:30",null);
select * from t_date;
Mysql约束(constraint)
概述:表中数据的限制条件,表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,比如用户表中有些列的值不能为空,或者不能重复
分类
-
主键约束(primary key)
-
自增长约束(auto_increment)
-
非空约束(not null)
-
唯一性约束(unique)
-
默认约束(default)
-
零填充约束(zerofill)
-
外键约束(foreign key)
主键约束
-
是一个列或者多个列的组合,其值能够唯一地表示表中的每一行,方便查找,
-
主键约束相当于唯一约束+非空约束的组合,主键约束不允许重复,也不允许出现空值
-
每个表最多只能有一个主键
-
当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引
添加单列主键语法1
create table 表名(
...
<字段名> <数据类型> primary key
...
)
具体实现
create table employee(
eid int primary key,
name VARCHAR(20),
deptId int,
salary double
);
添加单列主键语法2
create table 表名(
....
[constraint <约束名>] primary key [字段名]
)
具体实现
create table employee(
eid int ,
name VARCHAR(20),
deptId int,
salary double
constraint pk1 primary key(id)
);
添加联合主键语法
create table 表名(
...
primary key (字段1,字段2,....,字段n)
)
具体实现
create table employee(
name VARCHAR(20),
deptId int,
salary double
primary key (name,deptId)
);
注:当主键由多个字段组成时,不能直接在字段名后面声明主键约束,一张表只能有一个主键,联合主键也是一个主键,只要组合的表字段信息不完全相同就可以,且联合主键的格列均不能为null
通过修改表结构添加主键
create table 表名(
...
);
alter table <表名> add primary key (字段列表);
具体实现
create table employee(
eid int,
name VARCHAR(20),
deptId int,
salary double
);
alter table <表名> add primary key (eid);
添加联合主键
create table employee(
eid int,
name VARCHAR(20),
deptId int,
salary double
);
alter table <表名> add primary key (name,deptId);
删除主键约束
alter table <表名> drop primary key;
实现
删除单列主键
alter table employee drop table primary key;
删除联合主键
alter table employee drop table primary key;
自增长约束
概述:当主键定义为自增长后,主键的值不需要用户输入数据,而是由数据库系统根据定义自动赋值,通过auto_increment属性来实现主键自增长
语法
字段名 数据类型 auto_increment
实现
create table user(
id int primary key auto increment,
name varchar(20)
);
可以指定表的自增初始值
语法1
create table user(
id int primary key auto increment,
name varchar(20)
)auto_increment = 100;
语法2
create table user(
id int primary key auto increment,
name varchar(20)
);
alter table user auto_increment = 100;
注:delete数据之后自动增长从断点开始,truncate数据之后自动增长从默认值开始
非空约束
概述:对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错
语法1 <字段名><数据类型> not null
语法2 alter table 表名 modify 字段 类型 not null;
实现1
create table user(
id int,
name varchar(20) not null,
address varchar(20) not null
);
实现2
create table user(
id int,
name varchar(20)
address varchar(20)
);
alter table user modify name varchar(20) not null;
alter table user modify address varchar(20) not null;
删除非空约束
alter table user modify name varchar(20);
alter table user modify address varchar(20) ;
唯一约束
概述:所有记录中字段的值不能重复出现
语法1 <字段名><数据类型> unique
语法2 alter table 表名 add constraint 约束名 unique(列);
实现
create table user(
id int,
name varchar(20) ,
phone_number varchar(20) unique
);
默认约束
概述:用来指定某列的默认值
语法1 <字段名> <数据类型> default <默认值>
语法2 alter table 表名 modify 列名 类型 default 默认值;
实现
create table user(
id int,
name varchar(20) ,
address varchar(20) default '北京'
);
零填充约束
概述:如果当前字段的值得长度小于定义的长度时,会在该值的前面补上相应的0, 当使用zerofill时,默认会自动加unsigned属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128~+127,无符号会变成0~266.