mysql 23day DDL常用约束,数据类型

目录

数据库的四种语言

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)

表的定义

表格约束

创建格式

shell 复制代码
字段名   字段类型 (长度),字段约束组成(可选)
create table {库名}.{表名}({字段名} {字段类型、长度} {字段约束组成(可选)},{第二个字段},第三个字段)
实例
create table idol(`name` varchar(20) NOT NULL);

PRIMARY KEY:主键约束

主见的约束 特征

(不能重复 且不能为空 适用于用户昵称)

[使用方法 只能出现一次 第二次 如果想使用在两行就需要在最后单独声明]

shell 复制代码
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:外键约束

shell 复制代码
#可以为空但是不能重复
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)
);

主键外键 联合测试

shell 复制代码
#作用 关联 主键删除 外键也可以删除
#使用方法 外键指向主键 即可生效



#第一个表格设置

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;


开始测试

shell 复制代码
#给两个表格中写入内容

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:非空约束

表明这个字段不能为空必须填入内容

如果再插入数据的时候没有内容,则会报错

shell 复制代码
create table idol(`name` varchar(20) NOT NULL);

UNIQUE:唯一约束

表示此列,每个内容都不一样,

一般作为索引,可以增加数据库的查询速度

shell 复制代码
创建表
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:默认值约束

shell 复制代码
制作表格
create table t3(
id int,
myname varchar(20),
relation varchar(40) DEFAULT"陌生人"
);


插入数据
insert into t3(id,myname) VALUES (1,'xiaomign');

查看表格
select * from t3;

zerofill 零填充

零填充,如果设置三位 并且使用零填充约束

则会在前边 自动填充零

shell 复制代码
# 创建表格
create table ta(id int(3) zerofill);
# 插入数据
insert into ta values(1);
# 查看表的结构
desc ta;
#查看表内容
select * from ta;

auto_increment 自增加

shell 复制代码
--进入某库中
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)

shell 复制代码
create table test1( 
tinyint_test tinyint,
int_test int
);

字符串类型(varchar)

常用的

char

varchar

shell 复制代码
#创建表格
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

shell 复制代码
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)

shell 复制代码
#创建表格 以小数储存
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)

只能选择一个

shell 复制代码
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)

可以选择多个

shell 复制代码
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;

面试知识点

导入数据库

shell 复制代码
mysql -p'miam' <date.sql##

抹除数据

shell 复制代码
#如果使用delete (浪费时间,浪费服务器资源)
delete from {表名};
#抹除数据 从磁盘上抹除
truncate {表名};

alter 加入一个字段 注意事项

不要再高峰期执行 执行原理是 把原有的表复制一份,把新的字段 插入 然后把 原来的字段删除了。

shell 复制代码
alter table {表名} ADD {新字段名} {约束条件} {位置};
ALTER TABLE employees ADD job VARCHAR(20) NOT NULL AFTER name;
相关推荐
小光学长2 分钟前
基于vue框架的的流浪宠物救助系统25128(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
数据库·vue.js·宠物
掘金-我是哪吒2 分钟前
微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka
redis·mysql·mongodb·elasticsearch·微服务
零炻大礼包1 小时前
【SQL server】数据库远程连接配置
数据库
zmgst1 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
令狐少侠20111 小时前
explain执行计划分析 ref_
mysql
随心............1 小时前
python操作MySQL以及SQL综合案例
数据库·mysql
€☞扫地僧☜€1 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
CopyDragon1 小时前
设置域名跨越访问
数据库·sqlite
xjjeffery1 小时前
MySQL 基础
数据库·mysql
写bug的小屁孩1 小时前
前后端交互接口(三)
运维·服务器·数据库·windows·用户界面·qt6.3