文章目录
MySQL 语言----2
DDL语言
1. 库的管理
-
创建库
-
语法
create database [if not exists] 库名 [character set 字符集名];
-
-
修改库
-
语法
alter database 库名 character set 字符集名;
-
-
删除库
-
语法
drop database [if exists] 库名;
-
2. 表的管理
-
创建表
-
语法
create table [if not exists] 表名( 字段名 字段类型 [约束], 字段名 字段类型 [约束], ); 一般在后面会跟上表的结构例如innob 不同的MySQL的版本,后面是不一样的。
-
-
修改表
-
添加列
alter table 表名 add column 列名 类型 [first|after 字段名];
-
修改列的类型和约束
alter table 表名 modify column 列名 新类型 [新约束];
-
修改列名
alter table 表名 change column 旧列名 新列名 类型;
-
删除列
alter table 表名 drop column 列名;
-
修改表名
alter table 表名 rename [to] 新表名;
-
-
复制表
-
复制表的结构
create table 表名 like 旧表;
-
复制表的结构 + 数据
create table 表名 select 查询列表 from 旧表 [where 筛选];
-
-
删除表
-
语法
drop table [if exists] 表名;
-
-
创建表时添加约束
constraint 约束名 foreign key(字段名) references 主表(被引用列)create table 表名( 字段名 字段类型 not null,#非空 字段名 字段类型 primary key,#主键 字段名 字段类型 unique,#唯一 字段名 字段类型 default 值,#默认 constraint 约束名 foreign key(字段名) references 主表(被引用列) ) 注意: 支持类型 可以起约束名 列级约束 除了外键 不可以 表级约束 除了非空和默认 可以,但对主键无效 列级约束可以在一个字段上追加多个,中间用空格隔开,没有顺序要求
3. 常见数据类型
1. 数值型
-
整型
tinyint 、smallint 、mediumint、 int/integer 、bigint 1 2 3 4 8
- 特点:
- 都是可以设置无符号和有符号,默认有符号,通过
unsigned
设置无符号 - 如果超出范围,会报out or range 异常,插入临界值
- 长度可以不指定,默认会有一个长度、、、
- 都是可以设置无符号和有符号,默认有符号,通过
- 特点:
-
浮点型
-
定点数:decimal(M,D)
-
浮点数:
- float(M,D) 4
- double (M,D) 8
-
特点:
- M代表整数部位+小数部位的个数,D代表小数部位
- 如果超出范围,则报out or range异常,并且插入临界值
- M和D都可以省略,但对于定点数,M默认为10,D默认为0
- 如果精度要求较高,则优先考虑使用定点数
-
2. 字符型
- 常用
char、varchar、binary、varbinary、enum、set、text、blob
char:固定长度的字符,写法为char(M),最大长度不能超过M,其中M可以省略,默认为1
varchar:可变长度的字符,写法为varchar(M),最大长度不能超过M,其中M不可以省略
3. 日期型
-
常用
year年 date日期 time时间 datetime 日期+时间 8 timestamp 日期+时间 4 比较容易受时区、语法模式、版本的影响,更能反映当前时区的真实时间
4. 常见的约束
### 1. 常见的约束
- NOT NULL: 非空,该字段的值必值
- UNIQUE: 唯一,该字段不可重复
- DEFAULT : 默认,该字段的值不用手动插入有默认值
- CHECK : 检查 ,mysql不支持
- PRIMARY KEY : 主键,该字段的值不可重复,并且非空,,一个表必须有一个主键
unique+ not null
- FOREIGN KEY : 外键,该字段的值引用了另外的表的字段
2. 主键和唯一
1. 区别:
* 一个表至多有一个主键,但可以有多个唯一
* 主键不容许空,唯一可以为空
2. 相同点:
* 都具有唯一性
* 都支持组合键,但不推荐
3. 外键
-
用于限制两个表的关系,从表的字段值引用了主表的某字段值
-
外键列和主表的被引用列要求类型一致,意义一样,名称无要求
-
主表的被引用列要求是一个key(一般就是主键)
-
插入数据,先插入主表
-
删除数据,先删除从表
-
可以通过以下两种方式来删除主表的记录
-
方式一:级联删除
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;
-
方式二: 级联置空
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;
-
-
4. 修改表时添加或删除约束
-
非空
-
添加非空
alter table 表名 modify column 字段名 字段类型 not null;
-
删除非空
alter table 表名 modify column 字段名 字段类型;
-
-
默认
-
添加默认
alter table 表名 modify column 字段名 字段类型 default 值;
-
删除默认
alter table 表名 modify column 字段名 字段类型 ;
-
-
主键
-
添加主键
alter table 表名 add【 constraint 约束名】 primary key(字段名);
-
删除主键
alter table 表名 drop primary key;
-
-
唯一
-
添加唯一
alter table 表名 add【 constraint 约束名】 unique(字段名);
-
删除唯一
alter table 表名 drop index 索引名;
-
-
外键
-
添加外键
alter table 表名 add【 constraint 约束名】 foreign key(字段名) references 主表(被引用列);
-
删除外键
alter table 表名 drop foreign key 约束名;
-
5. 自增长列
-
特点:
- 不用手动插入值,可以自动提供序列值,默认从1开始,步长为1
auto_increment_increment- 如果要更改起始值:手动插入值
- 如果要更改步长:更改系统变量
- set auto_increment_increment=值;
- 一个表至多有一个自增长列
- 自增长列只能支持数值型
- 自增长列必须为一个key
- 不用手动插入值,可以自动提供序列值,默认从1开始,步长为1
-
创建表时设置自增长列
create table 表(
字段名 字段类型 约束 auto_increment
)
-
修改自增长列
alter table 表 modify column 字段名 字段类型 约束 auto_increment
-
删除自增长列
alter table 表 modify column 字段名 字段类型 约束