数据库表的创建
create database test;
drop database xuda;
show databases;
创建数据表,并插入数据
USE test;
create table student(
id INT UNSIGNED PRIMARY KEY,
name VARCHAR(20) NOT NULL,
sex CHAR(1) NOT NULL,
birthday DATE NOT NULL,
tel CHAR(11) NOT NULL,
remark VARCHAR(200)
);
INSERT INTO student VALUES(1,"李强","男","1995-05-15","18392513420",NULL);
show tables;
DESC student;
SHOW CREATE TABLE student;
DROP TABLE student;
使用float无法精确存储小数
CREATE TABLE temp(
id INT UNSIGNED PRIMARY KEY,
num FLOAT(20,10)
);
可以使用DECIMAL,这样不会丢失精度
DROP TABLE temp;
CREATE TABLE temp(
id INT UNSIGNED PRIMARY KEY,
num DECIMAL(20,10)
);
数据类型
CHAR (1-255)固定字符长度
VARCHAR (1-65535)不固定长度字符串[一般用这个就可以]
TXT 不确定长度字符串
MEDIUMTEXT 不确定长度字符串
日期类型
类型 | 大小 | 说明 |
---|---|---|
DATE | 3字节 | 日期 |
TIME | 3字节 | 时间 |
YEAR | 1字节 | 年份 |
DATETIME | 8字节 | 日期时间 |
TIMESTAMP | 4字节 | 时间戳 |
修改数据表结构
添加字段
ALTER TABLE student
ADD address VARCHAR(200) NOT NULL,
ADD home_tel CHAR(11) NOT NULL;
AlTER TABLE student
MODIFY home_tel VARCHAR(20) NOT NULL;
DESC student;
MODIFY 之前
id int(10) unsigned NO PRI
name varchar(20) NO
sex char(1) NO
birthday date NO
tel char(11) NO
remark varchar(200) YES
address varchar(200) NO
home_tel char(11) NO
MODIFY 之后
id int(10) unsigned NO PRI
name varchar(20) NO
sex char(1) NO
birthday date NO
tel char(11) NO
remark varchar(200) YES
address varchar(200) NO
home_tel varchar(20) NO
change更改字段名称
ALTER TABLE student
change address home_adress VARCHAR(20) NOT NULL;
DESC student;
id int(10) unsigned NO PRI
name varchar(20) NO
sex char(1) NO
birthday date NO
tel char(11) NO
remark varchar(200) YES
home_adress varchar(20) NO
home_tel varchar(20) NO
删除字段
ALTER TABLE student
drop home_adress,
drop home_tel;
数据库表字段约束
数据库范式
- 第一范式:原子性
- 第二范式:唯一性
- 第三范式:每列都与主键有直接关系,不存在传递依赖
字段约束
约束名称 | 关键字 | 描述 |
---|---|---|
主键约束 | PRIMARY KEY | 字段值唯一,且不为NULL |
非空约束 | NOT NULL | 字段值不能为NULL |
唯一约束 | UNIQUE | 字段值唯一,且可以为NULL |
外键约束 | FOREIGN KEY | 保持关联数据的逻辑性 |
- 建议主键值使用数字类型,这样检索速度快
- 非空约束要求字段值不能为NULL
create table t_teacher(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
tel CHAR(11) NOT NULL UNIQUE,
married BOOLEAN NOT NULL DEFAULT FALSE
);
id int(10) unsigned NO PRI
name varchar(20) NO
tel char(11) NO UNI
married tinyint(1) NO 0
外键约束
CREATE TABLE t_dept(
deptno INT UNSIGNED PRIMARY KEY,
dname VARCHAR(20) NOT NULL UNIQUE,
tel CHAR(4) UNIQUE
);
CREATE TABLE t_emp(
empno INT UNSIGNED PRIMARY KEY,
ename VARCHAR(20) NOT NULL,
SEX ENUM("男","女") NOT NULL,
deptno INT UNSIGNED NOT NULL,
hiredate DATE NOT NULL,
FOREIGN KEY (deptno) REFERENCES t_dept(deptno)
);
数据库的索引机制:数据排序,查找速度翻倍。
如何创建索引?
根据type创建索引idx_type
create table t_message(
id INT UNSIGNED PRIMARY KEY,
content VARCHAR(200) NOT NULL,
type ENUM("公告","通报","个人通知"),
create_time TIMESTAMP NOT NULL,
INDEX idx_type (type)
);
删除索引
DROP INDEX idx_type ON t_message
另外两种创建索引的方式
CREATE INDEX idx_type ON t_message(type)
ALTER TABLE t_message ADD INDEX idx_type(type)