MySQL笔记

数据库操作

创建数据库

  • 当数据库不存在时就创建
  • if not exists
  • character set utf8 创建时设置数据库字符集或charset utf8;
create database if not exists 数据库名 character set utf8;
  • 修改数据库字符集
alter database 数据库名 character set utf8mb4;

删除数据库

  • 当数据库存在时就删除
drop database if exists 数据库名;

表的操作

创建表

主外键的声明

创建表的同时设置主键与外键约束,
声明方式一:直接在字段后面添加主键(PRIMARY KEY)
声明方式二:别处定义 PRIMARY KEY ( id ),
auto_increment :自动递增
外键的约束模式:
r e s t r i c t \color{#FF3030}{restrict} restrict: 严格模式(默认的),父表不能删除或更新一个已经被子表数据引用的记录
c a s c a d e \color{#FF3030}{cascade} cascade: 级联模式,父表的操作,对应子表关联的数据也跟着操作(被改变)。
s e t n u l l \color{#FF3030}{set null} setnull: 置空模式,父表被操作之后,子表对应的外键字段被置空。

通常情况下,合理的模式应该是这样的:删除父表中的数据,子表置空(set null),更新父表的时候,子表做级联操作(cascade)。

CREATE TABLE if not exists chiled2 (
	id INT NOT NULL auto_increment,
	pid INT ( 20 ),
	name VARCHAR ( 50 ),
	PRIMARY KEY ( id ),
	FOREIGN KEY ( pid ) REFERENCES parent ( id ) 
	ON DELETE SET NULL ON UPDATE CASCADE 
	) charset utf8;

上述外键的声明没有指定约束名,会有一个默认的约束名;下面指定约束名直接在foreign 前面加上CONSTRAINT 约束名

CONSTRAINT 约束名 FOREIGN KEY ( pid ) REFERENCES parent ( id ) ON DELETE SET NULL ON UPDATE CASCADE 
查看表的字段信息:

desc 表名;

查看表创建的所有信息包括约束名:
show create  table 表名;

执行该语句后会有如下结果

其中Create Table 的值如下(下面的 CONSTRAINT 后面的就是约束名,这里在创建表的时候没有指定约束名,所以是默认的约束名chiled2_ibfk_1)

CREATE TABLE `chiled2` (
  `id` int NOT NULL AUTO_INCREMENT,
  `pid` int DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `pid` (`pid`),
  CONSTRAINT `chiled2_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `parent` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8

上面的信息中有一个AUTO_INCREMENT=7 表示设置自动递增的字段在添加一条数据时该字段值为7(即使之前已经删除了一些数据),这就引发了设置auto_increment 重新计数

alter table test auto_increment=1 可以设置AUTO_INCREMENT 为任意值开始(大于表中存在的该字段的最大值才有效);
truncate table test AUTO_INCREMENT 值重新开始计数,会彻底删除所有记录。

  • 在建表之后添加主外键

添加主键约束:alter table 表名 add constraint 约束名 (形如:PK_表名) primary key 表名(主键字段);
添加外键约束:alter table 从表 add constraint 约束名(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
删除主键约束:alter table 表名 drop primary key 约束名 ;
删除外键约束:alter table 表名 drop foreign key 约束名(区分大小写);

设置字段唯一性
  • 建表同时在字段后面添加 unique 关键字
  • 建表之后设置唯一性如下
ALTER TABLE table ADD UNIQUE (field);
ALTER TABLE table ADD UNIQUE (field1,field2);
truncate、delete、drop区别

truncate table 表名;
drop table 表名;
delete from 表名;

  • truncate与drop是DDL语句,执行后无法回滚;delete是DML语句,可回滚。
  • truncate只能作用于表;delete,drop可作用于表、视图等。
  • truncate、delete会清空表中的所有行,但表结构及其约束、索引等保持不变;drop会删除整个表。
  • truncate会重置表的自增值;delete不会。 truncate不会激活与表有关的删除触发器;delete可以。
  • truncate后会使表和索引所占用的空间会恢复到初始大小;delete操作不会减少表或索引所占用的空间,drop语句将表所占用的空间全释放掉。
字段值后面约束not null default

表示该字段可以不给值(使用默认的值),但是给值的话不能给null

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值