创建数据库

//查看所有数据库
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;

删除被其他表关联的主表

数据表之间存在外键关联的情况,如果直接删除父表,结果会显示失败。原因是直接删除父表会破坏表的参照完整性。
如果一定需要删除,可以先删除他的子表在删除父表。
如果要保留子表数据,则可以删除子表的外键约束,然后在删除父表。

注意事项

外键约束不可以跨引擎使用。