目录
- 数据库的四种语言
- 常用约束(DDL)
- 创建格式
- PRIMARY KEY:主键约束
- FOREIGN KEY:外键约束
- 主键外键 联合测试
- 开始测试
- NOT NULL:非空约束
- UNIQUE:唯一约束
- DEFAULT:默认值约束
- zerofill 零填充
- auto_increment 自增加
- 数据类型
- 数值型(int)
- 字符串类型(varchar)
- 时间和日期类型(date)
- 浮点数类型(decimal)
- 枚举类型(ENUM)
- 集合类型(SET)
- 面试知识点
- 导入数据库
- 抹除数据
- alter 加入一个字段 注意事项
数据库的四种语言
DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
DDL(data definition language):
DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE
DML(data manipulation language):
DQL语句 数据库查询语言: 查询数据SELECT
DQL(Data Query Language )数据查询语言 SELECT
DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
DCL(Data Control Language):
常用约束(DDL)
表的定义
表格约束
创建格式
字段名 字段类型 (长度),字段约束组成(可选)
create table {库名}.{表名}({字段名} {字段类型、长度} {字段约束组成(可选)},{第二个字段},第三个字段)
实例
create table idol(`name` varchar(20) NOT NULL);
PRIMARY KEY:主键约束
主见的约束 特征
(不能重复 且不能为空 适用于用户昵称)
[使用方法 只能出现一次 第二次 如果想使用在两行就需要在最后单独声明]
create table student6(
id int primary key auto_increment not null,
name varchar(50) not null,
sex enum('male','female') not null default 'male',
age int not null default 18
);
desc student6;
insert into student6 values (1,'alice','female',22);
select * from student6;
insert into student6(name,sex,age) values('king','male',1002);
select * from student6;
primary key //只能使用一次
#第二种写法
create table student7(
id int auto_increment not null,
name varchar(50) not null,
sex enum('male','female') not null default 'male',
age int not null default 18
primary key(id)
);
#符合组件 写法 //作用 两列 id不一样 name一样也是可以的
create table student8(
id int auto_increment not null,
name varchar(50) not null,
sex enum('male','female') not null default 'male',
age int not null default 18,
primary key(id,name)
);
desc student8;
insert into student8 (name,sex,age) values ('ww','male','18');
select * from student8;
#使用默认 属性
create table student9(
id int auto_increment not null,
name varchar(50) not null,
sex enum('male','female') default 'male',
age int default 18,
primary key(id,name)
);
desc student9;
insert into student9(name) values('wakaa');
select * from student9;
FOREIGN KEY:外键约束
#可以为空但是不能重复
create table department(
dept_id int,
dept_name varchar(30) unique,
comment varchar(50)
);
desc department;
insert into department values(1,'king','sdfasdf');
insert into department values(2,'kk','sdfasdf');
select * from department;
insert into department values(1,NULL,'sdfasdf');
select * from department;
#第二种写法,是可以写在下边的 和 PRIMARY一样的写法
create table department22(
dept_id int,
dept_name varchar(30) ,
comment varchar(50),
unique (dept_name)
);
主键外键 联合测试
#作用 关联 主键删除 外键也可以删除
#使用方法 外键指向主键 即可生效
#第一个表格设置
create table employees(
name varchar(50) not null,
mail varchar(20),
primary key(name)
)engine=innodb;
engine=innodb;//指定搜索引擎 如果一个加了 另外一个没有加 会导致实验失败
#第二个表格设置
create table payroll(
id int not null auto_increment,
name varchar(50) not null,
payroll float(10,2) not null,
primary key(id),
foreign key(name) references employees(name) on update cascade on delete cascade
)engine=innodb;
#查看两个表格类型 desc
desc employees;
desc payroll;
开始测试
#给两个表格中写入内容
insert into employees values('k','k@king.com');
insert into payroll values(1,'k','80000.23');
#查看两个表格
select * from employees;
select * from payroll;
#更新 更改 第一个表格
update employees set name='king' where name='k';
#查看两个表格
select * from employees;
select * from payroll;
#删除第一个表格
delete from employees where name='king';
#查看两个表格
select * from employees;
select * from payroll;
DROP TABLE payroll;
DROP TABLE employees;
show tables;
>>>如果主表格没有同名数据 附表格 则会插入数据失败
>>>如果直接删除 则会删除失败
>>>如果进行修改则会报错
NOT NULL:非空约束
表明这个字段不能为空必须填入内容
如果再插入数据的时候没有内容,则会报错
create table idol(`name` varchar(20) NOT NULL);
UNIQUE:唯一约束
表示此列,每个内容都不一样,
一般作为索引,可以增加数据库的查询速度
创建表
create table idol(`id` int UNIQUE,
`name` varchar(20) NOT NULL
);
插入数据 添加约束
insert into t2 VALUES (1,'wang'),(2,'li');
插入同样id 测试唯一约束
insert into t2 values (1,'fei')
最后报错
DEFAULT:默认值约束
制作表格
create table t3(
id int,
myname varchar(20),
relation varchar(40) DEFAULT"陌生人"
);
插入数据
insert into t3(id,myname) VALUES (1,'xiaomign');
查看表格
select * from t3;
zerofill 零填充
零填充,如果设置三位 并且使用零填充约束
则会在前边 自动填充零
# 创建表格
create table ta(id int(3) zerofill);
# 插入数据
insert into ta values(1);
# 查看表的结构
desc ta;
#查看表内容
select * from ta;
auto_increment 自增加
--进入某库中
use datebase;
--生成表格
create table ttt1(
id int primary key auto_increment,
name varchar(40)
);
--插入数据
insert into ttt1(name) VALUES ('liubang'),('xiaohe'),('liuche');
--查看表格
select * from ttt1;
--插入数据
数据类型
数值型(int)
常用数据类型:
tinyint(有符号型最大值127),
int(有符号型最大值2147483647)
create table test1(
tinyint_test tinyint,
int_test int
);
字符串类型(varchar)
常用的
char
varchar
#创建表格
CREATE TABLE king.string (
id int ,
str1 char,
str2 varchar(20));
#查看表格类型
desc king.string;
# 插入数据 由于char 如果没设置 则只能插入一个数据 所以这里 插入一个a
insert into king.string VALUES (1,"a","aa");
#打印表格
select * from king.string;
# 修改 char 可以插入四个数据
ALTER TABLE king.string MODIFY str1 char(40);
#插入两个末尾带空格的字符 看看数据库怎么保存
insert into king.string VALUES (1,"aaa ","aaa ");
#查看两个字符长度
#查看第一个
SELECT LENGTH(subquery_alias.str1) AS result_length
FROM (SELECT str1 FROM king.string WHERE id=1) AS subquery_alias;
#查看第二个
SELECT LENGTH(subquery_alias.str2) AS result_length
FROM (SELECT str2 FROM king.string WHERE id=1) AS subquery_alias;
DELETE from king.string where str1='a'
时间和日期类型(date)
year、date、time、datetime、timestamp
CREATE TABLE king.time1(
t1 date, t2 time ,t3 datetime, t4 year ,t5 timestamp
);
desc king.time1;
insert into king.time1(t1,t2,t3,t4) VALUES (now(),now(),now(),now());
select * from king.time1;
浮点数类型(decimal)
#创建表格 以小数储存
CREATE TABLE king.num1(num1 decimal(20,10));
#插入数据
insert into king.num1 VALUES (12.3123123);
insert into king.num1 VALUES (151.313232323123);
#打印表格内容
select * from king.num1;
枚举类型(ENUM)
只能选择一个
CREATE TABLE king.my1 (
`id` int PRIMARY KEY auto_increment COMMENT "主键 自增",
`name` VARCHAR(20) NOT NULL,
`sex` ENUM("男","女") NOT NULL DEFAULT "男",
`hobby` SET("nusic","game","eat","mv") NOT NULL
)ENGINE="INNODB"
# 查看表格结构
desc king.my1;
# 插入数据
insert into king.my1(name,sex,hobby) values ('huahua',"女","nusic,game");
# 查看表格
select * from king.my1;
集合类型(SET)
可以选择多个
CREATE TABLE king.my1 (
`id` int PRIMARY KEY auto_increment COMMENT "主键 自增",
`name` VARCHAR(20) NOT NULL,
`sex` ENUM("男","女") NOT NULL DEFAULT "男",
`hobby` SET("nusic","game","eat","mv") NOT NULL
)ENGINE="INNODB"
# 查看表格结构
desc king.my1;
# 插入数据
insert into king.my1(name,sex,hobby) values ('huahua',"女","nusic,game");
# 查看表格
select * from king.my1;
面试知识点
导入数据库
mysql -p'miam' <date.sql##
抹除数据
#如果使用delete (浪费时间,浪费服务器资源)
delete from {表名};
#抹除数据 从磁盘上抹除
truncate {表名};
alter 加入一个字段 注意事项
不要再高峰期执行 执行原理是 把原有的表复制一份,把新的字段 插入 然后把 原来的字段删除了。
alter table {表名} ADD {新字段名} {约束条件} {位置};
ALTER TABLE employees ADD job VARCHAR(20) NOT NULL AFTER name;