必备: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