MySQL数据库(四)DML(增.改.删).DDL(表创建.修改.删除.复制).约束.自增长列.事务.视图

一、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,'特朗普')

十、事务

#事务的特性
1.原子性:一个事务不可分割,要么都执行,要么都不执行
2.一致性:一个事务执行会使数据从一个一致状态切换到另一个一致状态
3.隔离性:一个事务不受其他事务的干扰
4.永久性:一个事务的提交,则会永久的改变数据库的数据

#分类:
#隐式事务:事务没有明显的开启和结束的标记(如:一般的update\insert\delete等)
#显式事务:具有明显的开启和结束的标记
步骤1:开启事务
set autocommit = 0;
start stransaction;#这句可以不写
步骤2:编写事务中的sql语句(select、insert、update、delete)
语句1;
savepoint 保存点名
语句2;
……

步骤3:结束事务
commit;#提交事务
或者:rollback to 保存点名;#回滚事务

十一、视图:view

#视图:只保存了sql的逻辑,不存储查询结果,使用视图时动态生成结果。
#基本格式:
create view 视图名 
as
查询语句;
#
create view myview1 as
SELECT salary,last_name,commission_pct,email,department_name
FROM employees e
INNER JOIN departments d
on e.department_id = d.department_id
WHERE e.commission_pct is not null;
#以后就可以直接使用 视图名作为数据来源,相当于表,但不像表那样占用磁盘空间
SELECT salary FROM myview1;

视图的修改、删除、查看属性等操作如下:

#视图的修改
--方法1:
create or replace view 视图名
as
查询语句;
--方法2:
alter view 视图名
as
查询语句;
#############################################################################################

删除视图
drop view 视图名1,视图名2,……

#############################################################################################
查看视图属性信息,和查看表一样;
desc myview1

 

你可能感兴趣的:(#,MySQL,数据库)