公众号 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只能插入一个
四、日期型
条件约束
分类:
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 约束名] 约束类型(字段名)【外键的引用】
标识列
又称为自增长列
即:可以不用手动插入值,系统提供默认的序列值
设置间隔大小(自增长间隔)
set auto_increment_increment=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;