必备:DDL全称-**Data Defination Language**

数据定义语言:

create 、drop 、alter

1、创建表create

  1. create table 表名(
  2. 列名 数据类型,
  3. 列名 数据类型,
  4. 列名 数据类型,
  5. ....
  6. ....
  7. )

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

课外小知识

订单表设计案例

十一、DDL - 图1十一、DDL - 图2

十一、DDL - 图3十一、DDL - 图4

-- -----------------------订单表设计示例------------------------------------
(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