MySQL(02)DDL&DML
#单行注释 /**/多行注释
SQL语句不区分大小写 , 被 " " 和 ' ' 包住的字符串才区分大小写
1.DDL(data defination language)数据库定义语言,主要是增删数据库 , 建表, 删除表, 修改表字段等操作
关键字 creat(创建) drop(删除) alter(修改)
创建数据库 crate database [数据库名]; if not exists 不存在则创建,存在则不创建
删除数据库 drop database [数据库名];
MySQL 创建数据库默认字符集 latin1 不支持中文 ,
创建数据库指定数据库默认字符集utf8 create database if not exists [数据名] default charset utf8; 支持中文
删除表 dorp table 表名
查询表结构 desc 表名 或者 show cloumns from 表名
创建表 设置默认存储引擎为innodb 默认字符集utf8
use [数据库名]; 进入数据库
create table if not exists 表名 if not exists 不存在则创建,存在则不创建
(
属性名1 数据类型1 约束1(可省略), #逗号代表一列
属性名2 数据类型2 约束2(可省略), #约束保证数据完整性,正确性的
...
属性名n 数据类型n 约束n(可省略)
)engine Innodb charset=utf8;
# 数值类型 tinyint 1字节 smallint 2字节 mediumint 3字节 int integer 4字节 bigint 8字节 float 4字节 double 8字节 # 字符类型 char 1字节 表示定长字符串 定义一个 char(20) 无论字符有多少个都占20个字节大小 varchar 2字节 表示变长字符串 定义一个 varchar(20) 最大占20个字节 ,有3个就占3个字节大小 tinyblob 表示二进制字符串 tinytext 表示文本 blob text mediumblob mediumtext longblob longtext # 时间和日期类型 date YYYY-MM-DD 年月日 time HH:MM:SS 时分秒 datetime YYYY-MM-DD HH:MM:SS
修改表
增加列 alter table [表名] add [列名] [类型] [约束]; 表的末尾追加一列及其属性
在增加列的末尾加上 frist 表示在第一个增加列 , 如果是 after 列名 表示在指定列名之后增加列
修改列 alter table [表名] modify column [列名] [类型] [约束]; modify column:修改列
删除列 alter table [表名] drop column [列名]; 删除指定列
2.DML(data manipulation language)数据操作语言,主要是数据库中数据的增删改三种操作
关键字 insert(插入) update(更新) delete(删除)
插入数据 insert into student(stu_age,stu_name) values (20,'张三'); 为指定字段添加值, 添加值的顺序按照指定字段的顺序
insert into student values ( , , ); 为所有字段插入值, 且顺序严格按照表中的顺序, 必须全部都插入
insert into student values ( , , ) ,( , , ), ( , , )...; 可以按这种方式同时插入多个字段的值 ,约束允许时字段可以给null
更新数据 update [表名] set [字段名] = [值], [字段名] = [值]; 设置指定字段的所有值,并更新
条件更新 update [表名] set [字段名] = [值] where [字段名]=[值]; where后面的 = 是比较的意思, 满足where条件的字段才更新
删除数据 delete from [表名]; 删除表里的全部字段的值
条件删除 delete from [表名] where [关键字段]= [值] ; 满足条件的字段才删除
and(和) && , or(或) || , delete from [表名] where [关键字段]= [值] and [关键字段] = [值]; 删除两个符合条件的字段的值
数据完整性
实体完整性 标识符或主键的完整性 主键约束,唯一约束
域完整性 限制类型 格式 可能值的范围 检查约束,默认值约束 ,
引用完整性 保存原表和引用表的数据的一致性 外键约束
自定义完整性 用户自定义的业务规则 一般有上三个完整性就够了
创建约束的方法有两种 : 1.创建列时加上约束 或者 2.事后通过 alter table [表名] modify column [字段] [类型] [约束] 进行增加
约束分两个级别: 行级约束(每一列的约束) , 表级约束. 这两个级别的约束效力是一样的
常见约束
not null: 非空,该字段的值必填
unique: 唯一,该字段的值不可重复 default
DEFAULT:
默认,该字段的值不用手动插入有默认值
check: 检查,mysql不支持
primary key: 主键,该字段的值不可重复并且非空 unique+not null
foreign key: 外键,该字段的值引用了另外的表的字段
修改约束的方法有两种 不建议使用modify column 的方式去创建或修改 唯一 外键 这样的表级约束, 因为没有约束名称导致无法删除约束
alter table [表名] modify column [字段名] [类型] [new约束]; modify column: 修改列. 最好只是修改 not null 这样的行级列
alter table [表名] add constraint [自定义约束名称] [约束]([指定字段]); add constraint 增加列, 给指定字段增加和修改约束
删除约束 alter table [表名] drop index [自定义约束名称] ;
创建复合唯一约束(创建两列以上的 唯一 约束(表级约束) ) ,必须两个字段同时相同才违反约束, 两个字段只有一个相同 不违反复合唯一约束
在 create table 时最后一句写 constraint [自定义约束名称] unique([字段1],[字段2], ... )
alter table [表名] add constraint [自定义约束名称] [约束]( [字段1],[字段2], ... );
删除复合约束 通过 约束名称 删除 alter table [表名] drop index [自定义约束名称] ;
主键约束 每个表只能有一个主键约束(表级约束)
复合主键约束 复合的值不能重复(整个符合列相同才违反约束) , 只有其中一列的值重复不违反约束 和 方法上面的复合唯一约束相同
添加主键约束 alter table [表名] add constraint primary key( [字段1], ... ); 主键约束可以不取 约束名 因为主键只有一个
删除主键约束 alter table [表名] drop primary key; 删除唯一的主键
自增列 create table 时 id int primary key auto_increment 当id为null时,每 insert into 一行数据 id自动+1(默认从1开始)
删除自增列 alter table [表名] modify column [字段名] [类型] [约束]; 使用修改列约束的 方式把约束去掉
比如 alter table [表名] modify column [字段名] [类型] 约束不写; 就会把原来的行级约束删除
设置自增列默认开始的值 ,create table [表名]( )auto_increment=number;
检查约束 [字段] [类型] check(age >0 and age<200) , MySQL不支持check
默认值约束, default [值], 或者 alter table [表名] modify column [字段名] [类型] default [值];
删除默认值约束 alter table [表名] modify column [字段名] [类型] 不写约束; 修改列的属性约束位 什么都不写,就会把默认值约束删除
外键用于关联另一张表, 外键关联的必然是参考表的主键
外键的 数据类型 长度 精度 必须和参考表的主键保持一致 , 参考表存在后才能设置外键约束
创建外键约束 alter table 表名 add constraint [约束名] foreign key(要约束的字段) references [参考表](参考表的主键);
删除外键约束 alter table 表名drop foreign key (约束名) ;
删除一个表时要先解除要删除表的外键约束,否则无法删除
外键约束有 on delete 和 on update 两个选项, 选项的属性
cascade: 级联,在父表上 delete/update 记录时, 子表也会同步 delete和update 外键所匹配的记录
set null: 在父表上update/delete记录时,将子表上匹配记录的列设为null 要注意子表的外键列不能设置not null
no action 选项的默认属性, 如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
set default 父表有变更时,子表将外键设置成一个默认的值 但Innodb不能识别
restrict 同 no action 一样
使用方法: alter table [表名] add constraint [约束名] forkeign key(要添加外键的字段) references 参考表(参考表字段) on delete [属性] on update[属性];