MySql学习笔记三
4.DML(数据操作语言)
插入:insert
修改:update
删除:delete
4.1.插入语句
语法:
insert into 表名 (列名1,列名2,...) values (值1,值2,...), (值1,值2,...)...
不可以为NULL的列必须插入值,可以为NULL的值要想插入NULL值,必须在values里写NULL
也可以在字段列表里不写该字段,当新增时该字段的值就为NULL
列的顺序时可以随便调换的,列数和值的个数必须一致
插入整条数据时可以省去列名
insert into 表名 values (值1,值2...), (值1,值2...)...
values里面必须要插入所有字段的值,并且要按照字段的排列顺序排列
可以嵌套子查询:
insert into 表名 (值1,值2...) 子查询语句
还有第二种方法可以插入数据,语法如下:
insert into 表名
set 字段名1 = 字段值1, 字段名2 = 字段值2, 字段名3 = 字段值3, ...;
两种方法对比:
插入多行 | 子查询 | |
---|---|---|
value | √ | √ |
set | X | X |
4.2.修改语句
语法:
修改单表的记录
update 表名 set 列1=值1, 列2=值2, ... where 筛选条件;
修改单表记录
sql92语法:
update 表1 别名, 表2 别名
set 列1=值1, 列2=值2, ...
where 连接条件
AND 筛选条件
sql99语法:
update 表1 别名
inner|right|left join 表2 别名
on 连接条件
set 列1=值1, 列2=值2, ...
where 筛选条件
4.3.删除语句
语法
单表删除:
delete from 表名 where 筛选条件;
删除整张表
truncate table 表名;
多表删除:
sql92语法
delete
delete 要删除表的别名
from 表1 别名, 表二 别名 ......
where 连接条件
and 筛选条件
sql99语法
delete 要删除表的别名
from 表1 别名
连接方式 表二 别名
...
where 筛选条件;
delete和truncate对比
使用where | 效率 | 自增 | 返回值 | 事务 | |
---|---|---|---|---|---|
delete | √ | 比truncate低 | 从断点点开始 | 返回受影响的行数 | 可以回滚 |
truncate | X | 比delete高 | 从头开始 | 没有返回值 | 不能回滚 |
5.DDL(数据定义语言)
库和表的管理和操作
创建:create
删除:drop
修改:alter
5.1.库的管理
5.1.1.创建
语法:
create database (if not exists) 库名;
if not exists是如果不存在才创建
通用写法:
drop database if exists 库名;
create database 库名;
5.1.2.修改
更改库的字符集
alter database 库名 character set 字符集名;
5.1.3.删除
drop database 库名;
5.2.表的管理
5.2.1.创建
语法:
create table 表名{
列名 列的类型(长度) (约束),
列名 列的类型(长度) (约束),
列名 列的类型(长度) (约束),
...
列名 列的类型(长度) (约束)
}
通用写法:
drop table if exists 表名;
create table 表名{
列名 列的类型(长度) (约束),
列名 列的类型(长度) (约束),
列名 列的类型(长度) (约束),
...
列名 列的类型(长度) (约束)
}
5.2.2.修改
修改列名:
alter table 表名 change (column) 旧列名 新列名 列的类型;
修改列的类型或约束:
alter table 表名 modify column 列名 新类型 约束;
添加新列
alter table 表名 add column 新列名 列的类型 约束;
删除列
alter table 表名 drop column 列名;
修改表名
alter table 表名 rename to 新表名;
5.2.3.删除
语法:
drop table (if exists)表名;
5.2.4.复制
仅仅复制表的结构
create table 新表名 like 要复制的表名
复制表的结构+数据
create table 新表名
select 要复制的字段 from 要复制的表名
(where 筛选条件);
仅仅复制表的部分结构
create table 新表名
select 要复制的字段 from 要复制的表名
where 恒不成立的筛选条件 (例如 11 = 2 或者 0);