DDL语法操作
基础cmd窗口命令学习 :
1,数据库登录 mysql -u用户名 -p密码
2,展示数据库 show databases;
3,使用数据库 use 数据库名;
4,查看数据库中的表 show tables;
5, create database 数据库名 创建数据库
6, create table 表名 创建数据表
7, alter database 修改数据库
8, alter TABLE 修改表
9, drop database 删除数据库
10,drop table 删除表格
创建数据库
if not exists表示如果不存在就创建,可以省略
CREATE DATABASE if not exists study use charset utf8mb4;
-- 创建表格,创建表的结构 ,指定表格的列名和列的类型
-- 常见的列的数据类型:
-- 整数 int bigint
-- 小数 decimal
-- 字符串 varchar char
-- 日期 date datetime
-- 文本 text
示例:
create TABLE [if not exists] 表名(
列名 数据类型(长度) 约束,
列名 数据类型(长度) 约束,
列名 数据类型(长度) 约束
) 存储引擎 字符集
一张表其实就是一个物体(对象) ,比如使用表格来存放学生的信息
那么这个学生表中,可以有哪些列名? 学号、姓名、性别、年龄、专业、班级、生日...
描述一个商品,可以有哪些列? 商品名称、价格、生产日期、保质期、商品描述
1字节 8位 :位 (bit):计算机最小存储单位,只有 0/1 两种状态
字节 (Byte):基础存储单位,规定 1 Byte = 8 bit
4字节 32位
2^31-1:C 语言 int 类型,int 占 4 字节(合计 32 个二进制位),它能存储的最大正数是 2的31次方减1。
另:32 位有符号 int 完整取值规则:
32 位里最高 1 位是符号位:0 代表正数、1 代表负数;
剩余 31 位存数值;
正数最大值:2³¹ - 1(十进制 2147483647);
负数最小值:-2³¹(十进制 -2147483648)。
-- varchar可变长度的字符串类型,根据实际的值占用空间
-- char固定长度的字符串类型
-- 练习:创建一个用户表 user
显示表信息
desc student; ——DESC 是 DESCRIBE 的简写,是 MySQL 专用查询表结构的命令;
desc student = 查看 student 表的完整字段结构。
-- 使用alter修改表结构
alter table 表名 add column 字段(列)名 数据类型; -- 添加字段
alter table 表名 drop column 字段名 ; -- 删除字段
alter table 表名 modify 字段名 新数据类型 ;-- 修改字段类型
-- 删除表
drop table 表名;
-- DML语法
-- 实现数据库表数据的增insert、删delete 、改 update
-- 增加语法
/*
语法1: 列名和值一一对应,没有的列值就为null
insert into 表名(列1,列2,列3...)values(值1,值2,值3...)
语法2:表中有几个字段就写几个值
insert into 表名 values (值1,值2,值3,值4);
批量插入多行数据
insert into 表名 values (值1,值2,值3,值4),
(值1,值2,值3,值4),
(值1,值2,值3,值4);
*/
insert into student(sid,sname,sage,sgender,sphone,sbirthday)
values(10001,'张三',20,'男','13355557777','2006-10-10');
insert into student(sid,sname,sage) values(10002,'李四',20);
insert into student values(10003,'王五',20,'男','13355557788','2006-10-10');
insert into student values(10004,'王六',21,'男'); -- 报错
-- 修改数据update
-- 修改指定数据行的列的值
/*
update 表名 set 列1 = 值, 列2 = 值,列3 = 值 where 字段 = 值;
*/
update student set sgender = '男',sphone = '14455556666' where sname = '李四';
-- 删除数据 delete
-- 删除符合条件的数据行数据,不加条件表示删除所有表数据
-- delete from 表名 where 字段 = 值;
delete from student where sid = 10003;
-- 练习:往user表中添加数据,然后执行修改和删除
# 注释
-- 注释
/*
多行注释
*/
-- 表格的约束
/*
约束一般在创建表格的时候,添加字段的后面,用来给这个字段设置
对应的约束条件
如果有些表格已经创建好了,也可以通过alter命令完成约束的添加
常见的约束
主键 primary key 表示字段非空且唯一,一张表只有一个主键
一般用在表中的唯一的id后面,比如学号,用户id
非空 not null 表示字段值不能为空
唯一 unique 表示字段的值不能重复
默认值 default 表示不指定字段值,就使用默认值
选择 check 从指定的值中选择某个值使用
外键约束 foreign key 用来约束两张表之间的关系,把两张表
作为主表和副表,主表数据必须存在,才能添加副表数据
*/
-- 创建表格的时候,使用约束
drop table student;
create table student (
sid int primary key,
sname varchar(50) not null,
sage int not null,
sgender char(2) check (sgender in ('男','女')),
sphone char(11) unique not null,
sbirthday date default '2000-10-10'
-- primary key(sid)
-- 主键的另一种用法
) ;
-- 测试约束的使用
insert into student(sid,sname,sage,sgender,sphone,sbirthday)
values(10001,'张三',20,'男','13355557777','2006-10-10');
insert into student(sid,sname,sage,sgender,sphone,sbirthday)
values(10002,'张三',20,'男','13355557788','2006-10-10');
insert into student(sid,sname,sage,sgender,sphone)
values(10003,'李四',20,'男','13355557799');
-- 测试外键约束
-- 创建一个订单表,订单表中需要一个用户id,
-- 订单表中的用户id就是外键指向user表中的 uid
drop table `order`;
create table `order`(
oid int ,
uid int ,
pname varchar(100) ,
foreign key (uid) references `user`(uid) on delete cascade
);
-- 测试外键的添加用法 ,必须要保证主表有数据,才能往副表中加数据
-- 先往order表中添加数据,无法添加
insert into `user` values(101,'jack','123123','1999-1-1','扬州');
insert into `order` values(201,101,'手机');
-- 删除数据的时候,需要先删副表数据,再删主表数据
-- 除非加上级联删除on delete cascade,
-- 可以删除主表的时候,同时会把副表数据删除
delete from `order` where uid = 101;
delete from `user` where uid = 101;