欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL数据库(四):DML(增、改、删)、DDL(表的创建、修改、删除、复制等)、约束、标识列(自增长列)

程序员文章站 2022-05-30 17:13:53
...

一、insert

写法一:

INSERT into 表名(列名1,……)
VALUES(值1,……);

写法二:

INSERT into 表名
SET 字段1=值1,字段2=值2,……

方式一的优点:

#优点:
1.支持插入多行
INSERT into 表名(列名1,……)
VALUES(值1,……),(值11,……),(值111,……)
2.支持子查询
INSERT into 表名(列1,……)
SELECT a,b……from ……
备注:子查询中的查询字段需要与insert插入字段对应
举例:
insert into beauty(id,`name`,phone)
(select 18,'d施','18789999999')

另,插入数据,注意点:

1.插入的值的类型要与列的类型一致或兼容;

2.列的顺序可以颠倒,但是value值的顺序也需要对应变化

3.列数和值的个数必须一致

4.可以省略列名,默认所有列名,而且列的顺序和表中列的顺序一致;

5.不可以为null的列必须插入值。可以为null的列插入值有两种写法:

#1.列不省略,对应值null,如该例子photo字段对应value为null
insert into beauty(id,`name`,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','18988888888',NULL,2)
#2.直接省略列,值自然没有;如该例子直接省略photo字段
insert into beauty(id,`name`,sex,borndate,phone,boyfriend_id)
VALUES(14,'金星','女','1990-4-23','18888888888',3)

二、update

1.修改单表
update 表名
set 列=新值,列2=新值2,……
where 筛选条件;

2.修改多表
--sql22--
update 表1 别名,表2 别名
set 列=值,……
where 表连接条件
and 筛选条件;

--sql99--
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=值,……
WHERE 筛选条件;

update boys bo
inner join beauty b 
on bo.id=b.boyfriend_id
set b.`phone`='114'
where bo.boyName='张无忌'

三、delete、truncate

1.delete
delete from 表名 where 筛选条件

1.truncate table 表名
区别:
1.truncate不支持where条件,删除表单全部数据
2.假如要删除的表中有自增长列,delete删除后,再自增长列的值从断点开始;
truncate删除后,再插入数据,自增长列的值从1开始。

四、库的创建、删除

1.库的创建
create database if not exists 库名;
# if not exists 是容错:为了避免数据库已创建而报错,即:不存在才执行创建
2.库的删除
drop datebase if exists 库名;
#if exists 是容错:为了避免数据库不存在而报错,即:存在才执行删除

五、表的创建

create table if not exists 表名(
		列名 列的type 【长度|约束】,
		列名 列的type 【长度|约束】,
		列名 列的type 【长度|约束】,
		……
)
# if not exists 是容错:为了避免表已创建而报错,即:不存在才执行创建

六、表的修改

2.1修改列名
#类型可以不加,意思是这句sql可以同时改列的类型
alter table 表名 change column 旧列名 新列名 【类型】;
2.2修改列的类型或约束
alter table 表名 modify column 列名 类型 约束;
2.3新增列、删除列
alter table 表名 add column 列名 类型;
alter table 表名 drop column 列名;
2.4修改表名
alter table 表名 rename to 新表名;

七、表的删除、复制

3.表的删除
drop table if EXISTS 表名;
#if exists 是容错:为了避免表不存在而报错,即:存在才执行删除
4.表的复制
4.1 仅复制表的结构
create table 新表名 like 要复制的表名; 
4.2 复制表的结构+表的数据
create table 新表名 
select * from 要复制的表名;
4.3 复制表的结构+部分数据(部分列,部分行)
create table 新表名
select 列1,列2,……
FROM 要复制的表名
WHERE 筛选条件;
4.4 仅仅复制结构,不需要数据
create table 新表名
select 列1,列2,……
FROM 要复制的表名
where 写一个不成立的条件(如:1=2)就实现了没有数据;

八、常见约束

#含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性;

create table 表名(
	字段名 字段类型 约束
)

分类:六大约束
1.非空约束 not null
用于保证该字段的值不能为空,如姓名、学号
2.默认约束 default
用于保证该字段有默认值,如性别
3.主键约束 primary key
用于保证该字段的值具有唯一性,并且非空;如员工编号
4.唯一约束 unique
用于保证该字段的值具有唯一性,可以为空;如座位号
5.检查约束 check[mysql中不支持],如年龄、性别,限制其值(不可大于150,男、女)
6.外键约束 foreign key(不支持)
用于限制两个表的关系,保证该字段值必须来自关联表对应列的值

举例:

例:
create table stuinfo(
	id int primary key,#主键
	stuname varchar(20) not null,#非空
	gender char(2) check(gender='男' or gender ='女'),#检查
	seat int unique,#唯一
	age int default 18,#默认18
	classid int
)

除了在列后面添加约束,还可以通过添加表级约束来为各字段添加约束
格式:[constraint 约束名(自取)] 约束类型(字段名) ;[]中的内容可以省略

create table stuinfo(
	id int,
	stuname varchar(20),
	gender char(2),
	seat int,
	age int ,
	classid int,
	constraint uq unique(seat),#唯一约束
	constraint fk primary key(id)#主键
	……
)

#主键和唯一的对比
1.均保证唯一
2.主键字段不能空,唯一字段可以为空
3.一个表最多1个主键约束;但可以多个唯一约束
4.可以组合(不推荐组合);

九、标识列(自增长列)

标识列:又称自增长列
含义:可以不用手动的插入值,系统提供默认的序列值
关键字:AUTO_INCREMENT
create table stuinfo(
	id int PRIMARY KEY AUTO_INCREMENT,
	stuname varchar(20)

)
DROP TABLE IF EXISTS stuinfo;

注意:在插入的时候,标识列不需要我们插入值,但是如果使用*,我们需要占位,一般使用null
如:insert into stuinfo VALUES(null,'特朗普')

 

相关标签: # MySQL 数据库