必备:DDL全称-**Data Defination Language**
数据定义语言:
create 、drop 、alter
1、创建表create
create table 表名(
列名 数据类型,
列名 数据类型,
列名 数据类型,
....
....
)
2、修改表 alter
-- 1. 添加一个新的列,用户籍贯 hometown
alter table customer add cust_hometown varchar(50)
-- 2. 将用户名数据类型 改成 varchar(100)
alter table customer modify cust_name varchar(100)
-- 3. 删除用户个人介绍cust_profile这一列
alter table cutstomer drop cust_profile
-- 4. 将表名改为note_customer
rename table customer to note_customer
3、删除表drop
drop table student;
有关的删除记录
-- 删除10部门
delete from dept where deptno = 10
-- 删除失败,原因在于在emp表中有在10部门的员工,所以不能删除
delete from dept where deptno = 50
-- 删除成功,原因在于在其他表中没有在10部门的员工,所以可以删除
--删除时的级联操作
--删除部门数据时候,对关联表emp 员工表 有什么影响?
emp 表中有外键 dept(deptno)
示例: 在emp表中有在10部门的员工,现在要删除10部门
(1)NO ACTION :不允许删除,也不报错,不提示
(2) RESTRICT : 不允许删除,会报错,提示在其他表中找到该记录
(3) SET NULL :允许删除,把emp中的员工所在部门编号设置为null 【前提:emp(deptno)允许为null】
(4) CASACDE : 级联删除,删除了10部门,在10部门的员工记录也删除了
约束 constraint
作用:为了保证数据的完整性于正确性,表中数据必须有约束
1、主键约束 primary key
用于唯一识别一条记录的字段(该主键可以是一个列,也可以是多个列-联合主键)
特征:
(1)、唯一性
(2)、非空性
identifier 身份识别
2、唯一性约束 unique
列的值 是唯一的
3、非空约束not null
列的值 不能为空
4、外键约束foreign key
b表中的某列 数据 来源于a 表中的某一列 —-胡老师讲的外键,关联
5、实战代码快
-- 1. customer : 必要约束,
数据的准确性、完整性
create table customer(
cust_id int primary key, -- 主键
cust_name varchar(20) not null, -- 非空
cust_gender char default 'M' COMMENT'用户性别',
cust_telno bigint unique commit'用户手机号',
cust_pwd varchar(50) not null commit'用户密码',
cust_live_city varchar(50) commit'用户居住城市',
cust_birthday date commit'用户出生日期',
cust_profile varchar(255) commit'用户简介',
cust_main_img varchar(255) -- 实际存放的是 图片的路径
constraint
)
-- 2. 用户的收件地址表 receive_address : 必要约束
create table receive_address(
rece_id int primary key, -- commit '主键id',
rece_name varchar(20) not null, -- commit '收货人',
rece_telno bigint unique, -- commit '收货人手机号',
rece_resss varchar(50) -- commit '收货人地址'
constraint fk_address_cutomer foreign key(customer_id) references mycustomer(cust_id)
)
-- 表中各加3条数据
insert into receive_address values(10,'张三',18888888888,'江苏省连云港'),(11,'李四',18888888887,'江苏省苏州'),(12,'王五',18888888886,'江苏省张家港')
主键约束:primary key
非空: not null
唯一性:unique
检查约束:check
外键约束:foreign key
主键自增:auto_increment
课外小知识
订单表设计案例
-- -----------------------订单表设计示例------------------------------------
(1)用户表 :customer
(2)商品表 :product
(3) 收件地址: receive_address
(4)订单表: myorder
(5)订单详情表:order_detail
-- 用户表 :customer
create table customer(
cust_id int comment'用户id',
cust_name varchar(20) comment'用户名称',
primary key (cust_id)
)
-- 商品表 product
create table product(
pro_id int auto_increment comment'商品id',
pro_name varchar(25) unique not null comment'商品名称',
pro_price float comment'商品价格',
pro_status int, -- 0 : 有效,1 无效
primary key(pro_id)
)
-- 收件地址
create table recevice_address(
addr_id int comment '收件地址id',
cust_id int comment'用户id',
add_province varchar(50) comment '收件省份',
add_city varchar(50) comment '收件城市',
add_area varchar(50) comment '收件区',
add_details varchar(200) comment '收件详细地址' ,
addr_status int ,
primary key(addr_id),
constraint fk_address_customer foreign key(cust_id) references customer(cust_id)
)
-- 订单表: myorder
create table myorder(
order_id int auto_increment comment'订单id',
order_time date comment'商品下单日期',
cust_id int comment'用户id',
address_id int comment '收件地址id',
order_status int, -- 0 : 有效,1 无效
primary key(order_id),
constraint fk_product_customer foreign key(cust_id) references customer(cust_id) ,
constraint fk_product_address foreign key(address_id) references recevice_address(addr_id)
)
-- 订单详情表:order_detail
create table order_detail(
order_id int comment'订单id',
pro_id int comment'商品id',
quality int comment '商品数量',
primary key(order_id,pro_id), -- 联合主键
constraint fk_detail_order foreign key(order_id) references myorder(order_id),
constraint fk_detail_product foreign key(pro_id) references product(pro_id)
)
课堂练习
-- DDL:数据定义语言 Date Definition Language
对表的结构修改:创建表create,修改表结构alter(添加一列,删除一列,列重命名,数据类型修改)
删除整张表drop
char(1):M,F
char(20) :定厂
varchar(20):不定长
-- variable变量
个人简历:。。。。。。。。(纯文本字符) text ----在Java中而是String
二进制存储---blob
游记的内容(字符文本+图片,表情,视频,音乐)--longblob
评论(字符文本+图片,表情) --blob
-- 创建数据库 名:customer
create table customer(
cust_id int,
cust_name varchar(20),
cust_gender char,
cust_live_city varchar(50),
cust_birthday date,
cust_profile varchar(255),
cust_main_img varchar(255)
-- 实际存放的是 图片的路径
)
-- 插件直接转换 :custid,custName,custGender
-- 1. 添加一个新的列,用户籍贯 hometown
alter table customer add cust_hometown varchar(50)
-- 2. 将用户名数据类型 改成 varchar(100)
alter table customer modify cust_name varchar(100)
-- 3. 删除用户个人介绍cust_profile这一列
alter table cutstomer drop cust_profile
-- 4. 将表名改为note_customer
rename table customer to note_customer
-- 1. customer : 必要约束,
数据的准确性、完整性
create table customer(
cust_id int primary key, -- 主键
cust_name varchar(20) not null, -- 非空
cust_gender char default 'M' COMMENT'用户性别',
cust_telno bigint unique commit'用户手机号',
cust_pwd varchar(50) not null commit'用户密码',
cust_live_city varchar(50) commit'用户居住城市',
cust_birthday date commit'用户出生日期',
cust_profile varchar(255) commit'用户简介',
cust_main_img varchar(255) -- 实际存放的是 图片的路径
constraint
)
-- 2. 用户的收件地址表 receive_address : 必要约束
create table receive_address(
rece_id int primary key, -- commit '主键id',
rece_name varchar(20) not null, -- commit '收货人',
rece_telno bigint unique, -- commit '收货人手机号',
rece_resss varchar(50) -- commit '收货人地址'
constraint fk_address_cutomer foreign key(customer_id) references mycustomer(cust_id)
)
-- 表中各加3条数据
insert into receive_address values(10,'张三',18888888888,'江苏省连云港'),(11,'李四',18888888887,'江苏省苏州'),(12,'王五',18888888886,'江苏省张家港')
主键约束:primary key
非空: not null
唯一性:unique
检查约束:check
外键约束:foreign key
主键自增:auto_increment