DDL
Mysql不区分大小写 structured query language
①数据库
创建数据库:在Mysql中create database和create schema(模式)效果相同
create database if not exists db default charset utf8 collate utf8_general_ci;// collate校验,用后面的数据库校准规则
查看所有数据库:show databases;
mysql自动创建的数据库有:information_schema:数据库对象信息,用户表信息,列信息,权限信息等
cluster:集群信息
performance_schema:数据库服务器性能参数
mysql:显示系统的用户权限
删除数据库:drop database 数据库名
②表
显示某个数据库下的所有表:use 数据库名
show tables;
1.创建表:
1.1 create table 表名(
列名 数据类型 约束,
)
数据库约束:
主键: primary key,数据不重复且非空。
默认值: default,在数据插入时,如果插入的位置没有数据,将被default值填充
唯一 :unique,一列的值不能重复,即这一列每个值都是唯一的。
外键 :foreign key:体现数据完整性,一个表可以有多个外键,每个外键必须是另一个表的主键,被外键约束的列,取值必须在它参考列中对应,否则报错
非空: not null:插入值不为空
查看所有的约束:select * from information_schema.TABLE_CONSTRAINTS where table_name=...
alter table stu drop foreign key s_d;//删除外键约束
alter table db.stu add constraint foreign key s_d(dept_no) references db.dept(dept_no);//增加外键约束
alter table db.lib add primary key(book_no);//添加主键约束
主键实例:
use db;
create table student(
stuno int,//等价于stu int primary key,
stuname char(10),
constraint stu_no primary key(stuno)
)
外键实例:
use db;
create table student(
stu int primary key,
stuname char(10),
depart_no int ,//等价于depart_no int references department(depart_no)
constraint stu_dept foreign key(depart_no) references department(depart_no)
)
在创建索引时可以指定在删除更新父表时,子表(定义了外键的表)进行的操作,restrict, cascade, set null, not action
restrict:在子表有记录的情况下,父表不能更新
cascade:父表在更新或删除的时候,子表进行相应的操作
set null:父表在进行删除的时候,子表对应的列set null
not action:不做任何操作
例:constraint stu_dept foreign key(depart_no) references department(depart_no) delete restrict updata cascade;
主表在删除的时候,如果子表中有对应的记录则不允许删除,主表进行更新时,子表中相应的记录跟着更新
如果某个表被其他表定义了外键参照,该表对应的主键或索引应该禁止被删除
在导入多个表的数据时,可能因为外键约束报错,因为数据还没有导入完成。这时可以关闭外键约束,关闭外键约束还可以加快数据导入的速度
set foreign_key_checks=0;//关闭外键约束
set foreign_key_checks=1;//打开外键约束
1.2 create table 表名 as select * from 被拷贝表名 where 条件(当只需要拷贝表结构的时候:where id=-1)
在以此种方式拷贝表的时候没有复制被拷贝表中的默认值 default value
1.3创建临时表
create temporary table temp( t_id int, t_name varchar(10) )
创建的临时表不会出现在数据库的列表中,也不能通过show tables 查看,也不能通过select *from information_schema.TABLES查看,只能通过show create table 表名查看临时表的信息。
临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。当数据库中存在与临时表同名的非临时表时,临时表会自动屏蔽非临时表
2 查看表结构
describe 表名//desc 表名
更加详细的表信息:show create table 表名\g :\g网格化显示 在mysql workbench中报错
3 删除表
drop table 表名
4 修改表
modify 列名 新数据类型 [(first | after)列名 ] 可选项 重新定义数据类型,不修改列名
add column 列名 数据类型 [(first | after)列名 ] 可选项
alter table 表名 drop column 列名
change 旧列名 新列名 新数据类型 [(first | after)列名 ] 可选项 可修改数据类型和列名
rename 新表名