MySQL5.5.21学习教程之二

现在来学习一下关于表的基本操作!主要是建立表和基本的约束,之后会继续讲解介绍索引的问题!

#列--也称为属性列,在具体创建表的时候,必须指定列的名字和数据类型
#索引--是指根据指定的数据库列表列建立起来的顺序,提供了快速访问数据的途径
#------可监督表的数据,使其索引所指向的列中的数据不重复
#触发器--是指用户定义的命令的集合,当对一个表中的数据进行插入,更新或者删除时这组命令就会自动
#--------自动执行,可以用来确保数据的完整性和安全性

create database company;
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| company            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
use company;
create table t_dept(deptno INTEGER,dname VARCHAR(20),loc VARCHAR(40));
describe t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

show create table t_dept \G
*************************** 1. row ***************************
       Table: t_dept
Create Table: CREATE TABLE `t_dept` (
  `deptno` int(11) DEFAULT NULL,
  `dname` varchar(20) DEFAULT NULL,
  `loc` varchar(40) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

drop table t_dept;
show tables;
Empty set (0.00 sec)

alter table t_dept rename tab_dept;
show tables;
+-------------------+
| Tables_in_company |
+-------------------+
| tab_dept          |
+-------------------+

alter table tab_dept rename t_dept;
desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

alter table t_dept add descri VARCHAR(20);
#在表的首部添加一个字段
#alter table t_dept add descri VARCHAR(20) first;
#在表的某个字段后面添加一个字段
#alter table t_dept add descri VARCHAR(20) after deptno;

desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
| descri | varchar(20) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

alter table t_dept drop descri;
desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

alter table t_dept modify deptno VARCHAR(20);
desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | varchar(20) | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

alter table t_dept modify deptno INTEGER;
desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(11)     | YES  |     | NULL    |       |
| dname  | varchar(20) | YES  |     | NULL    |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

#alter table table_name change 旧属性名 新属性名 旧数据类型
#alter table table_name change 旧属性名 新属性名 新数据类型
alter table t_dept change loc location VARCHAR(40);
desc t_dept;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| deptno   | int(11)     | YES  |     | NULL    |       |
| dname    | varchar(20) | YES  |     | NULL    |       |
| location | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+

alter table t_dept modify location VARCHAR(40) first;
desc t_dept;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| location | varchar(40) | YES  |     | NULL    |       |
| deptno   | int(11)     | YES  |     | NULL    |       |
| dname    | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+

MySQL软件支持的完整性约束
NOT NULL--设置约束字段不能为空
DEFAULT--设置字段的默认值
UNIQUE KEY--约束字段的值唯一
PRIMARY KEY--约束字段为表的主键,可以作为该表记录的唯一约束
AUTO_INCREMENT--约束字段的值为自动增加
FOREIGN KEY--约束字段为表的外键

alter table t_dept modify deptno INTEGER NOT NULL;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| location | varchar(40) | YES  |     | NULL    |       |
| deptno   | int(11)     | NO   |     | NULL    |       |
| dname    | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+

alter table t_dept modify location VARCHAR(40) default 'NWPU';
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| location | varchar(40) | YES  |     | NWPU    |       |
| deptno   | int(11)     | NO   |     | NULL    |       |
| dname    | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+

alter table t_dept modify dname VARCHAR(20) unique;
desc t_dept;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| location | varchar(40) | YES  |     | NWPU    |       |
| deptno   | int(11)     | NO   |     | NULL    |       |
| dname    | varchar(20) | YES  | UNI | NULL    |       |
+----------+-------------+------+-----+---------+-------+

drop table t_dept;
show tables;

如果想给字段dname上的UK约束设置一个名字,可以执行SQL语句constraint
下面是创建表t_dept的语句:
create table t_dept(
deptno INTEGER,
dname VARCHAR(20),
loc VARCHAR(40),
constraint uk_dname unique(dname)
);

在具体的设置主键约束时,必须满足主键字段的值是唯一的、非空的。
由于主键可以是单一字段,也可以是多个字段,因此分为单字段主键和多字段主键
create table t_dept(
deptno INTEGER primary key,
dname VARCHAR(20),
loc VARCHAR(40),
constraint uk_dname unique(dname)
);
设置多字段主键
create table t_dept(
deptno INTEGER,
dname VARCHAR(20),
loc VARCHAR(40),
constraint uk_dname unique(dname),
constraint pk_dname_depno primary key(deptno,dname)
);
show tables;
desc t_dept;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(11)     | NO   | PRI | 0       |       |
| dname  | varchar(20) | NO   | PRI |         |       |
| loc    | varchar(40) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

drop table t_dept;

设置字段值自动增加
create table t_dept(
deptno INTEGER auto_increment,
dname VARCHAR(20),
loc VARCHAR(40),
constraint uk_dname unique(dname),
constraint pk_dname_depno primary key(deptno,dname)
);
desc t_dept;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| deptno | int(11)     | NO   | PRI | NULL    | auto_increment |
| dname  | varchar(20) | NO   | PRI |         |                |
| loc    | varchar(40) | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+

设置外键约束通常能表示多个表之间的参照性的完整性约束,即构建于两个
表的两个字段之间的参照关系
设置外键约束的两个表之间会具有父子关系,即子表中某个字段的取值范围由
父表决定,表示一种部门和雇员关系,即每个部分有多少雇员。
首先应该有两个表:部门表和雇员表,雇员表中有一个字段表示部门编号的字段deptno
其依赖于部门表的主键,这样字段deptno就是雇员表的外键,通过该字段部门编号的字段deptno
其依赖于部门表的主键,这样字段deptno就是雇员表的外键。

create table table_name (
属性名 数据类型,
属性名 数据类型,
......
constraint 外键约束名 foreign key (属性名1)
	references 表明(属性名2)
);

create table t_employee(
empno INTEGER primary key,
ename VARCHAR(20),
job VARCHAR(20),
MGR INTEGER,
Hiredate date,
sal double(10,2),
comm double(10,2),
deptno INTEGER,
constraint fk_deptno foreign key(deptno) references t_dept(deptno)
);
show tables;
+-------------------+
| Tables_in_company |
+-------------------+
| t_dept            |
| t_employee        |
+-------------------+
desc t_employee;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| empno    | int(11)      | NO   | PRI | NULL    |       |
| ename    | varchar(20)  | YES  |     | NULL    |       |
| job      | varchar(20)  | YES  |     | NULL    |       |
| MGR      | int(11)      | YES  |     | NULL    |       |
| Hiredate | date         | YES  |     | NULL    |       |
| sal      | double(10,2) | YES  |     | NULL    |       |
| comm     | double(10,2) | YES  |     | NULL    |       |
| deptno   | int(11)      | YES  | MUL | NULL    |       |
+----------+--------------+------+-----+---------+-------+

时间: 2024-10-07 02:45:23

MySQL5.5.21学习教程之二的相关文章

JavaScript学习教程之cookie与webstorage

这篇文章主要给大家介绍了关于JavaScript学习教程之cookie与webstorage的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用JavaScript具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 cookie 由于http是无状态的协议,一旦客户端和服务器的数据交换完毕,就会断开连接,再次请求,会重新连接,服务器单从网络连接上是没有办法知道用户身份的.cookie就是为了解决此问题而产生的,每次新的用户请求时,便给用户颁发一个独一无二的身份证,下次访问,必须带

MySQL5.5.21学习教程之一

最近做项目需要MySQL,顺便捡起好久没弄的数据库了!可能要写一个系列关于MYSQL的学习笔记,那不来与大家共享! 说到安装数据库,可真的够让人着急的!自己的系统是Windows8,安装了一圈server却没有找到最好的,功夫不负有心人.找到了mysql-5.5.21-winx64.msi.终于成功了! 具体的安装细节请参考博客:学习数据库在win8上安装!! show databases; show engines; show engines \G show variables like 'h

UI设计师学习教程之PS和AI对比分析

PS和AI是ui设计师常用的设计工具,也是初入设计行业的人必须要掌握的工具.二者都可以用来作图,不过PS属于位图编辑,而AI是矢量图编辑,但他们之间的区别并不止于此,今天的教程中小编就给大家详细对比PS和AI. Adobe Photoshop,简称“PS”,是由Adobe Systems开发和发行的图像处理软件.Photoshop主要处理以像素所构成的数字图像.使用其众多的编修与绘图工具,可以有效地进行图片编辑工作.ps有很多功能,在图像.图形.文字.视频.出版等各方面都有涉及. AI是Adob

Docker最全教程之Python爬网实战(二十一)

原文:Docker最全教程之Python爬网实战(二十一) Python目前是流行度增长最快的主流编程语言,也是第二大最受开发者喜爱的语言(参考Stack Overflow 2019开发者调查报告发布).笔者建议.NET.Java开发人员可以将Python发展为第二语言,一方面Python在某些领域确实非常犀利(爬虫.算法.人工智能等等),另一方面,相信我,Python上手完全没有门槛,你甚至无需购买任何书籍! 由于近期在筹备4.21的长沙开发者大会,耽误了不少时间.不过这次邀请到了腾讯资深技术

学习编程之Python篇(二)

学习编程与学习踢球.学习演奏并无差别,最佳方式就是不断练习,所以我们鼓励你敲些代码,看看会发生什么,如果这些代码头一次不起作用,没关系,再来,看看你能否把它们纠正过来. 首先是一个简单的快速入门程序,让我们通过了解这个程序的细节,来熟悉Python. 第一项任务:给定半径,计算一个圆的周长和面积. 程序分解: 1.  提示用户输入半径: 2.  应用数学公式,根据获得的半径,得出周长和面积: 3.  输出结果. 代码1.1 运行程序的最简单方法是在IDLE编辑器里打开它,然后选择Run->Run

【嵌入式4412开发板学习教程】Uboot教程之uboot基础概念和框架

[4412开发板教程]Uboot教程之uboot基础概念和框架 正在学习uboot,教程讲解的很详细,先上个笔记,视频上传到网盘后再补上...... 知识点: 1.操作系统分层的概念 Windows:bios→内核模式→用户模式→用户程序 linux:bootloader→内核→文件系统→用户程序 2.bootboader种类介绍 U-boot是最通用的bootboader.(210,4412等等) vivi 针对三星的ARM来定制2440上有用到 3.4412休眠问题 它可以直接跳过uboot

jQuery EasyUI教程之datagrid应用(二)

上次写到了让数据库数据在网页datagrid显示,我们只是单纯的实现了显示,仔细看的话显示的信息并没有达到我们理想的效果,这里我们丰富一下: 上次显示的结果是这样的 点击查看上篇:jQuery EasyUI教程之datagrid应用(一) 这里不难发现生日的格式是毫秒(long型数据),并不是我们想要的年月日的格式,那我们就修改一下 我们在js中写入格式时间的方法,并在生日一列用formatter来调用方法格式时间, //格式化时间 //把long型日期转为想要类型 function getDa

php教程之Smarty模板用法实例

分享下php之Smarty模板的使用方法. 剖析了smarty模板的使用方法,对于学习smarty的朋友有一定的参考价值. 详情如下: 一.模板中的注释每一个Smarty模板文件,都是通过Web前台语言(xhtml,css和javascript等)结合Smarty引擎的语法开发的.用到的web前台开发的语言和原来的完全一样,注释也没有变化.Smarty注释语法是'左结束符变量值*'和'*右结束符变量值',在这两个定界符之间的内容都是注释内容,可以包含一行或多行,并且用户浏览网页查看原代码时不会看

Axure 教程之Axure RP7.0从入门到精通

Axure RP是美国Axure Software Solution公司旗舰产品,是一个专业的快速原型设计工具,让负责定义需求和规格.设计功能和界面的专家能够快速创建应用软件或Web网站的线框图.流程图.原型和规格说明文档.作为专业的原型设计工具,它能快速.高效的创建原型,同时支持多人协作设计和版本控制管理.第1节 Axure RP7.0下载.安装.汉化与注册第2节 Axure RP7.0的功能介绍(上)第3节 Axure RP7.0的功能介绍(下)第4节 第一个原型 简单的登录页面第5节 第一