1.sql语言不区分大小写
2._(下划线)进行名字的分割,不适用驼峰命名
3.; 语句sql结尾处加一个;来表示结束
4.一般关键词建议用大写
5.所有名称不能用中文
1.创建数据库
CREATE DATABASE [IF NOT EXISTS] 库名
-- 库
#创建库
#create database xiaozhao;
#create database teacher;
2.删除数据库
DROP DATABASE [IF EXISTS] 库名
#删除库
#drop database teacher;
•“[IF EXISTS] ”内容可以省略;
3.查看数据库
SHOW DATABASES
#查看所有的库
#show DATABASES;
其中:
• 注意不要省略“s”
4.使用数据库
USE xiaozhao
#库
-- 使用库
use xiaozhao;
其中: •“xiaozhao”是创建的数据库名称。
5.数据库表的字段类型
1.字符串类型
类型 | 说明 | 取值范围 |
char[(M)] | 固定长度字符串,M即固定是长度 | M字符 |
varchar[(M)] | 可变字符串 | 变长度 |
tinytext | 微型文本串 | 16777215长度+3个字节 |
text | 文本串(4个G左右大小) | 4294967295长度+4个字节 |
char和varchar比较
类型 | 特点 | 空间上 | 时间上 | 适用场景 |
char[(M)] | 固定长度 | 浪费存储空间 | 效率高 | 存储不大,速度要求高 |
varchar[(M)] | 可变长度 | 节省存储空间 | 效率低 | 非CHAR的情况 |
数值类型
日期和事件类型
6.DDL创建数据库表
CREATE TABLE [ IF NOT EXISTS ] `表名` (
`字段名1` 字段类型 [ 属性] [ 索引] [注释] ,
`字段名2` 字段类型 [属性] [索引] [注释] ,
… …
`字段名n` 字段类型 [属性] [ 索引] [注释] )
[ 表类型 ] [ 表字符集 ] ;
或
CREATE TABLE [ IF NOT EXISTS ] 表名(
字段名 类型 属性,
字段名 类型 属性,
……
字段名 类型 属性
);
create table student(
stu_name varchar(10),
stu_age tinyint,
stu_birthday datetime,
stu_id char(18),
stu_score decimal(4,1)
);
其中:
•“[]” 包含的内容可以省略;
•“`” 当前符号为反引号,用于区别MySQL保留字与普通字符而引入的。
7.查看表结构
方式1
desc 表名
方式2
create table 表名
desc student;
-- 出现表后,全选->复制-.>粘贴,既可以显示执行语句的具体实现方式
show create table student;
/*
CREATE TABLE `student` (
`stu_name` varchar(10) DEFAULT NULL,
`stu_age` tinyint(4) DEFAULT NULL,
`stu_birthday` datetime DEFAULT NULL,
`stu_id` char(18) DEFAULT NULL,
`stu_score` decimal(4,1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
反引号:取消特殊性,即`table`也可以做表名
DEFAULT NULL:默认为空,可以不写值
DEFAULT CHARSET:默认字符集utf8mb4
COLLATE=utf8mb4_0900_ai_ci:字符排序
ENGINE=InnoDB:存储引擎
存储:
引擎:搜索引擎、游戏引擎、(物理碰撞)物理引擎,根据制定好的规则,
*/
出现表后,全选->复制-.>粘贴,既可以显示执行语句的具体实现方式
CREATE TABLE `student` (
`stu_name` varchar(10) DEFAULT NULL,
`stu_age` tinyint(4) DEFAULT NULL,
`stu_birthday` datetime DEFAULT NULL,
`stu_id` char(18) DEFAULT NULL,
`stu_score` decimal(4,1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
(` `)反引号:取消特殊性,即`table`也可以做表名
DEFAULT NULL:默认为空,可以不写值
DEFAULT CHARSET:默认字符集utf8mb4
COLLATE=utf8mb4_0900_ai_ci:字符排序
ENGINE=InnoDB:存储引擎
存储:
引擎:搜索引擎、游戏引擎、(物理碰撞)物理引擎,根据制定好的规则,
8.外键约束
约束实际上就是表中数据的限制条件
作用:表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效
约束种类:
- 非空约束(not null)
- 唯一性约束(unique)
- 主键约束(primary key) PK
- 外键约束(foreign key) FK
- 检查约束(目前MySQL不支持、Oracle支持)
添加非空约束
alter table 表名 modify test_student char(10) not null;
#非空约束(设置默认值)
create table tb(
username varchar(10) not null default "无名",
userage int
);
添加唯一性约束(unique)
alter table 表名 add unique(表字段名,字段,字段,字段);
#唯一约束
-- 可以为null,并且可以有多个null,因为null是一个类型
#行级约束:每个字段各是各的约束
create table tb1(
username varchar(10) unique,
userage int
);
#表级约束(联合唯一约束),可同时约束多个字段unique(username,userage)
create table tb2(
username varchar(10),
userage int,
unique(username,userage)
#当表级约束的所有字段完全一样时,才会出现错误(字段之间是有关联的,必须每个字段的值都相同时)
);
添加主键约束
alter table 表名 add primary key(表的字段名,字段,字段);
#主键约束
-- 主键的值是唯一的
-- 主键值不可以为空
create table tb4(
username varchar(10) primary key ,
userage int
);
create table tb5(
username varchar(10),
userage int,
primary key(username,userage)
#联合主键,联合约束
#只有当两个值都一样时才会触发约束
);
#一般主键的创建方式
-- int bitint 自增
-- 主键的值是不会回补的(关系型数据库,表与表之间有关系)
create table tb6(
tid int primary key auto_increment,
username varchar(10),
userage int
);
添加外键约束
alter table 表名 add constraint N1 foreign key (表字段名) references 父表(父表字段名);
只能选主表已有的
保留外键关系,但不写外键约束
外键关系:只是存在外键关系,但没有实际约束
外键约束:对从表中的外键有一定的约束
1.外键的值可以重复
2.外键的值可以为null
3.外键必须要写父表中有的数据
4.父表中的关联字段必须是一个具有唯一性的数据
5.父表的字段名和从表的字段名不一定相同,但数据类型必须一致
6.一个表中可以有多个外键,也可以有多个外键约束,但只能有一个外键7.删除时先删除子表数据,再删除父表数据
#外键约束:只能选主表已有的
/*保留外键关系,但不写外键约束
外键关系:只是存在外键关系,但没有实际约束
外键约束:对从表中的外键有一定的约束
create table a(
aid int primary key auto_increment,
aname varchar(10)
);
drop table b;
create table b(
bid int primary key auto_increment,
bname varchar(10),
aid int,
foreign key(aid) references a(aid)
);
删除约束
删除not null约束
alter table 表名 modify 列名 类型;
删除unique约束
alter table 表名 drop index 唯一约束名;
删除primary key约束
alter table 表名 drop primary key;
删除foreign key约束
alter table 表名 drop foreign key 外键名;