DDL(Data Definition Language)数据库定义语言:主要作用是对数据库和表的管理,
查是属于DQL(Data Query Language ,数据查询语言)部分
增、改、删属于DML(Data Manipulation Language, 数据操纵语言)
一、表的管理:
1、创建表:
语法:
create table 表名(
字段名 数据类型【(数据的长度) 约束】,
字段名 数据类型【(数据的长度) 约束】,
字段名 数据类型【(数据的长度) 约束】,
...... #最后一个不需要逗号
);
MySQL数据库中的常用数据类型:
数值型,字符型,日期时间类型
1)数值型
整数
1.设置无符号和有符号 unsigned
t1 int; # 默认有符号
t2 int unsigned # 无符号
2. 插入的数值超出了范围,会溢出报错,真正进去的数值是临界值
3. zerofill 零填充
t1 int(6) zerofill ;
作用是实际值达不到定义长度时,前面用0补足
小数
1. 浮点型:float(M,D) double(M,D);
2. 定点型:decimal(M,D);
M表示整数部分和小数部分合起来的总位数
D表示小数点后保留位数
3. 不设置后面的M和D值,float和double会根据插入的实际值来确定精
度,decimal默认(10,0)表示总体10位数,小数位是0;
4. 如果要求小数点后的高精度需求的时候,建议用decimal
2)字符型
blob类型,用来存放较大的二进制文件,比如图片
char(M)和varchar(M),里边的M值:表示能存到表格里的最大字符数
char和varchar的区别
char给的空间是固定的,char效率高
varchar根据实际情况给存储的空间,varchar效率低
3)日期时间类型
日期型的数值要用单引号包裹起来
timestamp时间戳会受到时区的影响:set time_zone='+9:00'; #设置时区
create table student(
no int(11) primary key AUTO_INCREMENT,(约束:非空主键 自增长)
name varchar(20),
age varchar(1) not null default 20
);
2、表的修改:
1)修改字段名
ALTER TABLE 表名 CHANGE 原列名 新列名 数据类型(长度);
2)修改字段的数据类型或约束
ALTER TABLE 表名 MODIFY 列名 新类型(长度);
3)添加新字段
ALTER TABLE 表名 ADD 列名 类型(长度);
或者同时添加多列
ALTER TABLE 表名
ADD(
列名 类型(长度),
...
列名 类型(长度) # 最后一个不需要逗号
);
4)删除字段
ALTER TABLE 表名 DROP COLUMN 列名;
5)修改表名
ALTER TABLE 表名 RENAME TO 新表名;
3、表的删除
语法:
drop table if exists 表名;
4、表的复制
1)仅复制表的结构
create table 新建表名 like 要被复制的表名;
2)复制表的结构和数据
create table 新建表名
select * from 要被复制的表名;
3)只复制表结构和部分数据
create table 新建表名
select * from 要被复制的表名 where 条件;
4)只复制部分字段,且不要数据
create table 新建表名
select 需要的列 from 要被复制的表名 where 0;
二、新增记录
语法一:
insert into 表名(字段1,字段2,...) values (对应字段1的值,对应字段2点值,...) ;
注意:
1)insert记录时候要保持插入的记录值类型和表结构设计的类型一致,除了数字类型外,字符串型varchar和日期类型datetime等都需要用单引号包裹起来
2)不可为空的字段必须插入记录值,可以为null的列在插入的时候可以不写
3)字段列表和values后面的值必须前后一一对应(内容一致,数量一致,数据类型一致)
语法二(了解):
insert into 表名
set 字段名1=值,字段名2=值,...;
比较两种语法:
1)语法一可以一次性插入多条记录值,语法二不支持
insert into
表名(字段1,字段2,...)
values
(对应字段1的值,对应字段2点值,...),
(对应字段1的值,对应字段2点值,...),
(...) ;
2)语法一可以支持子查询,语法二不支持
insert into
表名(字段1,字段2,...)
select
对应字段1的值,对应字段2点值,...
from 表名
where 条件 ;
三、修改记录
1)修改单表记录
语法:
update 表名 set 字段名1=新的值, 字段名2=新值 , ... where 条件 ;
2)修改多表记录
语法:
update 表1 别名,表2 别名
set 字段1=值 , ...
where 连接条件 and 筛选条件;
或者
update 表1 别名
[连接类型] join 表2 别名
on 连接条件
set 字段1=值 , ...
where 筛选条件;
案例:修改没有年龄记录的同学的对应年龄的编号都为3
update students s
left join ages a
on s.age_id=a.id
set s.age_id=3
where a.age is null;
四、删除记录
1)单表的删除
语法:
delete from 表名 where 要删除的记录筛选条件;
2)多表的删除
语法:
delete 别名1,别名2
from 表1 别名1,表2 别名2
where 连接条件 and 筛选条件 ;
或者
delete 别名1,别名2
from 表1 别名1
[连接类型] join 表2 别名2
on 连接条件
where 筛选条件 ;
注意:如果只删表1的就只写别名1,如果两个表的记录都删就别名1,别名2)
3)删除整个表的全部记录,保留表的结构
delete from 表名;
或者
truncate table 表名;
delete和truncate区别:
1)delete可以加where条件
2)truncate删除没有返回值,delete删除有返回值
3)truncate删除不能回滚,delete删除可以回滚
4)假如要删除的表上有自增长字段,如果用delete删除,再插入数据,自增长从断点值开始,用truncate删除,再插入数据,从1开始;
5)truncate效率高
案例:删除李斯的年龄信息
delete a from students s
inner join ages a
on s.age_id = a.id
where s.name='李斯';
知识点整理