Mysql的增删改查

公众号 CppCoding

数据操作语句:`在这里插入代码片`
插入:insert
修改:update
删除:delete

插入语句

语法1:
insert into 表名(列名...values(1,...);
语法2:
insert into 表名
set 列名=值,列名=...
方式1支持插入多行多个值,方式2不支持
方式1支持子查询,方式2不支持  //将子查询的结果插入到表
插入的值的类型要与列的类型一致或者兼容
insert into beauty(id,name,sex,borndate,phone,photo,boyfriend_id)
values(13,'唐艺昕','女','1990-4-23','19888888',null,2);

不可以为null的列必须插入值,可以为null的值如何插入值?
  假设phone是nullable
有两种插入方式。一种是在写字段,如何赋值为null,另一种是字段和值都不写
insert into beauty(id,name,sex,phone)
values(15,'娜扎','女',null);

insert into beauty(id,name,sex)
values(15,'娜扎','女');

列的顺序可以调换
insert into beauty(name,id,sex)
values('aa','13','male');

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

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

insert into beauty
set id=22,sex='male',name='12';

修改语句

1.修改单表记录
update 表名
set 列=新值,列=新值...
where 筛选条件;//若是不加筛选条件则会将表中的所有列都会更新
2.修改多表记录
sql92语法
update 表1 别名,表2 别名
set 列=...
where 连接条件
and 筛选条件;

sql99语法
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=...;
where 筛选条件
修改beauty表中姓唐的女生的电话为13888
update beauty 
set phone ='13888'
where name like '唐%';

修改张无忌的女朋友的电话号为114
update boys bo
inner join beauty b
on bo.'id'=b.`boyfriend_id`
set b.`phone`='114'
where bo.`byName`='张无忌';

修改没有男朋友的女神的男朋友编号都为2 
update boys bo
right join beauty b 
on bo.`id`=b.`boyfriend_id`
set b.`boyfriend_id`=2
where b.`id` is null;

删除语句

方式一:delete
1.单表删除
delete from 表 where 筛选条件
2.多表删除
==多表删除delete后面的表是要删除表的别名,例如要删除两个表的就将两个表的别名写上==
sql92
delete 表1别名
from 表1 别名,表2 别名
where 连接条件
and 筛选条件

sql99
delete 表1的别名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件

方式二:truncate 全部要删除,删除表所有内容
truncate table 表名

两个的区别:
1.delete后面可以加where,truncate不可以
2.假如要删除的列表中有自增的列,
如果使用delete删除后,在插入数据,会从删除的断点开始
使用truncate删除不能自增的值会在1开始
3.truncate无返回值,delete有
4.truncate不支持回滚,delete支持回滚
删除手机号以9结尾的女神信息
delete from beauty
where phone like '%9'

多表的删除
删除张无忌女朋友的信息
delete b
from beauty b
inner join boys bo on b.`boyfriend_id`=bo.`id`
where bo.`boyname`='张无忌';

库和表的创建、修改和删除

创建:create
修改:alter
删除:drop

一、库的管理
1.库的创建
语法:create database 库名;if not exists 表名若没有这个库则创建,有不会报错


二、表的管理
1.表的创建
create table 表名(
	列名 列的类型【(长度)约束】,
	列名 列的类型【(长度)约束】,
	列名 列的类型【(长度)约束】,
	...
	列名 列的类型【(长度)约束】
);
2.修改表
=1.修改列名
=2.修改列的类型或者约束
=3.添加、删除列
=4.修改表名

==if exists只存在表和库==
3.表的删除
drop table if exists book_author;

4.表的复制
create table copy like author;//仅仅复制表的结构

create table copy2
select * from author;//复制所有数据

create table copy3
select * from author
where nation='china';//复制满足条件的数据

create table copy4
select id
from author
where 0;//仅仅复制部分字段,不复制数据
创建库books
create database books;
create database if not exists books;

库的修改
alter database books character set gbk;

库的删除
drop database if exists books;

创建表book 
create table book(
	id int,
	bName varchar(20),
	price double,
	authorid int,
	publishDate datetime
);

创建表author
create table author(
	id int,
	au_name varchar(20),
	nation varchar(10)
);

修改列名
alter table book change column publishdate pubdate datatime;

修改列的类型或者约束
alter table book modify columnpubdate timestamp;

添加列
alter table author add column annual double;

删除列
alter table author drop column annual;

修改表名
alter table author rename to book_author;

常见的数据类型

数值型:
	整型
	小数:定点数,浮点数
字符型:
	较短的文本:char,varchar
	较长的文本:text,blob(较长的二进制数据)
日期型:
一、整型
tinyint,smallint,mediumint,int/integer,bigint

如果不设置有符号还是无符号,默认有符号。如果插入的值超过整型范围,则插入的值是临界值。如果不设置长度会有默认的长度,设置长度后加zerofill,加关键字后是无符号。
如何设置有符号和无符号
create table tab_int(
	t1 int(7),zerofill
	t2 int unsigned
);

二、小数
浮点型
float(m,d)
double(m,d)
定点型
dec(m,d)
decimal(m,d)
d是指小数点后的位数,m指整数部分加小数 部分位数总和,加入(5,2),即整数最多三位,小数最多两位,若超过位数,存入的值是其最大值

m和d也可以省略
浮点型随插入数值精度决定,定点型有自己的宽度

三、字符型
varchar是可变长度,尽管有自己赋值的长度

binary和varbinary与char和varchar类似

enum 是要求插入的值必须是列表中之一,不能大于列表中的值

set 和enum类似,但是set支持一次插入多个,enum只能插入一个


四、日期型

Mysql的增删改查_第1张图片
Mysql的增删改查_第2张图片Mysql的增删改查_第3张图片
Mysql的增删改查_第4张图片Mysql的增删改查_第5张图片Mysql的增删改查_第6张图片

条件约束

分类:
	not null:非空,保证该字段的值不能为空。例如id,name
	default:默认,用于保证该字段有默认值
	primary key:主键,用于保证该字段的值具有唯一性,并且非空。id
	unique:唯一,保证该字段具有唯一性,但是可以为空
	check:检查约束(mysql语法不支持),在括号加删选条件
	foreign key:用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值
				在从表添加外键约束,用于引用主表的某列的值

==show index from stdinfo==


约束的分类:
	列级约束:外键不支持
	表级约束:除非空、默认

列级语法:
create table(
	字段名 字段类型 列级约束,
	字段名,
	表级约束
);

表级语法:
在所有字段的下面加表级约束
【constraint 别名】 约束类型(字段名)

通用的写法:将除外键约束的都加列级约束,外键为表级约束

主键和唯一的对比:
	unique约束只允许列有一个值是null,多的会报错
	primary key一个表至多有一个,unique可以有多个
	primary key和unique都支持组合
	unique(name,id);就是支持name和id的重复,但是不允许两个都重复

外键特点:
	从表的外键列的类型和主表的关联列的类型要求一致或者兼容
	主表的关联列必须是一个key(一般是主键或者unique)
	插入数据先插入主表后插入从表
	删除数据先删除从表在删除主表
添加列级约束
create table stuinfo(
	id int primary key,
	stuName varchar(20) not null,
	gender char(1) check(gender='男' or gender='女'),
	seat int unique,
	age int default 18
	majorid int foreign key references major(id) //不支持外键
);

create table major(
	id int primary key,
	majorName varchar(20)
);

添加表级约束
create table stuinfo(
	id int,
	stdname char(1),
	seat int,
	age int,
	constraint pk primary key(id),
	constraint uq unique(seat)
);

修改表时添加和删除约束

添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束
添加表级约束
alter table 表名 add [constraint 约束名] 约束类型(字段名)【外键的引用】


Mysql的增删改查_第7张图片
Mysql的增删改查_第8张图片

标识列

又称为自增长列
 即:可以不用手动插入值,系统提供默认的序列值

设置间隔大小(自增长间隔)
set auto_increment_increment=3;//间隔是3

特点:
	必须和key搭配
	一个表最多一个标识列
	标识列只能是数值型
	
创建表时设置标识列
create table tab_identify(
	id int primary key auto_increament,
	name varchar(20) 
);

修改表示设置标识列
alter table tab_increment modify column id int primary key auto_increment;

修改表时删除标识列
alter table tab_increment modify column id int primary key;

你可能感兴趣的:(Mysql)