MySQL(2)

数据约束
1.默认值 default
表中的字段,默认的默认值为null
如果插入数据时,不给某个字段赋值,那么这个字段就使用设置的默认值。如果赋值,就使用实际赋的值,这个值可以为null

student为表名
创建时设置某个字段的默认值
create table student(
    id  int default 1,
    name varchar(10)
)
修改某个字段的默认值
alter table student modify column name varchar(10) default '张三'

删除默认值
alter table student modify id int;

2.mysql里可以使用first和after关键字指定添加的字段的位置
3.非空(是否为null)
插入数据时,如果非空字段赋值为null,运行sql命令会报错,如果非空字段没有赋值,会使用该字段的默认值

创建
create table student(
   id int not null,
   name varchar(10)
)
修改
alter table student modify column name varchar(10) not null

删除not null
alter table student modify column name varchar(10)

4.唯一
如果某个字段设置为unique,在整个表中,该字段的值不能重复。但是,设置为unique的字段,值可以为null,而且null可以重复出现

创建
create table student(
    id int unique ,
    name varchar(10)
    )
修改
alter table student modify name varchar(10) unique;
alter table sudent add unique key(name);

删除唯一键
alter table student drop index id

5.自增(Auto_increment)
某个字段单独设置自增,报错,必须结合主键使用
设为自增的字段,值从1开始,每次插入数据时,找到该字段的最大值,然后进行+1的自增操作

插入数据时,如果指定字段,针对自增字段,可以赋值,也可以不赋值。但是,如果表名后没有指定字段,表示每个字段都要赋值,自增字段也必须赋值。

添加自增键
alter table student change id id int primary key auto_increment

删除自增键
alter table student change id id int

主键
通过主键,可以保证数据表中记录唯一
一般将表示唯一的字段设为主键,如学号、身份证、自增
主键相当于:非空(not null )+唯一(unique)

添加主键
alter table student add primary key(id)
删除主键
alter table student drop primary key

可以通过多过字段表示联合主键

create table seckill(
        phone varchar(11) not  null,
        name  varchar(11),
        p_num  int,
        p_name varchar(12)
        p_price  double 
        primary  key(phone,p_num)
)

6.外键(foreign key)
学生信息 student 【id,name,age,tid】
tid 就是student表中的外键
对应的是teacher表中id
老师信息 teacher
【id,name,phone】

外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联。这样,当在定义主关键字约束的表中更新列值,时其它表中有与之相关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新。外关键字约束的作用还体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字列值相同的值时,系统会拒绝插入数据。与主关键字相同,不能使用一个定义为 TEXT 或IMAGE 数据类型的列创建外关键字。外关键字最多由16 个列组成。

建立外键
学生表 (id,name,score,tid)
教师表 (id,name,phone,salary)

alter table student add foreign key(tid)
references  teacher(id)【id必须为主键】

主表:通过其他表的外键进行关联,约束其他表的数据,比如teacher表
副表:有外键的表,被约束的表,比如student表

级联操作
cascade
删除主表数据时,也删除副表数据
更新主表数据时,也更新副表数据

on  delete  cascade
on  update  cascade 


on update 和 on delete 后面可以跟的词语有四个
no action , set null , set default ,cascade
no action 表示不做任何操作,
set null 表示在外键表中将相应字段设置为null
set default 表示设置为默认值
cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除

restrict 表示没有级联操作 同 no action

多表查询

内连接 inner join
select t.id, t.name , t.phone , r.name, r.subject
from tacher t
inner join room r
on t.rid=r.id

(2)外连接
左外连接:左边表的数据,不管是否匹配上,都会显示,右边表的数据显示NULL
select t.id , t.name , t.phone , r.name , r.subject
from tacher t
left join room r
on t.rid = r.id

右外连接:右边表的数据,不管是否匹配上,都会显示,左边表上未匹配上的字段显示NULL
select t.id , t.name , t.phone ,r.name,r.subject
from teacher t
right join room r
on t.rid = r.id

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

(3)交叉连接
笛卡尔积
不带where,查询出的数据行数为两个表的笛卡尔积(数据行数的乘积)

select t.id,t.name,t.phone,r.name,r.subject
from teacher t , room r

自连接
员工信息表
员工id(pid) name经理id(mid) 部门 salary partment

查看每位员工的经理是谁
select e1.name 员工, e2.name 领导
from employee e1 ,employee e2
where e1.mid = e2.pid

备份数据库:(命令在DOS的\mysql\bin目录下执行)
1.导出整个数据库
导出文件默认是存在mysql\bin目录下
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u user_name -p123456 database_name > outfile_name.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u user_name -p database_name table_name > outfile_name.sql
3.导出一个数据库结构
mysqldump -u user_name -p -d –-add-drop-table database_name > outfile_name.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

导入数据库(恢复数据)
常用source 命令
进入mysql数据库控制台,
如mysql -u root -p

mysql>source 数据库(绝对路径)

猜你喜欢

转载自blog.csdn.net/L_K123/article/details/81274633
今日推荐