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)

表的定义
表格约束

创建格式

字段名   字段类型 (长度),字段约束组成(可选)
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;

相关推荐

  1. Mysql中表的约束

    2023-12-21 08:58:02       9 阅读
  2. 数据库数据类型

    2023-12-21 08:58:02       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-21 08:58:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-21 08:58:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-21 08:58:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-21 08:58:02       20 阅读

热门阅读

  1. vue的动态组件及插槽详情

    2023-12-21 08:58:02       31 阅读
  2. 【DP】64.最小路径和

    2023-12-21 08:58:02       39 阅读
  3. PyQt5基础控件解析:QCalendar控件在Python中的应用

    2023-12-21 08:58:02       35 阅读
  4. 对数器的作用(找bug)

    2023-12-21 08:58:02       34 阅读
  5. DCMTK:编写测试CT采集类型FG类的程序

    2023-12-21 08:58:02       40 阅读