SQL必知必会--基础篇(二)
接上一篇SQL必知必会--基础篇(一),继续对基础知识进行总结回顾。
本篇包含的知识如图:
假设有两张表:student(sno,name,sex,age,class,addr) ,sno为主键
grade(id,sno,Math,Chinses,English),id为主键
以下sql语句,基于mysql数据库编写
一、创建和操纵表
1.创建和操纵数据库
create database moon; # 创建名为 moon 的数据库
use moon; # 使用 moon 数据库
drop database moon; # 删除 moon 数据库
2.创建和操纵表
(1)创建表:
craete table student( # 表名 student
sno int not null, # 学号 int型 不能为空
name varchar(10) not null, # 姓名 字符型 不能为空
sex varchar(4) not null, # 性别 字符型 不能为空
age int not null default 10, # 年龄 int型 不能为空 默认值为10
class varchar(20) not null, # 班级 字符型 不能为空
addr varchar(40), # 地址 字符型 可以为空
primary key (sno) # 设置学号sno为主键
); #注意 最后一条语句,primary key (sno)后面 没有逗号
基本创建语法如上,更多关于创建表的约束会在稍后的中级篇详细解释;
(2)更新表(结构):
添加一个新列
first:添加的列置于最前面 after:添加的列置于指定列后面 不写first或者after的,默认置于最后一列
PS:多列的添加不能指定位置关系,只能默认添加到最下面
alter table student
add phone int not null; # 给student表增加名为phone的列,设置为int型,不允许为空
alter table student
add tel int not null after class; # 给student表增加名为tel的列,设置为int型,不允许为空,放在class列后面
alter table student
add hobby varchar(20) first; # 给student列增加名为hobby的列,设置为字符型,放在第一列
删除已有的列
alter table student
drop phone; # 删除 student 表的 phone 列
alter table student
drop class,drop sex; # 删除 student 表的 class 和 sex 两列
修改已有列的定义:
alter table student
change addr address varchar(50) not null; # 将addr列名称 改为 address,类型改为varchar(50)
alter table student
change name name varchat(10) not null first; # 将name列 位置改为 第一列
(3)重命名表
alter table student
rename new_student; # 将student表重命名为 new_student 尽量不要随意修改表名
(4)删除表
drop table student; # 删除student 表
删除表没有确认,也不能撤销,执行将永久删除该表。
二、插入数据(insert into)
1.插入完整的行
insert into grade
values(1,001,80,70,90); # 不指定插入数据列名,只提供被插入的值
insert into grade(id,sno,Math,Chinses,English)
values(2,002,78,89,85); # 指定列名及被插入的值
2.插入部分值
可以不提供值的列:定义为允许null值的列;有默认值的列
insert into grade(id,sno,Math)
values(3,003,88);
3.插入检索出的数据
insert into grade(id,sno,Math,Chinses,English)
select id,sno,Math,Chinses,English
from old_student; # 将old_student表中检索出的数据 插入student表中
列名不一定要匹配,它使用的是列的相对位置,第一列对应填充第一列。
PS:insert 通常只插入一行,要想插入多行,必须执行多个insert语句;insert select 是个例外,它可以用一个insert插入多行,不管select 语句返回多少行,都会被insert插入.
4.从一个表复制到另一个新表(select into)
select * into new_student from student; # 将student表的所有数据复制插入到new_student表
PS:区别 insert select 与select into:前者插入数据,后者导出数据
三、更新数据(update)
如果不写where子句,会更新整个表
update grade
set Math = 90,English = 78
where id = 2; # 更新id为2 的数学和英语成绩
四、删除数据(delete)
delete 删除整行而不是列
delete from grade
where id =1; # 删除id为1的行
delete * from grade; # 删除grade表中所有数据
delete from grade; # 删除grade表中所有数据
PS:SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别
drop:
drop test; //删除表test,并释放空间,将test删除的一干二净
truncate:
truncate test; //删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在
delete:
delete from test where age=30 AND country='US'; //删除表test中年龄等于30的且国家为US的数据
delete from test 或者 delete * from test; //仅删除表test内的所有内容,保留表的定义,不释放空间