MySQL基础学习笔记(1)-创建数据库和约束
一、 初识MySQL
环境主要为Linux环境,MySQL5.5.50
1.1、启动并登录MySQL:
1.2、查看数据库:show databases;
1.3、连接数据库:use <数据库名>
1.4、查看表:show tables
二、创建数据库&插入数据
创建一个数据库company,两张表employee、 department
2.1、创建数据库:CREATE DATABASE <新建数据库名>;
PS:SQL语言 保留字建议使用大写
2.2、新建数据表 CREATE TABLE
CREATE TABLE 表名
(
列名a 数据类型(数据长度),
列名b 数据类型(数据长度),
……
);
CREATE DATABASE company;
use company;
CREATE TABLE department
(
dpt_name varchar(20),
pep_num int(10)
);
CREATE TBALE employee
(
id int(10),
name varchar(20),
age int(10),
salary int(10),
phone varchar(12),
in_dpt varchar(20)
);
CREATE TABLE project
(
proj_num int(10),
proj_name varchar(20),
start_date date,
end_date date,
of_dpt varchar(20) REFERENCES department(dpt_name),
);
在数据表中的一些数据类型
类型 | 大小 | 用法 | 格式 |
---|---|---|---|
int | 4 | ||
float | 4 | ||
double | 8 | ||
enum | 单选 | enum(‘man’,’woman’) | |
set | 多选 | set(‘北京’,’上海’,’成都’,’重庆’,’武汉’) | |
date | 3 | 日期 | YYYY-MM-DD |
time | 3 | 时间点或持续时间 | HH:MM:SS |
year | 1 | 年份 | YYYY |
char | 0~255 | 固定长字符串 | |
varchar | 0~255 | 可变长字符串 | |
text | 0~65535 | 长文本 |
2.3、插入数据 INSERT
查看表解构:desc table_name;
修改字段类型:
mysql> alter table 表名 modify column 字段名 类型
mysql>alter table department modify column dpt_phone varchar(12);
修改表数据
mysql> update 表名 set 字段=新值,… where 条件
如:
mysql>update department set dpt_phone='0281234566' where dpt_name='TEST';
经验:电话号码最好不要用int类型,使用varchar类型较好
原因:
修改电话号码类型,创建表结果如下:
三、SQL约束
将上面的数据库修改一下,创建一个包含有约束的表
约束类型 | 主键 | 默认值 | 唯一 | 外键 | 非空 |
---|---|---|---|---|---|
关键字 | PRIMARY KEY | DEFAULT | UNIQUE | FOREIGN KEY | NOT NULL |
CREATE DATABASE company;
use company;
CREATE TABLE department
(
dpt_name varchar(20) NOT NULL,
pep_num int(10) DEFAULT '10',
CONSTRAINT dpt_pk PRIMARY KEY (dpt_name)
);
CREATE TBALE employee
(
id int(10) PRIMARY KEY,
name varchar(20),
age int(10),
salary int(10) NOT NULL,
phone varchar(12) NOT NULL,
in_dpt varchar(20) NOT NULL,
UNIOUE (phone),
CONSTRAINT emp_fk FOREIGN KEY (in_dpt) REFERENCES department(dpt_name)
);
CREATE TABLE project
(
proj_num int(10) NOT NULL,
proj_name varchar(20) NOT NULL,
start_date date NOT NULL,
end_date date DEFAULT '2099-12-31',
of_dpt varchar(20) REFERENCES department(dpt_name),
CONSTRAINT proj_pk PRIMARY KEY (proj_num,proj_name)
);
3.1、-主键 PRIMARY KEY
① 用于唯一地标识表中的某一条记录,不能有重复,不允许为空
② 作用:用来保证数据完整性
③ 个数:主键只能有一个
#主键
CONSTRAINT dpt_pk PRIMARY KEY (dpt_name)
# 这个也是主键
id int(10) PRIMARY KEY,
# 复合主键,其中proj_pk为自定义主键名
CONSTRAINT proj_pk PRIMARY KEY(proj_num,proj_name)
3.2、- 唯一约束 UNIQUE
① UNIQUE 约束唯一标识数据库表中的每条记录。
② UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
③ PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
注:每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
3.3、 -外键约束 FOREIGN KEY
① FOREIGN KEY 既能确保数据的完整性,也能表现表之间的关系
② 一个表可以有多个FOREIGN KEY
③ 每个FOREIGN KEY 必须references(参考)另外一个表的PRIMARYE KEY,FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
下面,准备为employee表中插入一条数据,但由于外键约束,且参考的department表中,dpt_name不存在“Dev”值,插入数据失败
接下来,department表中添加部门数据,再重新插入employee员工数据,成功
3.4、- 非空约束 NOT NULL
① NOT NULL 约束强制列不接受 NULL 值。
② NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
表employee中,age没有非空约束,插入如下数据
INTSERT INTO employee(id,name,salary,phone,in_dpt) VALUES(02,'Jack',6500,'2321454725','Dev');
结果:
没有告警,age 值为空时,表中显示为NULL
表employee中,salary有非空约束,插入如下数据
INTSERT INTO employee(id,name,age,phone,in_dpt) VALUES(03,'Lisa','5421355','Test');
结果如下,给出告警,salary值为空时,表中显示为0