创建数据库
//查看所有数据库
show databases ;
//创建数据库
create database test_db;
//查看数据库定义
show create database test_db;
删除数据库
drop database test_db;
数据表的基本操作
数据表属于数据库,所以在创建数据表之前应该指定在哪个数据库中操作。
use test_db;
创建数据表
create table test001(
id int(11),
name varchar(25),
salary float
);
//查看所有数据表
show tables ;
使用主键约束
主键又称主码,是表中一列或多列的组合。主键约束(Primary key)要求主键列的数据唯一,并且能够唯一地标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库的查询速度。
主键和记录之间的关系,就如同人与其身份证的关系,他们之间是一一对应的。
主键分为两种类型,单字段主键和多字段联合主键
单字段主键
(1)在定义列的同时指定主键
create table test002 (
id int(11) primary key ,
name varchar(25),
salary float
);
(2)在定义完所有列之后再指定主键
create table test003(
id int(11) ,
name varchar(25),
salary float,
primary key (id)
);
多字段联合主键
create table test004(
id int(11),
name varchar(25),
salary float,
deptID int(11),
primary key(id,deptID)
);
使用外键约束
外键是用来在两个数据表之间建立链接的,它可以是一列或者多列。
一个表的外键可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。
外键:首先它是表中的一个字段,它可以不是本表的主键,但必须是另一个表的主键。
外键主要作用保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行。
主表(父表):对于两个具有关联关系的表来说,相关联字段中主键所在的那个表就是主表。
从表(子表):对于两个具有关联关系的表来说,相关联字段中外键所在的那个表就是从表。
举例:
学生表(学号(Primary key),姓名,班级,性别)
课程表(课程编号(Primary key),课程名,学分)
成绩表(学号,课程号,成绩)
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键
成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键
其中,学生表和课程表都是主表,成绩表为从表
constraint 外键名 foreign key (指定从表外键) references 主表名(主表主键)
create table student(
id int (11) primary key ,
name varchar(25),
class int(11),
sex varchar(25)
);
create table std_grade(
id_cource int(11),
course int(11),
grade int(11),
constraint id_std_grade foreign key (id_cource) references student(id)
);
非空约束
对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库就会报错。
字段名 数据类型 not null
create table test005 (
id int(11) primary key ,
name varchar(25) not null,
salary float
);
使用唯一性约束
唯一性约束要求改了唯一,允许为空,但只能出现一个空值。唯一性约束可以确保一列或者几列不出现重复值。
字段名 数据类型 unique
//定义列后直接指定唯一约束
create table test006 (
id int(11) unique ,
name varchar(25) ,
salary float
);
//定义完所有列后再指定唯一约束
create table test007 (
id int(11) ,
name varchar(25) ,
salary float,
constraint sth unique (name)
);
unique 和 primary key 的区别:
一个表中可以有多个字段声明为unique,但只能有一个primary key声明。(是说定义列的同时定义主键的时候,不包含多主键的定义)
primary key 不允许有空值,但声明为unique的可以有空值的存在,但只能有一个。
使用默认约束
默认约束意思是指定某列的默认值
字段名 数据类型 default 默认值
设置表的属性值自动增加
字段名 数据类型 primary key auto_increment
一个表中只能有一个字段使用 auto_increment 约束,并且该字段必须为主键的一部分 ,数据类型可以是任何整数数据类型,其初始值为1。插入数据时,不用写入被 auto_increment约束的字段,应为此字段会自动增加。
查看数据表结构
下面两种皆可
describe student;
desc student;
show create table student;
修改数据表
修改表名
alter table 旧表名rename 新表名;
alter table test rename test01;
修改字段数据类型
alter table 表名 modify 字段 更改的数据类型;
alter table test01 modify id float;
修改字段名
alter table 表名 change 字段名 新的字段名 新的数据类型;
如果不需要更改数据类型,可以将数据类型跟原来的设置成一样即可,但数据类型不能为空。
alter table test01 change id salary float;
添加字段
alter table 表名 add 字段名 数据类型 约束条件 [first] after 已存在字段名;
alter table test01 add id int(11);
alter table test01 add id int(11) not null;
//在指定列后添加一个字段
alter table test01 add name varchar(25) after salary;
//在第一行添加字段
alter table test01 add deptid int(11) first ;
删除字段
alter table 表名 drop 字段名;
alter table test01 drop deptid;
修改字段的排列位置
alter table test01 modify id int(11) first ;
alter table test01 modify name varchar(25) after id;
更改表的存储引擎
查询支持的存储引擎
show engines ;
更改引擎
alter table test01 engine=MyISAM;
show create table test01;
删除表的外键约束
外键一旦删除就解除主表和从表的关联关系。
alter table 表名 drop foreign key 外键约束名
alter table std_grade drop foreign key id_std_grade;
删除数据表
参数if exists 用来判断表是否存在,加上该参数后如果表不存在sql依旧顺利进行,但是会发出警告。
drop table if exists test001,test002,test0011;
删除被其他表关联的主表
数据表之间存在外键关联的情况,如果直接删除父表,结果会显示失败。原因是直接删除父表会破坏表的参照完整性。
如果一定需要删除,可以先删除他的子表在删除父表。
如果要保留子表数据,则可以删除子表的外键约束,然后在删除父表。
注意事项
外键约束不可以跨引擎使用。