建表语法
语法:
思路:
表名
列名/字段名
数据类型
约束: 对列数据的格式要求.
例子: 性别: 要求只能选择 '男' '女' '其他'
语法:
create table 表名(
列名1 数据类型 [约束],
列名2 数据类型,
列名3 数据类型 [约束],
...
列n 数据类型
);
删除表语法:
删除表:--把表的数据和列名全删
drop table 表名;
删除表中数据:--只删除数据,且是逐行删除
delete from 表名;
数据类型
1.数字
number(n) 数字类型,最大长度为n
number(10).
number(n,m) 数字类型,数字最大长度为n,小数部分为m
number(10,2)
integer 相当于 number(38)
2.字符串
char(n) 字符串,长度为n.
char(10) : 'abcde' 不足10位用空白字符填充.
特点:
优点: 数据管理效率高.
缺点: 空白字符浪费大量的空间.
varchar2(n) 字符串,最大长度为n
varchar2(10): 'abcde' 放入后该数据的长度就是5位.
特点:
优点: 节省数据存储空间.
实例:
名字 varchar2(100)
手机号 char(11)
邮箱 varchar2(200)
3.日期
date 日期
约束
1. 主键约束 primary key
含义: 该列的值,唯一+非空
2. 唯一约束: unique
含义: 该列的值是不能重复
应用: 手机号,身份证号
3. 非空约束: not null
含义: 该列的值,必须有值,不能为空.
4. 检查约束
语法: check(约束语法)
手机号: mobile char(11) check(length(mobile)=11)
邮箱: email varchar2(100) check(email like '%@%')
性别: sex number(1) check(sex in (0,1,2))
注释: 1 男 0 女 2 其他
先创建一个表,供后面使用
-- 创建一个员工表: 工号(id) 名字 性别 手机号 邮箱 年龄 家庭住址 出生日期(birth)
create table t_emp(
id number(10) primary key,
name varchar2(100),
age number(3),
sex number(1) check(sex in (0,1,2)), --男 1 女 0 其他 2
mobile char(11),
email varchar2(100),
address varchar2(200),
birth date
);
外键约束
单词:foreign key
语法关键词: references
--## 两张表数据角度无法表示关系
-- 学生表[id,名字,成绩]
create table t_stu(
id number(10) primary key,
stu_name varchar2(50),
score number(4,1)
);
-- 班级表[id,名称]
create table t_class(
id number(10) primary key,
class_name varchar2(100)
);
外键列:
作用: 表明当前表的数据和另一张表数据的关系.
特点:
通过外键关联表的数据.
该列的值,必须来源于另一张表的字段中的已存在的值.
语法:
--##使用外键: 表示关系 -- 学生表[id,名字,成绩] create table t_stu( id number(10) primary key, stu_name varchar2(50), score number(4,1), class_id number(10) references t_class(id) -- 该列的值指向了班级表中id列的值.[该列的值,必须存在于班级表中id列中] ); -- 班级表[id,名称] create table t_class( id number(10) primary key, class_name varchar2(100) );
增删改SQL
[重点]
SQL分类
DQL: Data query Language 数据查询语言
功能: 查询数据 select
DML: Data Manipulation language 数据操纵语言添加insert /修改update /删除delete 数据
添加数据
关键词: insert
语法规则: 表 字段 值
insert into 表名(字段1,列名2,字段3,....) values(值1,值2,值3,...); 注意: 表名后的字段顺序,必须和values后的值的顺序保持一致.
向t_emp表中添加一条数据
--添加 100 李四 18 1 12345678901 lisi@qq.com insert into t_emp(id,name,age,sex,mobile,email) values(100,'李四',18,1,'12345678901','lisi@qq.com');
注意:
表名后的字段顺序,必须和values后的值的顺序保持一致.
表名后的列名可以省略,oracle默认会按照表的字段的顺序,全部罗列出来.
--添加 100 李四 18 1 12345678901 lisi@qq.com 河南 to_date('1999-9-9','yyyy-mm-dd') insert into t_emp values(100,'李四',18,1,'12345678901','lisi@qq.com','河南',sysdate);
修改数据
关键词: update
语法规则: update 表名 set 列名=新值,列名=值,列名=值 [where 条件]
-- 修改100号员工的年龄为22,手机号 '15533349688' ?
update t_emp set age = 22,mobile='15533349688' where id = 100;
删除数据
关键词: delete
细节: 逐行删除数据.
语法规则: delete from 表 [where 条件]
-- 删除工号为101号员工?
delete from t_emp where id = 101;
补充删除全表:
1.如果delete没有wehere,会导致全表数据删除
逐行删除全表数据: delete from 表名
特点: 效率低.
2.表截断
本质: 直接将存储表数据部分的空间清除,只保留表头字段一行,进而删除数据[非DML]
truncate table 表名
特点: 效率远远高于delete.