MySQL Table操作和增删改记录

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='李斯';

知识点整理

猜你喜欢

转载自blog.csdn.net/qq_42402854/article/details/84531734